Android so文件是32位时,如何在64位手机上运行。

今天遇到一个很蛋疼的问题,使用了网上的开源二维码扫描,所用的so文件是32位的,在64位手机上报错,解决的办法是在项目目录下的build.gradle文件中添加以下字段android

输入图片说明

而后在项目文件夹下的gradle.properties文件中加入eclipse

android.useDeprecatedNdk=true

这时你的32位SO文件就能够在64位手机上运行了。gradle

首先要明白ABI的概念: ABI(Application Binary Interface)实际就是指应用程序基于哪一种指令集来进行编译,咱们能用到的ABI 也就四种 armeabi armeabi-v7a x86 和mips ,前二者是最多见的。ui

其次这4个编译选项的含义: 1.‘armeabi’ – 默认选项,将建立以基于 ARM* v5TE 的设备为目标的库。 具备这种目标的浮点运算使用软件浮点运算。 使用此 ABI 建立的二进制代码将能够在全部 ARM* 设备上运行。 2.‘armeabi-v7a’ – 建立支持基于 ARM* v7 的设备的库,并将使用硬件 FPU 指令。 3.‘x86’ – 生成的二进制代码可支持包含基于硬件的浮点运算的 IA-32 指令集. 4.mips — 支持应用二进制接口.net

总结: APP_ABI 赋值,就是为了交叉编译生成相应芯片可执行的指令集。直观的看就是若是你将 APP_ABI := armeabi armeabi-v7a mips x86 那么在你的android工程下边的 libs 里边会出现 armeabi armeabi-v7a mips x86 这四个目录下会分别生成 4个.so文件。程序在Android手机运行时,根据手机自身CPU芯片不一样,去选择调用相应的.so文件。code

附:若是要是使用eclipse开发。直接删除arm64-v8a文件夹,和所依赖的动态库中的arm64-v8a,由于64能够向下兼容32位。因此请保持各个包中so文件相同。blog

http://blog.csdn.net/k316378085/article/details/52034530 http://blog.csdn.net/qq_15003505/article/details/51592431接口

相关文章
相关标签/搜索