天天看點

eclipse JNI項目遷移android studio相關問題

最近在弄項目遷移,eclipse上的項目用到了JNI,需要轉移到android studio,本來對JNI就不太懂,這下更麻煩了,遇到各種問題,過程痛苦不堪。不過終于做完了,把遇到問題記錄下來,同時也能讓遇到相關問題的人參考一下。

首先,我是把eclipse上的檔案複制粘貼過來的,其實并不麻煩,主要是JNI,直接粘貼過來是不行的,而且在as上重新生成so檔案也是不現實的,因為我jni知識太差了,隻能勉強還用eclipse上的so檔案,這樣的話友善的多,隻要把eclipse中的libs檔案夾下的,如,armeabi-v7a、armeabi檔案夾複制下來,然後在as的main檔案夾下建立jniLibs檔案夾,然後粘貼進去,就可以了。理論是這樣但實際問題才剛剛開始。

問題一:弄過來以後根本不能用,一直報錯:java.lang.UnsatisfiedLinkError: No implementation found for XXXXXXXXXXXXX....,意思大概是找不到實作的那個JNI方法(native方法),檢測後發現方法沒問題,那肯定是so檔案的問題。後來經常查閱資料,發現我新項目的包名改了,是以so檔案需要重新生成。

解決辦法:重新生成so檔案,把jni檔案中的JNIEXPORT jbyteArray JNICALL Java_包名_類名_方法名,改為你現在使用的。(注意:可能是1個或者多個地方要改  #include後面的别改,那是生成so檔案時候需要引用的)

問題二:無法生成so檔案,不會弄,研究一番後發現是依賴庫指定的絕對路徑有問題。

解決辦法:就是修改android.mk那個檔案,把裡面依賴庫中的那個 庫名.mk檔案的路徑 改為正确路徑。

問題三:還是無法生成so檔案,後來發現不同的ndk版本也會受到影響,我用的是r13,後來下載下傳了r10,能用了。

解決辦法:嘗試不同版本的ndk。

問題四:so檔案生成了,測試可以用,但是後來發現,有時候還是會出現那個,java.lang.UnsatisfiedLinkError: No implementation found for XXXXXXXXXXXXX....

簡直崩潰,後來找了好多資料。

解決辦法,在使用so檔案的那個Activity中,加個靜态代碼塊兒 static{

    System.loadLibrary("so檔案名稱");  //例如:so檔案是 libABC.so  那麼用的時候就是ABC就行了

}