欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android-Device supports x86,but APK only supports armeabi-v7a,armeabi,x86_64

程序员文章站 2022-05-16 14:49:45
...

最近最项目遇到的一个问题: 
Android 的 so 库和 ABI 配置我原先也是没有什么概念的,直到上个周,在我尝试跑一个程序的时候,真机运行没问题,但是用伟大的模拟机的时候,遇到了这么一个错误: 
Android-Device supports x86,but APK only supports armeabi-v7a,armeabi,x86_64

模拟机的下面显示:

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"
        }
    }

3.怎么查看和设置模拟机的支持类型?

这个问题非常简单,我们在创建一个模拟机的时候,就有 ABI 的选择,因为粗心,之前一直都没有发现,看下图: 
Android-Device supports x86,but APK only supports armeabi-v7a,armeabi,x86_64