Android Samsung SII不加载armv7a库

时间:2013-02-06 11:09:47

标签: android arm native-code

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

任何想法?

谢谢。

1 个答案:

答案 0 :(得分:1)

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

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

我们找到的解决方案是根据他们的架构为库提供不同的名称,并选择自己选择哪一个。这样,系统就不必消除具有相同名称的多个库之间的歧义。

为此,您首先必须检测您正在运行的体系结构:这可以使用NDK中包含的cpu-features.h在本机代码中完成,也可以在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");
        ...
    }

希望这有帮助!