【问题标题】:Android Intel device will only run armeabi or x86 .so libraries, but not a mixture of both?Android Intel 设备只能运行 armeabi 或 x86 .so 库,但不能同时运行这两者?
【发布时间】:2015-09-25 17:51:20
【问题描述】:

我的 APK 中有两个 .so 库:

1) LibraryA:仅为 ARM 架构构建,因为我不想将所有代码移植到 x86。这是一项艰巨的任务。

2) LibraryB:为 ARM 和 x86 构建。 ARM libhoudini 模拟器对于英特尔设备来说太慢了,无法以不错的速度运行这个库,所以它必须有一个可以正常工作的 x86 端口。

APK 中的 lib 文件夹如下所示:

../lib/armeabi/LibraryA
../lib/armeabi/LibraryB

../lib/x86/LibraryB(注意:x86 没有 LibraryA)

当我在英特尔设备上安装/运行 APK 时,它默认为 .so 库的 ARM 架构,并忽略 x86 版本的 LibraryB。结果是,它被模拟并且生产速度太慢。不过,在 ARM 设备上一切正常,没有问题。

如何强制 Android 在 Intel 设备上正常工作,以便它模拟 ARM 版本的 LibraryA 并运行 x86 版本的 LibaryB?

为了完整起见,我使用 android-ndk-r10d 来构建。

【问题讨论】:

    标签: android android-ndk x86 java-native-interface


    【解决方案1】:

    我可以通过将 ARM 编译版本的 LibraryA 放在“../lib/x86”文件夹中来欺骗 Android 加载 x86 版本的 LibraryB。即使 LibraryA 是为 ARM 编译的,它仍然会加载,然后 Android 也会加载 x86 版本的 LibraryB。

    ../lib/armeabi/LibraryA
    ../lib/armeabi/LibraryB

    ../lib/x86/LibraryA(为 ARM 编译,但仍然有效)
    ../lib/x86/LibraryB(针对 x86 编译)

    【讨论】:

      【解决方案2】:

      不支持混合 arm/x86 应用程序。无法保证您的解决方法中的行为,您看到的这两种行为实际上可能因设备和操作系统版本而异。

      这里唯一的解决方案是将库 A 移植到 x86。

      【讨论】:

        猜你喜欢
        • 2014-07-28
        • 2019-02-12
        • 1970-01-01
        • 2017-02-23
        • 1970-01-01
        • 2018-10-16
        • 2021-08-07
        • 2013-06-30
        • 1970-01-01
        相关资源
        最近更新 更多