在apk里打包進.so文件的方法


在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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM