Android armeabi-v7a、arm64-v8a和x86之间有什么区别?

Android armeabi-v7a、arm64-v8a和x86之间有什么区别?,android,python,kivy,Android,Python,Kivy,我正在Kivy上开发Android应用程序。我正在使用Buildozer编译一个APK文件。 在Buildozer规范文件中,有一个设置android.arch=armeabi-v7a,我不明白这一点 另外,当我使用命令buildozer-v android debug生成APK文件并使用命令adb install bin/.APK安装它时,它没有在我的android手机上打开。这些是CPU指令集。大多数情况下,您不必担心它,默认设置很好,但由于最近的一些更改,我一直想在文档中添加一些关于它的内

我正在Kivy上开发Android应用程序。我正在使用Buildozer编译一个APK文件。 在Buildozer规范文件中,有一个设置
android.arch=armeabi-v7a
,我不明白这一点


另外,当我使用命令
buildozer-v android debug
生成APK文件并使用命令
adb install bin/.APK
安装它时,它没有在我的android手机上打开。

这些是CPU指令集。大多数情况下,您不必担心它,默认设置很好,但由于最近的一些更改,我一直想在文档中添加一些关于它的内容

基本上,一个给定的安卓设备可能有一个arm或x86CPU(或者其他一些东西,但这并不重要),这些只是来自不同制造商的不同架构类型。Arm CPU是最常见的,但x86并不少见。编译代码时,输出取决于体系结构目标。当您构建一个Kivy应用程序时,您需要指定其中一个架构,然后该应用程序将仅在该类型的设备上工作。如果你想支持所有设备,你可以编译多个APK来分发——Play store会让你上传多个APK,并且会给每个设备发送正确的APK

在给定的体系结构类型中有多个版本。armeabi-v7a是较老的目标,对于32位arm CPU,几乎所有arm设备都支持此目标。 arm64-v8a是最新的64位目标(类似于台式计算机中的32位->64位转换)。我认为大多数新设备都是64位的,但不确定。arm64-v8a设备可以运行针对armeabi-v7a编译的代码,它是向后兼容的

从今年晚些时候起,Play store将要求您至少上传一个arm64-v8a APK,因为这为新设备提供了最佳支持。您还可以上载其他APK以支持其他设备类型

这还不是全部:一些x86设备有一个特殊的库,可以让它们运行为arm设备编译的代码。我不确定这种情况有多普遍,但似乎很普遍


对于您的应用程序问题,请使用查看问题所在。

要清楚,这些不是指令集。它们是ABI,可以编译成指令集。今天的大多数设备都是
arm64-v8a
,为了节省成本,真正便宜的设备是
armeabi-v7a
,而几乎没有
x86
x86\u 64

e、 g.
armeabi-v7a
ABI编译成
armeabi
thumb-2
VFPv3-D16
指令集,但
arm64-v8a
ABI编译成
AArch64
指令集

CPU和指令集的每个组合都有自己的应用程序 二进制接口(ABI)。ABI包括以下信息:

可以使用的CPU指令集(和扩展)。这个 运行时内存存储和加载的终止性。安卓总是 小恩迪安。在应用程序和应用程序之间传递数据的约定 系统,包括对齐约束,以及系统使用的方式 调用函数时堆栈和寄存器。格式 可执行二进制文件,如程序和共享库,以及 他们支持的内容类型。Android总是使用ELF。更多 有关详细信息,请参阅ELF System V应用程序二进制接口。如何C++ 名字被弄乱了。有关更多信息,请参阅GAND/IANTIAL C++ + ABI。


adb install
只安装您的
apk
,而不运行它。您可以像启动任何其他已安装的应用程序一样启动它。@恶劣:谢谢您提供的信息。我对android开发还比较陌生,对adb logcat也有一点了解。约翰·安德森:是的,我就是这么做的。该应用程序安装顺利,但当我试图打开它时,它只是关闭abruptly@ChitkaranSingh按照我链接的说明操作。如果你与他们有问题,可以问一个具体的问题,可能是一个新的SO问题。@ChitkaranSingh你可能会发现在Kivy discord频道上提问更有用