Flutter如何修复JNI_OnLoad返回Bad JNI version的报错问题
问题核心
这个UnsatisfiedLinkError报错是release模式下libmobileffmpeg.so库加载失败导致,debug模式正常是因为debug默认关闭了代码混淆和资源裁剪,不会误删FFI绑定相关的类和方法。
解决方案
- 新增混淆规则:在安卓项目的
android/app/proguard-rules.pro文件中添加如下配置,避免mobileffmpeg相关类被混淆裁剪:
-keep class com.arthenica.mobileffmpeg.** { *; } -dontwarn com.arthenica.mobileffmpeg.**
- 配置ABI架构过滤:在
android/app/build.gradle的defaultConfig闭包内添加ndk架构配置,确保打包时包含对应架构的so文件:
android { defaultConfig { // 其他配置保持不变 ndk { // 根据你的业务需求选择支持的架构,不需要32位可以移除armeabi-v7a abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86_64' } } }
- 升级依赖版本:你使用的
video_editor依赖的旧版flutter_ffmpeg已经停止维护,建议升级到video_editor最新稳定版,新版已经切换到维护中的ffmpeg_kit_flutter作为底层依赖,可避免此类JNI兼容问题。 - 临时验证方案:如果需要快速定位问题,可以在
android/app/build.gradle的release构建配置中,暂时把minifyEnabled和shrinkResources都设置为false,关闭混淆和资源裁剪后重新打包测试,如果不再报错就可以确认是混淆规则缺失导致的问题。
注意:每次修改配置后都要执行flutter clean清理构建缓存,再重新打包release包测试,避免缓存导致配置不生效
内容的提问来源于stack exchange,提问作者MuhammedYesilmen
相关产品推荐
相关产品推荐

