android studio Cmake編譯jni

? ? ? ? 在androidstudio2.2以前,對jni的編譯只有一種就是ndkbuild. 這是一個很痛苦的過程,寫native方法,jnih生成c文件等等。而起編寫c/C++代碼是沒有代碼提示的!!!!,在2.2之后官方出現了一種新的編譯方式cmake,而且是官方推薦的,最重要的是有代碼提示,而且方便易懂!

閱讀前最好先閱讀下官方的文檔

https://developer.android.google.cn/studio/projects/add-native-code#link-gradle

準備工作環境配置


下載這兩個選項和ndk(ndk在底下沒顯示出來)并安裝

Cmake是編譯用的

LLdb是調試用的

一:新建一個支持c/c++的工程


2.2后在這個界面多了這么一個選項

在2.2后這個界面多了這么一個選項,勾選上他。點擊完成,新建完項目就可以運行了


CmakeLists.txt內容解析,如果想生成多個庫,可以多寫幾個add_library()

這個cmake是規定源文件位置和庫名稱庫配置的一些信息可是,androidstudio怎么找到這個CmakeLists.txt文件的呢?是在gradle中配置的


它的位置是在app目錄下你通過它指定了CmakeLists.txt的位置再通過這個文件找到源代碼的位置和配置

你可能說沒看見so文件啊,其實它已經打進包里了,你將apk包解壓下就可以看見lib文件夾下有.so文件,在這個文件夾下也可以看見


二:導入之前的jni項目

1.先測試一個只含有一個類的簡單例子

在main下新建cpp文件夾,然后新建demo.cpp文件


在app文件夾下新建CmakeLists.txt文件內容如下

cmake_minimum_required(VERSION 3.4.1)

add_library(

demo-lib

SHARED

src/main/jni/demo.cpp

)

現在是已經把原文件的位置和配置搞定了,然后需要項目關聯CmakeLists.txt文件有兩種方式

一種ui方式一種終極方式

ui方式:選擇android視圖在app右鍵選擇LinkC++projectwithgrade


在project path選擇CmakeLists.txt的路徑


新建測試類



新寫個native方法,此時會報紅!,

使用快捷方式可以自動生成方法代碼厲害不厲害


有時候會自動生成demo-lib.c文件,可以把里面的方法復制到demo.cpp中,樓主也不知道為啥會出現這種情況,然后把jni文件夾刪掉

主意!!:需要加入extern"C"在代碼之下,否則回報找不到native方法的錯誤


系統自動生成方法的時候沒有extern"C",需要自己加上,這里去掉注釋就好。這是因為C和C++的符號表不相同造成的。jni是按照C的生成規則去找函數的, 所以在函數聲明的時候要加上extern C使編譯器把函數按照C的規則編譯 這樣才能被Java調用。


然后就可以測試了

public class MainActivityextends AppCompatActivity {

@Override

? ? protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Cmake cmake=new Cmake();

Toast.makeText(MainActivity.this,cmake.stringFromJNI(),Toast.LENGTH_LONG).show();

}

}

2.含有多個文件的例子

新建文件夾a a a,并加入新源碼test.h和test.cpp

這兩個文件封裝了一個加法方法;


CmakeList 更改為


源碼native-lib.cpp改為


在mainactivity中調用


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容