编译ffmpeg-kit Android AAR遇类找不到错误,求视频转音频及ffprobe适配方案
问题解决与正确AAR编译指南
一、ClassNotFoundException 错误修复
这个错误是因为编译生成的AAR缺少smart-exception库的依赖类,解决方案如下:
- 项目中手动添加依赖
在Android项目的app/build.gradle中添加对应依赖,版本号需匹配编译AAR时使用的基础框架版本:
implementation 'com.arthenica:smart-exception:0.1.0'
- 修正编译脚本的打包配置
如果使用mobile-ffmpeg类编译脚本,检查脚本内的gradle配置项,确保smart-exception模块被纳入AAR的打包流程,避免编译时遗漏该库的class文件。
二、最小化体积的AAR编译命令
针对仅视频转音频、ffprobe提取媒体信息的需求,以下是精简后的编译命令,最大化压缩体积:
./android.sh -d \ --enable-android-media-codec \ --enable-android-zlib \ --enable-lame \ --enable-opus \ --enable-libvorbis \ --disable-arm-v7a-neon \ --disable-x86 \ --disable-x86-64 \ --disable-arm-v7a \ --disable-all-except-libraries-and-programs \ --enable-programs=ffmpeg,ffprobe \ --disable-decoders=all \ --enable-decoders=h264,hevc,mpeg4,vp8,vp9 \ --disable-encoders=all \ --enable-encoders=libmp3lame,libopus,libvorbis,libshine \ --disable-filters=all \ --disable-demuxers=all \ --enable-demuxers=mov,mp4,flv,avi,mkv,webm \ --disable-muxers=all \ --enable-muxers=mp3,opus,ogg \ --disable-protocols=all \ --enable-protocols=file \ --disable-bsfs=all \ --enable-bsfs=h264_mp4toannexb,hevc_mp4toannexb
命令关键说明:
--disable-all-except-libraries-and-programs:禁用所有非必要组件,仅保留指定库和工具--enable-programs=ffmpeg,ffprobe:仅保留视频转码所需的ffmpeg、媒体信息提取所需的ffprobe- 解码器仅保留主流视频格式编码,编码器仅保留目标音频编码格式
- 解复用器仅支持常见视频容器,复用器仅支持音频输出容器
- 仅启用本地文件协议,禁用所有网络类协议
- 仅保留转码必需的比特流过滤器
三、额外体积优化措施
- 剥离调试符号
编译完成后,用strip命令移除native库的调试符号,进一步缩小体积:
strip -s ./build/ffmpeg/android-arm64-v8a/lib/*.so
- 启用ProGuard/R8混淆
在app/build.gradle中开启混淆与资源压缩,并添加规则保留核心类:
buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } }
在proguard-rules.pro中添加:
-keep class com.arthenica.mobileffmpeg.** { *; } -keep class com.arthenica.smartexception.** { *; }
内容的提问来源于stack exchange,提问作者kish0n
相关产品推荐
相关产品推荐

