當需要用到C/C++或是執行一些底層溝通時
就會需要用到NDK
1. 先到官網https://developer.android.com/tools/sdk/ndk/index.html 裡面有簡單的介紹
2. 在下載羧信的NDK https://developer.android.com/ndk/downloads/index.html
並解壓縮放到適當位置
3. 打開local.properties, 設定ndk的路徑
舉例: ndk.dir=C\:\\adt-bundle-windows-x86_64-20140702\\android-ndk-r10e
4. 然後在main點滑鼠右鍵, 創一個JNI Folder
5. 接著在jni的資料夾內, 創立一個Android.mk的檔案
6. 並在裡面設定參數和路徑
舉例:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := jniLib
LOCAL_SRC_FILES := main.c
include $(BUILD_SHARED_LIBRARY)
其中 LOCAL_MODULE 是要在java code裡面使用的名稱
LOCAL_SRC_FILES是其對應的.c檔
7. 同樣在jni資料夾上點右鍵, 創建Application.mk檔
並在裡面添加
APP_ABI := all
這邊是指build出來的檔案可在哪種類型的CPU上用
8. 然後打開build.gradle檔
在defaultConfig內添加
ndk{
moduleName "jniLib"
}
9. 同樣在jni資料夾上點右鍵, 創建main.c檔
並在裡面添加
#include <jni.h>
Java_com_example_name_test_MainActivity_StringFromJNI(JNIEnv *env, jobject thiz)
{
return (*env)->NewStringUTF(env, "Hello from JNI");
}
這段的意思是在java內呼叫StringFromJNI , 會回傳Hello from JNI
10. 回到專案的主要java檔, 首先要把lib的路徑指定好
static {
System.loadLibrary("jniLib");
}
11. 然後宣告public native String StringFromJNI();
就可以使用剛剛在main裡面的StringFromJNI()檔案了
整體代碼如下:
public native String StringFromJNI();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("MainActivity", "Log from Jni = " + StringFromJNI());
}
12. 執行後可以看到Log顯示JNI上回傳的字串

您好!!! 我照著您的步驟完成以後 按下執行 會有錯誤耶 java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/ndktest.info.nctu.ndktestomg-1/base.apk"],nativeLibraryDirectories=[/data/app/ndktest.info.nctu.ndktestomg-1/lib/arm, /vendor/lib, /system/lib]]] couldn't find "libjniLib.so" 事實上 我已經照著很多網路上的教學想要在 android studio 上實現 NDK 但是每次都是這個問題 希望您可以教教我 感激不盡!!! 我的 android studio 版本 為 1.3 電腦作業系統為 windows win 7 jdk 版本為 jre1.8.0_25 謝謝您!!!!
如果NDK路徑那些有設定對, 那就是.so檔沒有build好, 先檢查你的so檔有沒有產出來, 相對路徑app\build\intermediates\ndk 裡面, 接著有可能你有.so檔, 但是你的環境是arm的, 但是你卻build出x86的, 那也是有問題, 在c的世界裡並沒有build once run everywhere的特性, 你先把jni內code的部分重build看看 ==================================================== 我後來把我的IDE升到1.3重Build之後它回我 WARNING [Project: :app] Current NDK support is deprecated. Alternative will be provided in the future. 所以可能要降IDE或者是改用Eclipse了
您好,請問版主有遇上 Error:Execution failed for task ':app:compileDebugNdk'. > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\android-ndk-r10d\ndk-build.cmd'' finished with non-zero exit value 2 的問題嗎? A.S. :1.3.2version
您好, 您的問題我沒有遇過, 我查網路上好像是要檢察你包的jdk相容性的問題, 可以參考下列試看看http://www.bkjia.com/Androidjc/990195.html, 然後Android Studio 1.4好像多了一個NDK的更新檔, 可能把這部分完善了, 之後我再研究看看~~