一、背景
寫一個NDK入門教程,方便以後自己忘記了可以再來
二、開發工具以及開發環境
1、android studio
2、JDK 8
3、LLDB
4、NDK-Build
支持技術分享,轉載或複製,請指出文章來源 此博客作者爲Jack__0023
三、開始 (一共9個介紹和操作,文字大多是解釋,你也可以直接看圖片)
1、首先創建一個Android Demo項目(我用Face作爲一個Demo項目來演示)
2、如果項目中沒有jniLibs文件夾,在項目的 build.gradle 文件 的 android {} 編寫jniLib屬性(如下圖)
3、環境配置(配置 javah 和 ndk-build 編譯文件工具)
你可以參考這位的這篇 javah和ndk-build配置和解釋博客
a、 javah配置
打開 File -> Settings -> Tools -> External Tools
點開 + 號開始進行添加 javah,javah配置如下
b、ndk-build配置,你可以查看一下你的sdk文件中是否有ndk-build和LLDB的文件(如下圖)
如果不存在的話,可以通過Android studio工具進行配置(如下圖),在android sdk的SDK Tools中進行下載即可
存在 ndk-build和LLDB之後, 再打開 File -> Settings -> Tools -> External Tools,進行ndk-build 配置(配置如下圖)
4、編寫jni代碼,addNum方法就是JNI方法,代碼如圖
public class JNITools {
/**
* @Description 加載文件
* [@author](https://my.oschina.net/arthor) 姚旭民
* [@date](https://my.oschina.net/u/2504391) 2018/12/1 14:44
*/
static{
System.loadLibrary("NDKLib");
}
/**
* @Description 調用JNI進行相加計算
* [@author](https://my.oschina.net/arthor) 姚旭民
* @date 2018/12/1 14:45
*
* @param num1 參數一
* @param num2 參數二
* @return 返回相加結果
*/
public native int addNum(int num1,int num2);
}
5、將JNITools生成頭文件,如下圖
你也可以參考這篇 生成頭文件博客
接着你會在 main 文件夾下面找到一個 頭文件,我將它移動到了我自定義的jni文件夾中,生成的頭文件內容如下(注意Java開頭這個修飾是必須的)
6、生成c/c++ 源文件 NDKLib.cpp,你可以先創建裏面可以什麼都沒有,如圖(裏面的內容是我後面寫上去的)
7、在同級目錄下創建 Android.mk,寫上面的內容 LOCAL_PATH := $(call my-dir) Android.mk的屬性說明可以參考這篇 博客
include $(CLEAR_VARS)
LOCAL_MODULE := NDKLib
LOCAL_SRC_FILES := NDKLib.cpp
LOCAL_LDLIBS := -lm -llog
include $(BUILD_SHARED_LIBRARY)
8.、添加C/C++引用到Gradle配置中,如圖
引用之後,使用ndk-build進行編譯
這時候查看 NDKLib.cpp 文件,如果沒有內容,那麼應該是沒有自動關聯,可以將我這份代碼拷進去
#include <jni.h>
#include "com_yxm_face_ndkdemo_JNITools.h"
JNIEXPORT jint JNICALL Java_com_yxm_face_ndkdemo_JNITools_addNum
(JNIEnv *env, jobject obj, jint num1, jint num2){
return num1+num2;
}
9、所有準備工作都做好,開始調用JNI函數進行查看是否成功
OK,這裏就完成JNI的入門例子教程,如果實在看不懂的,可以留郵箱給我,我發個例子給你,因爲我這個demo在測試別的,所有有點大,沒法上傳