歡迎來到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方法][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文件。