Android 三星 SII 不加载 armv7a 库

标签 android arm native-code

我有一个 Android 应用程序可以加载 armv6 和 armv7a 的库。当我在 Samsung SII 中运行应用程序时,它会加载 armv6 的库。 Samsung SII 有一个 armv7 neon 处理器,它应该加载 armv7a 库。 我在三星 SIII 中测试了相同的应用程序,它加载了 armv7a 库。

有什么想法吗?

谢谢。

最佳答案

我怀疑这来自于描述的 System.loadLibrary() 错误 here .

总而言之,在 Ice Cream Sandwich 的某些版本的 Android SDK 上,这个函数(它应该找到所有具有正确名称的库并选择为正确的体系结构编译的库)被搞砸了,并且可以选择错误的架构。我怀疑这就是你这里发生的事情。

我们找到的解决方案是根据架构给库起不同的名字,你自己选你想选的。这样,系统就不必在多个具有相同名称的库之间消除歧义。

为此,您首先必须检测您正在运行的架构:这可以使用 NDK 中包含的 cpu-features.h 在 native 代码中完成,或者您可以解析Java 中的 /proc/cpuinfo。找到设备的架构后,加载正确的库。在伪代码中,这将变成:

    arch = findArchitecture() // native function 
                              // or  Java function parsing /cpu/info
    switch (arch) {
        case armv7-neon: System.loadLibrary("lib-neon");
        case armv6: System.loadLibrary("lib-armv6");
        ...
    }

希望这对您有所帮助!

关于Android 三星 SII 不加载 armv7a 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14727572/

相关文章:

android - onBitmapLoaded 从未调用过

Java android Q 创建PDF java.lang.IllegalArgumentException : Unknown URL

android - 保留 android.support.v4 后,使用 proguard 在 android.support.v4 处出现 nullPointerException

c - GNU ARM 汇编程序在错误消息中给出看似无关的寄存器

linux - 如何在 Linux (Centos 6.4) 上安装 Excelsior JET

API 18 上未添加 JavaScriptInterface

assembly - 读取 ARM 汇编中的系统调用

arm - 错误 : L6218E: Undefined symbol main (referred from __rtentry2. o)

android - 摧毁尸体时崩溃

javascript - 哪些 native 构造函数不能通过全局对象访问?