在apk里打包進.so文件的方法
有兩種方法,
1 是在Android.mk文件里增加
LOCAL_JNI_SHARED_LIBRARIES := libxxx
這樣在編譯的時候,NDK自動會把這個libxxx打包進apk;
放在youapk/lib/目錄下。
2 是在應用的目錄下手工建
libs/armeabi
目錄,然后把libxxx.so拷貝到這個目錄下,
這樣NDK就會自動把這個libxxx.so打包進apk,位置還是在
放在youapk/lib/目錄下。
在代碼里,使用
System.loadLibrary("xxx");
就可以加載這個動態庫了。
這里要注意,參數只寫xxx就可以了,不需要寫libxxx,也不需要寫libxxx.so。
還有一點要說明,System.loadLibrary這個函數會在如下路徑搜索libxxx.so文件:
/system/lib
/data/data/you apk package/lib
但,如果libxxx.so還依賴其它.so文件,比如libyyy.so,則System.loadLibrary只會
在/system/lib目錄下去找,如果沒找到,它不會自動到/data/data/you apk package/lib
下去找,這個時候就會報動態庫沒找到的錯;
解決方法是在load libxxx.so之前,先load libyyy.so,如下:
System.loadLibrary("yyy");
System.loadLibrary("xxx");
-------------------------------------------------------------------------------------------------
前提:so文件在源碼中編譯,並在編譯輸出中間文件中存在。如libtest.so文件,此文件必須在out/target/product/generic/obj/lib/libtest.so
如此,書寫Android.mk文件
加入如下一句賦值語句:
LOCAL_JNI_SHARED_LIBRARIES := libtest
即可。
至於在編譯時讓編譯系統向apk中自動添加其他的資源文件,讀者可參考編譯系統文件
build/core/package.mk
LOCAL_JNI_SHARED_LIBRARIES字段的編譯過程
感謝: http://blog.csdn.net/androidboy365/article/details/6772890
另外參考:http://www.cnblogs.com/bastard/archive/2012/05/19/2508913.html