android中的armeabi、armeabi-v7a、arm64-v8a及x86等

1.Android 设备的CPU类型

  1. armeabiv-v7a: 第7代及以上的 ARM 处理器。2011年15月以后的生产的大部分Android设备都使用它.
  2. arm64-v8a: 第8代、64位ARM处理器,很少设备,三星 Galaxy S6是其中之一。
  3. armeabi: 第5代、第6代的ARM处理器,早期的手机用的比较多。
  4. x86: 平板、模拟器用得比较多。
  5. x86_64: 64位的平板

armeabi设备只兼容armeabi,不支持硬件辅助浮点运算,支持所有的 ARM* 设备;
armeabi-v7a设备兼容armeabi-v7a、armeabi;
arm64-v8a设备兼容arm64-v8a、armeabi-v7a、armeabi;
x86设备兼容x86、armeabi;
x86_64设备兼容x86_64、x86、armeabi;
mips64设备兼容mips64、mips;
mips只兼容mips;

2.Android设备如何加载.so文件

以arm64-v8a设备为例,该Android设备优先寻找libs目录下的arm64-v8a文件夹。如果有文件夹,但是没有so库,则会报错。如果没有arm64-v8a文件夹,则会去找armeabi-v7a文件夹。如果找不到armeabi-v7a文件夹,则寻找armeabi文件夹,兼容运行该文件夹下的so。

3.实际操作

由上兼容性可以看到不同设备基本都是可以兼容armeabi的so库,只是效率,性能上有问题。

反编译微信,里面只有armeabi这个文件夹,应该是在这个目录下放置其他架构的SO文件,再通过代码实现选择加载哪一个架构的SO文件。

使用armeabi的手机已经很少了,几乎忽略不计了。

为了减小 apk 体积,只保留 armeabi 和 armeabi-v7a 两个文件夹,并保证这两个文件夹中 .so 数量一致

对只提供 armeabi 版本的第三方 .so,原样复制一份到 armeabi-v7a 文件夹

你可能感兴趣的:(android,java,apache)