在Android studio裡設定NDK
前言
最近打算讓C++的引擎支援Android,所以就安裝許久沒用的Android studio,裝完後發現NDK的用法跟我以前的用法差很多,所以想說可以換回以前的"ndk-build.cmd"嗎?答案是可以的,設定的過程不太好記,所以在此做個紀錄。內容
在設定NDK的第一步驟是安裝NDK,Android studio本來就有整合,只是預設不會裝。首先打開SDK Manager,如下圖打開SDK Manager |
接著選取安裝NDK,如下圖
安裝NDK |
安裝完後請重新開啟Android studio。
下一個步驟是設定External Tools,這裡會新增兩個工具,一個是javah,另一個是ndk-build。
打開設定,如下圖
打開設定 |
接著到External Tools新增工具,如下圖
External Tools新增工具 |
新增"javah",如下圖
新增"javah" |
$JDKPath$\bin\javah.exe
Arguments的參數
-classpath "$Classpath$;" -d $ModuleFileDir$\src\main\jni $FileClass$
Working Directory的參數
$ModuleFileDir$\src\main\java\接著新增ndk-build",如下圖
新增"ndk-build" |
Program的參數
C:\Users\hosee\AppData\Local\Android\Sdk\ndk-bundle\ndk-build.cmd
Working Directory的參數
$ModuleFileDir$\src\main\Program的參數的參數因為沒marcro,所以是個絕對位置,其實就是NDK的安裝位置,如果不要用Android studio裡的NDK,
可以把這裡的位置改掉。
接著設定打開專案結構,如下
打開專案結構 |
接著設定JDK,使用Android studio裡面的JDK,如下圖
設定JDK |
開一個新專案後,在gradle.properties新增以下
android.useDeprecatedNdk=true
如圖
修改gradle.properties |
然後在build.gradle新增以下
ndk { moduleName "HelloNDK" ldLibs "android" } sourceSets.main { jni.srcDirs = [] jniLibs.srcDir "src/main/libs" }
如圖
修改build.gradle |
修改完後,再來是新增jni的資料夾,如下圖
新增jni資料夾 |
新增後會跳出"New Android Component",直接Finish即可,如下圖
"New Android Component"視窗 |
在專案的Activity裡新增以下
static { System.loadLibrary("HelloNDK"); } public static native String nativeHello();
如圖
新增NDK介面 |
介面加完後,使用"javah"來新增header檔。
接著在jni資料夾新增source檔,檔案內容如下
#include "string.h" #include "jni.h" #include "com_example_hosee_hellondk_MainActivity.h" JNIEXPORT jstring JNICALL Java_com_example_hosee_hellondk_MainActivity_nativeHello(JNI* pEnv,jclass jObj) { return (pEnv)->NewStringUTF("Hello NDK!"); }
操作如圖
新增source檔 |
接著在jni資料夾新增"Android.mk",內容如下
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := HelloNDK LOCAL_SRC_FILES := com_example_hosee_hellondk_MainActivity.cpp LOCAL_LDLIBS += -landroid include $(BUILD_SHARED_LIBRARY)
操作如圖
新增"Android.mk" |
接著在jni資料夾新增"Application.mk",內容如下
APP_PLATFORM := android-15 APP_MODULES := HelloNDK APP_ABI := all
操作如圖
新增"Application.mk" |
接著使用ndk-build產生so檔,如下圖
使用ndk-build產生so檔 |
最後在專案的Activity新增以下
TextView tv = (TextView) findViewById(R.id.TestTextView); tv.setText(nativeHello() );
操作如圖
使用NDK的Function |
這裡要注意TextView的ID要先去Layout裡面加完,加完後就可以使用了。
沒有留言:
張貼留言