【问题标题】:What is the difference between armeabi-v7a, arm64-v8a, x86?armeabi-v7a、arm64-v8a、x86 有什么区别?
【发布时间】:2019-11-11 10:54:09
【问题描述】:

我正在 Kivy 上开发一个 Android 应用程序。我正在使用 Buildozer 编译一个 APK 文件。 Buildozer spec文件里有一个设置android.arch = armeabi-v7a,这个我没看懂。

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

【问题讨论】:

    标签: android python kivy


    【解决方案1】:

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

    基本上,给定的 Android 设备可能有一个 arm 或一个 x86 cpu(或者甚至是其他东西,但这并不重要),这些只是来自不同制造商的不同架构类型。 Arm cpus 是最常见的,但 x86 并不罕见。编译代码时,输​​出取决于架构目标。当您构建 Kivy 应用程序时,您指定其中一种架构,然后该应用程序将仅在该类型的设备上运行。如果您想支持所有设备,您可以编译多个 APK 来分发 - Play 商店可以让您上传多个,并且会为每个设备发送正确的一个。

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

    从今年晚些时候开始,Play 商店将要求您至少上传 arm64-v8a APK,因为这样可以为较新的设备提供最佳支持。您还可以上传其他 APK 以支持其他设备类型。

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

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

    【讨论】:

    • adb install 只是安装你的apk,它不会运行它。您可以像启动任何其他已安装的应用程序一样启动它。
    • @inclement :感谢好友提供的信息。我对 android 开发很陌生,对 adb logcat 了解一些。请您指导一下。
    • @John Anderson:是的,我做到了。该应用程序安装顺利,但当我尝试打开它时,它只是突然关闭
    • @ChitkaranSingh 按照我链接的说明进行操作。如果您对他们有任何疑问,请提出一个具体的问题,可能是在一个新的 SO 问题中。
    • @ChitkaranSingh 您可能还会发现在 Kivy discord 频道上提问更有用
    【解决方案2】:

    需要明确的是,这些不是指令集。它们是 ABI,可编译成指令集。今天大多数设备是arm64-v8a,真正便宜的设备是armeabi-v7a,以节省成本,几乎没有x86x86_64

    例如armeabi-v7a ABI 编译为armeabithumb-2VFPv3-D16 指令集,但arm64-v8a ABI 编译为AArch64 指令集。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-23
      • 2020-07-20
      • 2019-09-09
      • 2021-06-05
      • 2019-07-01
      • 1970-01-01
      • 2012-08-26
      相关资源
      最近更新 更多