起因
今天要出个mono测试包,发现在64位机型上无法运行。
分析
mono版本不能导出64位的版本,导出的工程中,只留下了armeabi-v7a的库文件。按理说,这样应该没问题,因为64位的架构是向下兼容的。后来发现,apk解压出来,居然自动加入了几个arm64-v8a的库文件。这就导致系统认为可以直接使用arm64-v8a的库,然而其他我们导入的库只在armeabi-v7a中才有,也就是在arm64-v8a找不到需要的库,就挂了。
解决
自动加入的arm64-v8a库文件不需要,删了就行了。
学习
- arm、x86、mips是三种不同的cpu架构系。arm和mips是精简指令集(RISC)处理器架构,x86是复杂指令集(CISC)处理器架构。前者能耗更低,后者性能更高,因此前者常用于手机。
- armeabi-v7a是支持32位系统的指令集,而arm64-v8a则支持64位,并且向下兼容32位。
- x86是支持32位系统的指令集,而x86_64则支持64位,并且向下兼容32位。
- Android 设备的CPU类型通常称为”ABIs”(Application Binary Interface 应用二进制接口)。
参考
Android 设备支持的7种CPU框架(ABIs)
我的Android进阶之旅------>Android 关于arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容问题
手机arm架构是不是也有很多类吗?他们的区别是什么?
分不清ARM和X86架构,别跟我说你懂CPU!