當需要用到C/C++或是執行一些底層溝通時

就會需要用到NDK

 

1. 先到官網https://developer.android.com/tools/sdk/ndk/index.html 裡面有簡單的介紹

01.png

 

2. 在下載羧信的NDK https://developer.android.com/ndk/downloads/index.html

並解壓縮放到適當位置

02.png

 

3. 打開local.properties, 設定ndk的路徑

舉例: ndk.dir=C\:\\adt-bundle-windows-x86_64-20140702\\android-ndk-r10e

03.png

 

4. 然後在main點滑鼠右鍵, 創一個JNI Folder

04.png

 

5. 接著在jni的資料夾內, 創立一個Android.mk的檔案

05.png

 

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檔

06.png

 

7. 同樣在jni資料夾上點右鍵, 創建Application.mk檔

並在裡面添加

APP_ABI := all

這邊是指build出來的檔案可在哪種類型的CPU上用

07.png

 

8. 然後打開build.gradle檔

在defaultConfig內添加

ndk{
      moduleName "jniLib"
}

08.png

 

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

09.png

 

10. 回到專案的主要java檔, 首先要把lib的路徑指定好

    static {
        System.loadLibrary("jniLib");
    }

10.png

 

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());
    }

11.png

 

12. 執行後可以看到Log顯示JNI上回傳的字串

12.png

arrow
arrow

    RX1226 發表在 痞客邦 留言(2) 人氣()