當需要用到C/C++或是執行一些底層溝通時
就會需要用到NDK
1. 先到官網https://developer.android.com/tools/sdk/ndk/index.html 裡面有簡單的介紹
2. 在下載羧信的NDK https://developer.android.com/ndk/downloads/index.html
並解壓縮放到適當位置
3. 打開local.properties, 設定ndk的路徑
舉例: ndk.dir=C\:\\adt-bundle-windows-x86_64-20140702\\android-ndk-r10e
4. 然後在main點滑鼠右鍵, 創一個JNI Folder
5. 接著在jni的資料夾內, 創立一個Android.mk的檔案
6. 並在裡面設定參數和路徑
舉例:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := jniLib
LOCAL_SRC_FILES := main.c
include $(BUILD_SHARED_LIBRARY)
其中 LOCAL_MODULE 是要在java code裡面使用的名稱
LOCAL_SRC_FILES是其對應的.c檔
7. 同樣在jni資料夾上點右鍵, 創建Application.mk檔
並在裡面添加
APP_ABI := all
這邊是指build出來的檔案可在哪種類型的CPU上用
8. 然後打開build.gradle檔
在defaultConfig內添加
ndk{
moduleName "jniLib"
}
9. 同樣在jni資料夾上點右鍵, 創建main.c檔
並在裡面添加
#include <jni.h>
Java_com_example_name_test_MainActivity_StringFromJNI(JNIEnv *env, jobject thiz)
{
return (*env)->NewStringUTF(env, "Hello from JNI");
}
這段的意思是在java內呼叫StringFromJNI , 會回傳Hello from JNI
10. 回到專案的主要java檔, 首先要把lib的路徑指定好
static {
System.loadLibrary("jniLib");
}
11. 然後宣告public native String StringFromJNI();
就可以使用剛剛在main裡面的StringFromJNI()檔案了
整體代碼如下:
public native String StringFromJNI();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("MainActivity", "Log from Jni = " + StringFromJNI());
}
12. 執行後可以看到Log顯示JNI上回傳的字串