Android studio開發NDK,第一個NDK程序教程

歡迎來到Studio的NDK教程(Mac平臺)

本文主要內容是:

NDK

在Android SDK首次發佈時,Google就宣稱其虛擬機Dalvik支持JNI編程方式,也就是第三方應用完全可以通過JNI調用自己的C動態庫,即在Android平臺上,“Java+C”的編程方式是一直都可以實現的。。 —— [NDK詳細講解 ]

本文重點是怎麼MAC下Android Studio開發第一個NDK程序,所以NDK知識請讀者自行閱讀。

本編輯器支持 Markdown Extra ,  擴展了很多好用的功能。具體請參考[Github][2].

1.下載NDK、SDK並設置環境變量

交給讀者作業

2.配置JAVA環境(在terminal中可以使用javah、javac)

3.寫好TestNdk程序爲後續調用JNI做準備

定義一個native方法

[定義一個native方法][5]

4.執行Studio中[Build–>Make Project][6],生成class文件

生成的class文件在Project目錄下。(不知道是Studio的版本問題還是系統的問題,小編的測試未成功)
這裏寫圖片描述

5.1生成.h文件

這個我們使用的命令:javah -d <文件名> -classpath

5.2進入TestNdk.javad的文件夾main下(cd命令)

這裏寫圖片描述
如果不進入這個目錄,後面運行javah會報找不到“com.spoofing.spoofing.ndkdemo.TestNdk”類文件。
小編在此介紹上面的方法不行的另種可行方案:
1)找到class文件所在的文件,命令行切換到該目錄下
這裏寫圖片描述
2)運行javah命令:
javah com.spoofing.spoofing.ndkdemo.TestNdk
路徑不寫錯誤,基本沒什麼錯誤。
運行成功如下圖:(生成頭文件,直接拷貝到jni文件下)
這裏寫圖片描述
頭文件出現了,頭文件的內容、函數聲明不要修改!

5.3編寫c源文件,函數的名一定要從之前生成的頭文件裏複製過來,保持一致。

#include <jni.h>
/* Header for class com_spoofing_spoofing_ndkdemo_TestNdk */

#ifndef _Included_com_spoofing_spoofing_ndkdemo_TestNdk
#define _Included_com_spoofing_spoofing_ndkdemo_TestNdk
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_spoofing_spoofing_ndkdemo_TestNdk
 * Method:    getString
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_spoofing_spoofing_ndkdemo_TestNdk_getString
  (JNIEnv *, jobject);


#ifdef __cplusplus
}
#endif
#endif
#include <jni.h>
#include <string.h>

/* Header for class com_spoofing_spoofing_ndkdemo_TestNdk */

#ifndef _Included_com_spoofing_spoofing_ndkdemo_TestNdk
#define _Included_com_spoofing_spoofing_ndkdemo_TestNdk
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_spoofing_spoofing_ndkdemo_TestNdk
 * Method:    getString
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_spoofing_spoofing_ndkdemo_TestNdk_getString
  (JNIEnv * env, jobject jObj)
  {return (*env)->NewStringUTF(env,"Hello From NDK");}


#ifdef __cplusplus
}
#endif
#endif

6、配置build.gradle文件,加入下圖中的語句。 moduleName 就是將來生成的so文件名稱的一部分,修改它可以修改so的文件名。 ldLibs 目前不管 abiFilters 是生成os文件的平臺,這裏選擇了3種

這裏寫圖片描述

7.配置ndk路徑。打開local.properties,加入NDK的路徑(ndk需要單獨下載,我在網上下載ndk後放在了和sdk相同的路徑下)

這裏寫圖片描述

8.生成os文件。

8.1、Build->Make Project生成so文件。
8.2 查看工程目錄 ..\build\intermediates\ndk\debug\lib目錄裏面各有一個os文件。
這裏寫圖片描述

9.調用jni

這裏寫圖片描述

10.實驗結果

這裏寫圖片描述

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