Android Studio 開發 C/C++ 例子
前面的小節我們學習了 C/C++ 支持環境的安裝和配置。本小節我們創建一個最簡單的支持 C/C++ 的項目實例。
1. 創建項目
創建支持原生代碼的新項目的步驟與創建任何其他 Android Studio 項目的步驟相似,但還需要執行一個額外的步驟:
-
在向導的 Choose your project 部分中,選擇 Native C++ 項目類型。
-
點擊 Next。
-
填寫向導下一部分中的所有其他字段。
-
點擊 Next。
-
在向導的 Customize C++ Support 部分中,您可以使用 C++ Standard 字段來自定義項目。使用下拉列表選擇您想要使用哪種 C++ 標準化。選擇 Toolchain Default 可使用默認的 CMake 設置。
-
點擊 Finish。
至此,項目創建完成,我們可以看到項目中同時包含了 Java 代碼和 Cpp 代碼。
2. 分析代碼
2.1 Cpp 代碼
項目中包含一個 cpp 源碼文件:native-lib.cpp
extern "C" JNIEXPORT jstring JNICALL
Java_com_imooc_hellojni_MainActivity_stringFromJNI(
JNIEnv* env,
jobject /* this */) {
std::string hello = "This string from C++";
return env->NewStringUTF(hello.c_str());
}
這個函數的功能很簡單,返回一個字串 “This string from C++”。
我們看到這個函數的函數名很長:Java_com_imooc_hellojni_MainActivity_stringFromJNI,這是按特定的規范組織的,分解之后各部分的含義如下:
-
Java:表示是給 Java 源碼中調用的。
-
com_imooc_hellojni_MainActivity:表示由哪個 Java 類(包名類名)來調用。
-
stringFromJNI:表示本地方法名稱,會在 Java 源碼中聲明。
2.2 Java 代碼
項目中包含的 java 源文件:MainActivity.java:
// Used to load the 'native-lib' library on application startup.
static {
System.loadLibrary("native-lib");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Example of a call to a native method
TextView tv = findViewById(R.id.sample_text);
tv.setText(stringFromJNI());
}
/**
* A native method that is implemented by the 'native-lib' native library,
* which is packaged with this application.
*/
public native String stringFromJNI();
-
System.loadLibrary:加載我們自己的原生庫 native-lib;
-
setText(stringFromJNI()):把 stringFromJNI 函數返回的字串賦給 TextView 顯示出來;
-
public native String stringFromJNI():聲明本地方法 stringFromJNI。
3. 運行效果
雖然運行效果比較簡單,但是通過前面的代碼分析,我們可以知道,“This string from C++” 這個字串是在 Java 源碼中調用 Cpp 源碼中的函數來獲取的。這是一個最簡單的項目支持 C/C++ 的例子。
4. 小結
本節課程我們主要學習了如何創建一個支持 C/C++ 的項目。本節課程的重點如下:
- 掌握如何創建支持 C/C++ 的項目;
- 掌握如何從 Java 中調用 C/C++ 函數。