以下只是自己的一些總結,歡迎討論
通過ndk編譯jni網上有很多例子,在這我只總結在android原始碼下編譯
1、android原始碼環境下編譯so包,編出來的.so的包前面不會自動給新增lib,ndk編譯會自動給新增lib,即使android.mk檔案裡面local_module :=名字前面沒有lib,ndk也會自動給你新增lib. 所以ndk編譯時android.mk檔案編譯出來的so包名字可以加lib也可不加,但原始碼下編譯必須加
2、系統應用和使用者應用的區別
使用者應用會預設到應用的data/data目錄的lib資料夾下找.so,如果找不到就會報錯誤。當前前提是你的系統system/lib下沒有同樣的so檔案.
3、adb push 與 adb install 區別
4、當我們修改系統應用中的jni檔案,你刷機後,系統的system/lib下就有你需要的so檔案了。如果你不想刷機,你也可以通過adb push *.so \system\lib的方式,將*.so放到system\lib下,以供呼叫,因為不刷機系統中的system/lib下並沒有剛才生成的.so
5、如果我們沒有jni檔案只有.so的話,系統應用因為需要在system/lib下呼叫.so,所有我們就需要在編譯的時候將這個.so檔案預置到out/target/product/******xx_xx_m0/system/lib中
include $(clear_vars)
local_module := libfp_gf_mp
local_src_files := ../libs/arm64-v8a/libfp_gf_mp.so
local_module_tags := optional
local_module_suffix := .so
local_proprietary_module := true
local_module_class := shared_libraries
include $(build_prebuilt)
6、直接使用.so 庫 步驟
1、第三方的so檔案或者別人編譯好的so檔案,你可以直接放到 libs/armeabi 下
2、在主資料夾的android.mk中加上依賴 local_jni_shared_libraries := libuserbookpatcher_jni
3 、如果是系統應用則要在jni的android.mk中將.so檔案預置到system/lib中
注:在程式中用jni檔案生成.so不用進行預置,因為會直接生成到裡面system/lib中 但是主資料夾的android.mk中加上依賴 local_jni_shared_libraries := libuserbookpatcher_jni
7、在工程目錄的android.mk中 最後加上
# use the folloing include to make our test apk.
include $(call all-makefiles-under,$(local_path))
會將當前工程目錄所有子目錄中的android.mk進行編譯
在Mac下編譯Android原始碼
1.原始碼存放 在mac下編譯android的源 需要乙個大小寫敏感 case sensitive 的分割槽格式如果你原來的分割槽不是hfs一類大小寫敏感的檔案格式,那麼最簡單的辦法就是新建乙個這種分割槽格式的dmg出來,命令如下 sudo hdiutil create size 15g type ...
Ubuntu 下編譯Android原始碼全過程
ubuntu 下編譯android原始碼全過程 2010年02月10日 一 獲取android源 git是linux torvalds linux之父 為了幫助管理linux核心開發而開發的乙個開放原始碼的分布式版本控制軟體,它不同於subversion cvs這樣的集中式版本控制系統。在集中式版本...
在Windows下原始碼編譯PHP
最近在學習編寫php拓展,懶得裝linux,就研究了一下在windows下編譯php的方法,總算搭建好了在windows下開發php拓展的環境。1 在c盤新建乙個資料夾,c phpdev 4 獲取編譯好的bison.exe和flex.exe,儲存到桌面或者其他c phpdev以外的地方。分別開啟壓縮...