android 實現 JNI NDK 入門例子教程+源碼 原

一、背景

寫一個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在測試別的,所有有點大,沒法上傳

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章