? ? ? ? 在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后這個界面多了這么一個選項,勾選上他。點擊完成,新建完項目就可以運行了
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中調用