Flutter插件中native依赖未复制到Android nativeLibraryDir问题求助
问题核心原因
你遇到的现象是典型的Android原生库未解压配置导致的问题:从Android 6.0开始系统支持原生库直接从APK内加载无需解压到本地目录,AGP 3.6+版本默认开启该特性,所以会出现APK内包含.so文件、App可以正常运行,但context.nativeLibraryDir路径下找不到对应文件的情况。
解决方案
- 核心配置修改:在你插件的
AndroidManifest.xml和示例宿主App的AndroidManifest.xml的<application>节点中,添加android:extractNativeLibs="true"属性。该属性设置为true后,系统安装APK时会将所有原生库解压到context.nativeLibraryDir路径下,满足你将.so作为可执行文件调用的需求。 - 确认ABI过滤配置:在示例App的
build.gradle的defaultConfig块中添加对应ABI的过滤规则,确保你需要的架构的.so文件被打包和解压:
ndk { abiFilters 'arm64-v8a', 'x86', 'armeabi-v7a' // 按需添加你需要支持的架构 }
- 原有打包配置保留:你当前插件
build.gradle中的sourceSets配置是正确的,已经可以将jniLibs下的原生库打进APK,不需要修改。
额外说明
你观察到的libflutter.so不在nativeLibraryDir但App正常运行的现象也符合上述逻辑:当extractNativeLibs为false时,系统原生库加载器会直接从APK的lib目录读取.so文件完成加载,不需要解压到本地路径,所以不会触发崩溃。
内容的提问来源于stack exchange,提问作者Talha Balaj
相关产品推荐
相关产品推荐

