代码之家  ›  专栏  ›  技术社区  ›  Martin Zeitler

ARM64能否在兼容模式下运行ARM程序集?

  •  2
  • Martin Zeitler  · 技术社区  · 6 年前

    下面的Java代码运行在 armv7l ,但在上失败 aarch64 :

    static {
        switch(System.getProperty("os.arch")){
            case "aarch64":
            case "armv7l":
                try {
                   System.loadLibrary("somelibrary");
                } catch(UnsatisfiedLinkError e) {
                    Log.e(LOG_TAG, e.getMessage());
                }
                break;
        }
    }
    

    dlopen失败:“/data/app/。。。/基本.apk!/库/arm64-v8a/某个图书馆。所以是32位而不是64位。

    AArch32 执行将是“可选的”(甚至可能不可用),因为必须(很可能)将CPU从 AArch64 执行。这个幻灯片放映的主题是: Linux on AArch64 ARM 64-bit Architecture .

    问:有没有办法在64位Android设备上使用32位库?


    事实证明,Google Play不接受这一点,因为需要ARM64本机程序集。

    1 回复  |  直到 5 年前
        1
  •  4
  •   Snild Dolkow    6 年前

    在智能手机中找到的任何arm64 CPU都应该能够运行arm32代码。

    1. 您的进程不能混合使用64位和32位代码——它必须是其中之一。
    2. 操作系统内核必须支持32位进程;它将负责在进程使用CPU时切换执行模式。

    第三个很好;Android使用 Linux-like 内核,支持arm64上的arm32进程。

    2号是 可能 好吧,我不知道你从哪里听说安卓8.0只有64位,但这不是真的。设备制造商有可能选择排除32位支持,但我不知道有哪一种排除32位支持(因为这将阻止仅32位的传统应用程序和游戏在其设备上运行)。

    第一个是你的问题:你的应用程序以64位进程运行,并且试图加载一个32位的库。这行不通。