2012-08-30 55 views
0

我正在使用jni從我的android代碼調用C++函數,因爲我使用的是NDK,那時我得到的異常是java.lang.exceptionininitializererror。使用jni獲取異常

public class HelloJni extends Activity 
{ 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 


     TextView tv = new TextView(this); 
     tv.setText(stringFromJNI()); 
     setContentView(tv); 
    } 


    public native String stringFromJNI(); 


    public native String unimplementedStringFromJNI(); 


    static { 
     System.loadLibrary("hello-jni"); 
    } 
} 

而且logcat的是:

08-30 14:59:48.210: E/AndroidRuntime(10494): FATAL EXCEPTION: main 
08-30 14:59:48.210: E/AndroidRuntime(10494): java.lang.ExceptionInInitializerError 
08-30 14:59:48.210: E/AndroidRuntime(10494): at java.lang.Class.newInstanceImpl(Native Method) 
08-30 14:59:48.210: E/AndroidRuntime(10494): at java.lang.Class.newInstance(Class.java:1409) 
08-30 14:59:48.210: E/AndroidRuntime(10494): at android.app.Instrumentation.newActivity(Instrumentation.java:1021) 
08-30 14:59:48.210: E/AndroidRuntime(10494): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1565) 
08-30 14:59:48.210: E/AndroidRuntime(10494): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 
08-30 14:59:48.210: E/AndroidRuntime(10494): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
08-30 14:59:48.210: E/AndroidRuntime(10494): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 
08-30 14:59:48.210: E/AndroidRuntime(10494): at android.os.Handler.dispatchMessage(Handler.java:99) 
08-30 14:59:48.210: E/AndroidRuntime(10494): at android.os.Looper.loop(Looper.java:130) 
08-30 14:59:48.210: E/AndroidRuntime(10494): at android.app.ActivityThread.main(ActivityThread.java:3687) 
08-30 14:59:48.210: E/AndroidRuntime(10494): at java.lang.reflect.Method.invokeNative(Native Method) 
08-30 14:59:48.210: E/AndroidRuntime(10494): at java.lang.reflect.Method.invoke(Method.java:507) 
08-30 14:59:48.210: E/AndroidRuntime(10494): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
08-30 14:59:48.210: E/AndroidRuntime(10494): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 
08-30 14:59:48.210: E/AndroidRuntime(10494): at dalvik.system.NativeStart.main(Native Method) 
08-30 14:59:48.210: E/AndroidRuntime(10494): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load hello-jni: findLibrary returned null 
08-30 14:59:48.210: E/AndroidRuntime(10494): at java.lang.Runtime.loadLibrary(Runtime.java:429) 
08-30 14:59:48.210: E/AndroidRuntime(10494): at java.lang.System.loadLibrary(System.java:554) 
08-30 14:59:48.210: E/AndroidRuntime(10494): at com.example.hellojni.HelloJni.<clinit>(HelloJni.java:64) 
08-30 14:59:48.210: E/AndroidRuntime(10494): ... 15 more 
+2

你可以發佈完整的堆棧跟蹤嗎? – Dalmas

+0

我已經添加了堆棧跟蹤 – user1522869

回答

1

真正的(嵌套)異常是Caused by: java.lang.UnsatisfiedLinkError: Couldn't load hello-jni: findLibrary returned null

這意味着Android的不能找到你的圖書館 「HELLO-JNI」。確保名稱是正確的,並且你已經編譯了它,沒有錯誤。

檢查您的lib文件夾,查看您的圖書館是否在這裏(libhello-jni.so)。

+0

雅這可能是問題,因爲我沒有lib文件夾。在哪裏生成lib文件夾和哪個庫,我必須存儲在它請幫助我。 – user1522869

+0

你是如何編譯你的本地代碼的? – Dalmas

+0

我需要先編譯本機代碼?意味着C++代碼? – user1522869