在Mac的Android Studio 2.1 中使用Android NDK(Native Development Kit) Part 3: NDK 檔案設置

 Part 3: NDK 檔案設置
新增Jni資料夾以及新增自訂Class,可以供我們在Android中呼叫Native method。
另外還要新增兩個檔案分別是Application.mk & Android.mk,下面會針對各個檔案有更進一步說明。



3-1. 新增jni資料夾(左方的瀏覽功能,需要切到Project模式才看得到此資料夾,而非Android模式)
點選File->New->Folder->JNI Folder,點選Finish新增完畢。





3-2. 設置app的gradle檔案
moduleName: JNI模組的名稱
ldLibs: Debug用,可以在Android Studio的Android Monitor印出Log訊息。
  
android {
  ...
  defaultConfig {
    ...
    ndk {
      moduleName "myJNI"
      ldLibs "log"
    }
  }
  sourceSets.main {
    jni.srcDirs = []
    jniLibs.srcDir "src/main/jniLibs"
  }
  ...
} 
    
設置完畢後點右上角的Sync Now,接著會跳出以下的錯誤。

點選android.useDeprecatedNdk=true,即可修正錯誤。(或者到gradle.properties手動加入此行)

3-3. 在Project中New一個Java Class (MyNdkHelloWorld)
在Class中宣告一個Method,回傳String。

public class MyNdkHelloWorld {
    static {
        System.loadLibrary("myJNI");
    }
    public native String getNdkHelloWorld();
}

3-4.  在MyNdkHelloWorld class上,按下右鍵->External Tools-> javah。
(也可從工具列的Tools-> External Tools->javah新增)
系統將自動在jni目錄下產生***.h檔。若有更動MyNdkHelloWorld class(自訂的class),也要重新使用javah產生header file。
(檔名為{你的package name}_{這個NDK class name},如: com_test_example_MyNdkHelloWorld.h)

3-5. 新增.cpp檔案
在jin資料夾點右鍵New->C/C++ Source File,新增HelloJni檔案。
// include的檔案會依照專案的package名稱有所不同
#include "com_test_example_MyNdkHelloWorld.h"

JNIEXPORT jstring JNICALL com_test_example_getNdkHelloWorld (JNIEnv *env, jobject){
    return (*env).NewStringUTF("Hello world from Android NDK!");
}


3-6. 製作Application.mk
在jni資料夾點右鍵,New->File,輸入"Application.mk"
編輯此檔案:
詳細說明: https://developer.android.com/ndk/guides/application_mk.html

APP_ABI := all


3-7. 製作Android.mk
在jni資料夾點右鍵,New->File,輸入"Android.mk"
編輯此檔案:
LOCAL_MODULE: NDK模組名稱
LOCAL_SRC_FILES: C/C++程式碼
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog : 用來顯示Log在Android Monitor上
詳細說明: https://developer.android.com/ndk/guides/android_mk.html

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := myJNI
LOCAL_SRC_FILES := HelloJni.cpp
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog

include $(BUILD_SHARED_LIBRARY)




留言

這個網誌中的熱門文章

電信帳單開立電子發票之中獎領取流程(以台灣大哥大為例)

Android Studio Logcat Color 顏色修改

在Mac的Android Studio 2.1 中使用Android NDK(Native Development Kit) Part 4: ndk-build以及如何在Android中呼叫C/C++ function