在Android原始碼下編譯jni所需要知道的事

2021-09-02 19:33:21 字數 1500 閱讀 4424

以下只是自己的一些總結,歡迎討論

通過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以外的地方。分別開啟壓縮...