Android源码编译JNI遇到的问题与解决方法

这些问题是都是坑,有的问题晚上都找不到解决方法,是因为这些问题只要用到源码编译的时候才会遇到,这里我用的是源码编译。
问题如下;

问题1.dlopen(“/data/app/xxx.xxx.so”)failed,dlopen”/data/app/xxx.xxx.so” has unexcepted e_machine 40
这里写图片描述

解决方法:这里是因为模拟器的cpu和编译出来的.so文件的平台不一样,这里我用的arm编译的.so动态库文件,模拟器是genymotion模拟器,由于genymotion模拟器的cpu是x86的架构,且不能改
网上说下载Genymotion-ARM-Translation-V1.2.zip拖到genymotion模拟器中,我试了很多次不行。这里我是使用x86平台编译了.so动态库文件,此时这导入工程中,此时问题就解决了。

问题2. 源码编译在out/target/product/genric_x86/目录下的apk, 首先无法将工程中的.so打包到APK中,当模拟器运行其APK时LogCat会提示Cannot find xxx.xxx.so文件
解决方法:这是因为工程目录下的Android.mk有个参数设置错误
这里要将这样设置LOCAL_MODULE_TAGS := samples,此时.so库文件在编译的时会打包到apk中
这里可以参考http://blog.chinaunix.net/uid-26990529-id-3440666.html详解。

问题3: java.lang.UnsatisfiedLinkError: JNI_ERR returned from JNI_OnLoad in “xxx.xxx.so”,
解决方法:这里是因为java混淆编译的问题,在Android.mk文件中要这样设置
LOCAL_PROGUARD_ENABLED := disabled
这里可以参考http://blog.csdn.net/winson_jason/article/details/9101089详解

问题4:adb install 时 Failed:[INSTALL_FAILED_DEXOPT]
解决方法:这里是因为源码编译时使用了odex进行了优化,导致文件丢失很多变量
网上说了很多将未进行优化的package.apk.unaligned进行adb install ,这里我都尝试了,不可以,这里我是在工程目录下的Android.mk文件中加入这样一句话然后重新编译。
LOCAL_DEX_PREOPT := false
这句话的意思是不使用odex进行优化,有关odex优化apk的内容请参考http://blog.csdn.net/huangyabin001/article/details/46973625详解

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值