1. 程式人生 > >AndroidStudio現有專案新增NDK支援(ndk-build編譯)

AndroidStudio現有專案新增NDK支援(ndk-build編譯)

此篇主要以案例講解在現有專案新增NDK支援,並且使用ndk-build編譯庫檔案;

1. 從IDE左側開啟Project視窗,從下拉框選擇Project檢視

2. 導航到app目錄下的src的main目錄下,右鍵->New Directory新建一個目錄jni;


3. 在main的java目錄下新增native函式;

新增 com.niubashaoye.demo.ndkdemo.JNITools.java

public class JNITools {
    static{
        System.loadLibrary("NDKLib");
    }
    public native int addNum(int num1,int num2);
}

4. 新增javah自動生成標頭檔案配置,然後使用javah生成標頭檔案到jni目錄中;

5. 專案新增NDK路徑:File->Project Structrue ->SDK Location ->設定NDK路徑;

6. 在jni目錄下新建一個C/C++ Source檔案NDKLib.cpp;

7. 在jni目錄下新建Android.mk檔案,配置ndk的庫檔案編譯環境;

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := NDKLib
LOCAL_SRC_FILES := NDKLib.cpp
LOCAL_LDLIBS := -lm -llog
include $(BUILD_SHARED_LIBRARY)

8. 新增C/C++引用到Gradle配置中

切換到Anroid檢視下,專案名右鍵 ->Link C++ Project with Gradle ->選擇ndk-build,然後選擇Android.mk的路徑

9. 在jni目錄NDKLib.cpp的實現標頭檔案的函式,引用標頭檔案並實現方法;
    如果此處C/C++檔案不能自動補全,請參考:AndroidStudio NDK開發C/C++檔案自動補全設定

#include <jni.h>
#include "com_niubashaoye_demo_ndkdemo_JNITools.h"

JNIEXPORT jint JNICALL Java_com_niubashaoye_demo_ndkdemo_JNITools_addNum
  (JNIEnv *env, jobject obj, jint num1, jint num2){
   return num1+num2;
  }

10. 呼叫JNI函式

 int num = new JNITools().addNum(34,68);
 Toast.makeText(getApplicationContext(), "34+68="+num, Toast.LENGTH_SHORT).show();

AndroidStudio現有專案新增NDK支援(CMake編譯)