Java Android NDK库仅在三星galaxy 4.0.2手机运行时未加载

Java Android NDK库仅在三星galaxy 4.0.2手机运行时未加载,java,android,c++,c,android-ndk,Java,Android,C++,C,Android Ndk,我正在尝试在不同的手机上测试我的NDK编程。相同的应用程序在所有其他手机上运行,但在三星4.0.2上它只是停止,抛出以下错误。我错过什么了吗?谢谢你的帮助 10-29 12:02:57.729: E/AndroidRuntime(3626): at android.app.Activity.performCreate(Activity.java:4486) 10-29 12:02:57.729: E/AndroidRuntime(3626): at android.app.Ins

我正在尝试在不同的手机上测试我的NDK编程。相同的应用程序在所有其他手机上运行,但在三星4.0.2上它只是停止,抛出以下错误。我错过什么了吗?谢谢你的帮助

   10-29 12:02:57.729: E/AndroidRuntime(3626):  at android.app.Activity.performCreate(Activity.java:4486)
   10-29 12:02:57.729: E/AndroidRuntime(3626):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052)
   10-29 12:02:57.729: E/AndroidRuntime(3626):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1931)
   10-29 12:02:57.729: E/AndroidRuntime(3626):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992)
   10-29 12:02:57.729: E/AndroidRuntime(3626):  at android.app.ActivityThread.access$600(ActivityThread.java:127)
   10-29 12:02:57.729: E/AndroidRuntime(3626):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158)
   10-29 12:02:57.729: E/AndroidRuntime(3626):  at android.os.Handler.dispatchMessage(Handler.java:99)
   10-29 12:02:57.729: E/AndroidRuntime(3626):  at android.os.Looper.loop(Looper.java:137)
   10-29 12:02:57.729: E/AndroidRuntime(3626):  at android.app.ActivityThread.main(ActivityThread.java:4511)
   10-29 12:02:57.729: E/AndroidRuntime(3626):  at java.lang.reflect.Method.invokeNative(Native Method)
   10-29 12:02:57.729: E/AndroidRuntime(3626):  at java.lang.reflect.Method.invoke(Method.java:511)
   10-29 12:02:57.729: E/AndroidRuntime(3626):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:976)
   10-29 12:02:57.729: E/AndroidRuntime(3626):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:743)
   10-29 12:02:57.729: E/AndroidRuntime(3626):  at dalvik.system.NativeStart.main(Native Method)
 **10-29 12:02:57.729: E/AndroidRuntime(3626): Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: reloc_library[1285]:   161 cannot locate '__aeabi_idiv0'...**
   10-29 12:02:57.729: E/AndroidRuntime(3626):  at java.lang.Runtime.loadLibrary(Runtime.java:370)
   10-29 12:02:57.729: E/AndroidRuntime(3626):  at java.lang.System.loadLibrary(System.java:535)

Android 4.0上存在一个已知的错误,本地库正在加载,这可能是问题的原因。如果你想深入了解细节,我在上面写了一封信。长话短说:

我猜您尝试使用的库是针对不同的体系结构编译的(通常是armeabi和armeabi-v7a,分别存储在
libs/armeabi
libs/armeabi-v7a
中)。在Android 4.0上,
System.loadLibrary()
方法出错:当您尝试加载libsomething.so库时,您没有在与设备架构对应的文件夹中搜索本机库,它加载第一个名为
libsomething的库。因此
它会在任何
libs
子文件夹中找到,这可能会加载错误的体系结构,从而导致此类崩溃

最简单的解决方法:

  • 根据库的体系结构,为库指定不同的名称,例如armeabi的
    libsomething.so
    ,以及armeabi-v7a的
    libsomething-v7a.so
    。这样,当使用
    System.loadLibrary()
    时,就不会因为几个文件具有相同的名称而混淆
  • 完成此操作后,问题是您必须知道使用
    System.loadLibrary()
    加载这两个文件名中的哪一个,即您必须自己检测设备使用的体系结构。有几种方法可以做到这一点:其中一种方法是使用本机代码中的
    cpu features.h
    文件中的
    android\u getCpuFeatures()
    ,另一种方法是从Java解析系统
    /proc/cpuinfo
    文件(例如,如上所述)

希望这有帮助

重新启动手机没有帮助:\?没有:(我在这里发布之前试过两款不同的三星S1手机。如果您想进行第一次快速简单的检查,请提供任何帮助:删除
libs
中不适合您设备架构的子文件夹(我看到您谈论的是Galaxy S1,即armeabi-v7a),并立即运行您的代码。如果它起作用,您很可能会发现这就是问题所在!@mbrenon我在这里也面临同样的问题
http://stackoverflow.com/questions/22931392/run-time-error-in-native-android?noredirect=1#comment35010792_22931392
你能告诉我哪里做错了吗!!我试着你在评论中的建议