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