Cordova Android7.0.0应用运行失败,.so库加载报UnsatisfiedLinkError
Cordova Android 7.x 常见问题解决方案
一、升级至Cordova Android 7.0.0后应用无法运行
升级到Cordova Android 7.x后出现运行失败,大概率是环境或插件兼容性问题,你可以按下面的步骤排查:
- 检查插件兼容性:很多旧插件还没适配Cordova Android 7的新项目结构,先执行
cordova plugin list列出所有插件,逐个确认插件是否支持7.x版本。对于不兼容的插件,先执行cordova plugin remove 插件ID,再重新安装该插件的最新版本(尽量选择维护活跃的插件)。 - 验证Android SDK环境:Cordova Android 7.0.0要求Android SDK Build Tools至少26.0.1、Target SDK版本至少26。你可以运行
cordova requirements命令快速检查环境是否满足,缺什么就去SDK Manager里安装对应的版本。 - 清理缓存重建项目:缓存残留很容易导致奇怪的问题,先执行
cordova clean android清理缓存,再用cordova build android --verbose重新构建,通过verbose输出的错误信息,就能定位到具体的问题(比如权限配置错误、资源文件缺失等)。 - 检查Gradle配置:Cordova Android 7开始使用Gradle Wrapper,默认依赖Gradle 4.1版本。如果之前自定义修改过
platforms/android/build.gradle的配置,可能会和新版本冲突,建议先恢复默认配置,再根据需求调整。
二、Cordova Android 7应用中.so库加载失败(UnsatisfiedLinkError)
你遇到的java.lang.UnsatisfiedLinkError问题,核心是Cordova Android 7.x改用了Android Studio标准项目结构,原来的插件资源路径配置已经失效,按下面的方法修改plugin.xml即可解决:
1. 修正.so文件的配置路径
Cordova Android 7.x要求原生.so库放在src/main/jniLibs/[架构]/目录下,而不是旧版本的libs/[架构]/。所以你需要修改plugin.xml中的resource-file配置:
<!-- 针对armeabi架构的配置 --> <resource-file src="src/android/libs/armeabi/xxxx.so" target="src/main/jniLibs/armeabi/xxxx.so" /> <!-- 如果有其他架构(比如armeabi-v7a、x86、x86_64等),也要对应添加 --> <resource-file src="src/android/libs/armeabi-v7a/xxxx.so" target="src/main/jniLibs/armeabi-v7a/xxxx.so" />
2. 修正jar文件的配置路径
jar文件的目标路径也需要调整到新的位置,修改plugin.xml中的lib-file配置:
<lib-file src="src/android/libs/xxxxx.jar" target="app/libs/xxxxx.jar" />
3. 其他注意事项
- 加载库的方式要正确:Java代码里加载库时,应该用
System.loadLibrary("xxxx"),这里的名字是去掉.so后缀的(比如你的库是xxxx.so,就写xxxx),不要用带路径的System.load(),否则容易出问题。 - 确保库的架构匹配:不要把armeabi的.so文件放到armeabi-v7a目录下,不同架构的库要对应到正确的jniLibs子目录里。
- 重新安装插件生效:修改完plugin.xml后,先执行
cordova plugin remove 你的插件ID,再重新安装插件,确保新的配置能被正确复制到项目中。
内容的提问来源于stack exchange,提问作者manjunath kallannavar
相关产品推荐
相关产品推荐

