2013-10-29 55 views
4

我想在不同的手機上測試我的NDK編程。同樣的應用程序運行在所有其他手機,但在三星4.0.2它只是停止,拋出以下錯誤。我錯過了什麼?任何幫助表示讚賞Android NDK庫沒有在運行時加載三星Galaxy 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) 
+0

重新啓動手機沒有幫助:\? – 2013-10-29 19:29:42

+0

Nopes :(我試過兩種不同的三星S1手機之前張貼在這裏..任何幫助表示讚賞 – rana

回答

5

在Android 4.0上有一個已知的bug,本機庫加載可能是您的問題的原因。如果你想深入細節,我寫了一個detailed blogpost。長話短說:

我猜你試圖使用的庫是爲不同的架構(通常armeabi和armeabi-v7a,分別存儲在libs/armeabilibs/armeabi-v7a)編譯的。在Android 4.0上,System.loadLibrary()方法會混亂:當您嘗試加載庫libsomething.so而不是在與設備體系結構相對應的文件夾中搜索本機庫時,它會加載第一個庫,其名稱爲libsomething.so它在任何libs子文件夾,可能會加載錯誤的架構,從而導致此類崩潰。

最簡單的解決方法:

  • 給不同的名稱,這取決於他們的架構庫,例如libsomething.so爲armeabi和libsomething-v7a.so爲armeabi-V7A。這樣,當使用System.loadLibrary()時,它不會因爲幾個文件具有相同名稱的事實而感到困惑。
  • 完成此操作後,問題是您必須知道要使用System.loadLibrary(),加載這兩個文件名中的哪一個,即您必須自己檢測設備使用的架構。有幾種方法可以做到這一點:其中之一是從本地代碼(在上面的博文解釋)的cpu-features.h文件中使用android_getCpuFeatures(),另一種是從Java解析系統/proc/cpuinfo文件(例如,作爲解釋here

希望這有助於!

+0

將基於該信息並讓你知道 – rana

+1

如果你想做一個第一個快速和簡單的檢查:刪除子文件夾在'libs'中,不適合你的設備的體系結構(我看你談論的是一個Galaxy S1,它是armeabi-v7a),然後運行你的代碼,如果它現在運行的話。好的可能性,這實際上是問題! – mbrenon

+0

@mbrenon我在這裏面對同樣的事情'http://stackoverflow.com/questions/22931392/run-time-error-in-native-android?noredirect = 1#comment35010792_22931392'你能指導我在哪裏做錯了!因爲我嘗試了你在評論中建議的方式 – AHF

相關問題