Android JNI 多.cpp,.c文件同時打包生成動態鏈接庫

從Android支持JNI開始,越來越多的開發者使用jni開發,我們新建一個native工程時,android studio默認給工程生成了CmakeLists文件和簡單的native-lib.cpp文件,CmakeLists文件下生成動態鏈接庫的核心代碼爲

add_library( # Sets the name of the library.
             native-lib

             # Sets the library as a shared library.
             SHARED

             # Provides a relative path to your source file(s).
             native-lib.cpp )
target_link_libraries( # Specifies the target library.
                        native-lib

                       # Links the target library to the log library
                       # included in the NDK.
                       ${log-lib} )

有興趣的同學可以新建一個工程看看,因爲只有一個native-lib.cpp文件,所以這樣寫是沒問題的。但是,在實際開發中,我們可能會有幾十上百個.cpp文件,這時候如果還手動對每個文件添加,那是不是會非常繁瑣呢,每次刪除或者增加.cpp文件都要手動修改CmakeLists文件,作爲程序員,完全無法容忍。

所以,接下來我們自己配置,將所有的.cpp,.c文件一起打包成一個so,當然,有需求的可以打包成多個so。不需要每次都修改CmakeLists文件。工程目錄大概如下:

其中native-lib.cpp和CmakeLists.txt爲新建工程時自動生成的文件,我們新建了一個MyLinkList.cpp和對應的頭文件MylinkList.h。

文件中具體的代碼我們暫時不談,本編文章主要講如何編寫Cmake。

話不多說,直接貼出CmakeLists.txt中的內容

爲了簡潔,我將多餘的註釋都刪掉了,上面的註釋已經很詳細了,相信每一步都能看懂。

到這一步,配置就完成了,此時我們來編譯看看是否能生成我們想要的jniSdk-lib.so,

如上圖,點擊gradle->assemble,提示編譯完成後,確實已經生成了我們想要的so,如下圖:

測科,你可能已經注意到,爲甚了生成的是libjniSdk-lib.so,沒錯,android在生成so庫時,會自動加上lib,我們引用相關so庫的時候只需要調用System.loadLibrary("jniSdk-lib")就可以了。

到此,我們就完成了多個.c,.cpp文件編譯成一個so的功能。文章內容比較簡單,希望可以對JNI感興趣的同學帶來一點幫助。

代碼已上傳github,點此獲取

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章