最近最项目遇到的一个问题:
Android 的 so 库和 ABI 配置我原先也是没有什么概念的,直到上个周,在我尝试跑一个程序的时候,真机运行没问题,但是用伟大的模拟机的时候,遇到了这么一个错误:
模拟机的下面显示:
Device supports x86,but APK only supports armeabi-v7a,armeabi,x86_64;
模拟机的设备是 x86,但是运行的这个程序的 apk 却只支持 armeabi-v7a,armeabi 和 x86_64 三种。
这个问题不仅仅是一个问题,它是很多个问题
是的,那么问题来了
x86,armeabi-v7a,armeabi,x86_64 到底是什么玩意?
我们的代码是在哪里设置apk对它们支持的?
怎么查看和设置模拟机的支持类型?
为什么我连接的真机大华为 HUAWEI PE-TL20 没有显示这样的错误?
宝宝发现了真相,快来夸我
为了弄明白上面的几个疑问,我 google 了很多相关方面的内容,终于召唤真相~~下面一个个来解释~
1.x86,armeabi-v7a,armeabi,x86_64 到底是什么玩意?
这四个玩意都是 CPU 架构类型的名称。
目前 android 支持的 CPU 架构有有以下几种:
CPU架构 描述
armeabi 第5代 ARM v5TE,使用软件浮点运算,兼容所有ARM设备,通用性强,速度慢
armeabi-v7a 第7代 ARM v7,使用硬件浮点运算,具有高级扩展功能
arm64-v8a 第8代,64位,包含AArch32、AArch64两个执行状态对应32、64bit
x86 intel 32位,一般用于平板
x86_64 intel 64位,一般用于平板
mips 少接触
mips64 少接触
2.我们的代码是在哪里设置apk对它们支持的?
如果你和我用的开发工具都是 Android Studio 的话,那么在程序的主module 的 build.gradle中你会发现有这么个代码:
defaultConfig {
ndk {
abiFilters "armeabi", "armeabi-v7a", "x86_64"
}
}
- 1
- 2
- 3
- 4
- 5
3.怎么查看和设置模拟机的支持类型?
这个问题非常简单,我们在创建一个模拟机的时候,就有 ABI 的选择,因为粗心,之前一直都没有发现,看下图:
有些项目必须是arm构架,而不能用x86,所以只能运行支持arm构架的模拟器,而android studio自带的arm构架模拟器简直慢到不能用。所以用了Genymotion模拟器,该模拟器要支持arm构架也是要装插件的。
装插件的过程中碰到了几个坑:
1、Genymotion-ARM-Translation.zip,已经过时。
我用的Genymotion版本。
原生的Genymotion模拟器只支持x86架构,很多使用了.so文件的应用不支持x86架构,因此无法运行。如果想要运行,必须安装ARM转换包。
本文提供ARM_Translation_Marshmallow
、Genymotion-ARM-Translation_v1.1
、ARM_Translation_Lollipop
的三个版本。
链接:https://pan.baidu.com/s/1bp8mo27 密码:ipt0
使用方法:
在Genymotion里面建立Android 6.0的模拟器。
开机后把ARM_Translation_Marshmallow.zip拖到模拟器视窗中,让他自动安装。
完成后重开模拟器即可。
在Genymotion里面建立Android 5.0的模拟器。
开机后把ARM_Translation_Lollipop.zip拖到模拟器视窗中,让他自动安装。
完成后重开模拟器即可。
2、“Files successfully copied to: /sdcard/Download”,要是碰到这个问题,说明路径有问题。
原来此文件是不能放到含有中文路径的,因为我的用户名是中文,其实桌面的路径也是带中文的!
而且路径和文件名不能有空格!
1 把它拷贝到纯英文的路径(直接拷贝到D盘根目录也行)
2 拖拽到模拟器主页屏幕上即可正常安装!
3 然后将模拟器关机,关闭模拟器后重启即可。
转载参考:
https://blog.csdn.net/qq_34476727/article/details/74910379
https://blog.csdn.net/zhangxichao100/article/details/78675203
https://blog.csdn.net/w605283073/article/details/70597368
https://blog.csdn.net/zy517863543/article/details/54629390