背景:對於Android工程 Eclipse裏編譯好的.so文件放到 libs\armeabi下之後, 這樣.so文件就能夠打包到apk文件裏,在apk裝到手機上之後 在libs\armeabi下的.so文件應該就會解壓到/data/data/這裏是你project的包名(好比com.first.second)/lib下。
問題:寫了個測試的android JNI app,.so已經放到了libs\armeabi下 並且從編譯的apk裏也能看到.so已經打包進去(解壓apk文件,裏邊應該有lib文件夾) 可是在/data/data/com.test.test/lib下就是沒有相應的.so文件
解決方法:原來是由於個人.so沒有按照android標準命名,.so的名字必須有'lib'前綴 不然apk解壓/安裝到手機的時候不會把libs\armeabi下的.so拷貝到/data/data/com.test.test/lib下。原來我用的so名字是JNITest.so, 改成libJNITest.so後一切正常。
補充:
a) 用loadLibrary調用的時候須要去掉lib前綴 System.loadLibrary("JNITest");
b) 用load調用的時候須要寫全路徑名 且不能去掉lib前綴 由於這裏是當成一個普通文件讀取的 System.load("/data/data/com.test.test/libJNITest.so");