轉載請聲明:原文轉自:http://www.cnblogs.com/xiezie/p/5929996.html
一、java調用本地函數的開發步驟:
1.編寫本地方法的類(可以說是用來敘述本地方法的類):
2.編譯這個類,生成該類的.class文件
在Android Studio下有很多方法:
- 點擊Make Project
- Clean Project + Rebuild Project
- 運行或Debug APP
3.用javah命令生成該.class文件的.h頭文件
在Android Studio中,可以打開命令終端並將目錄切換到app/build/intermediates/classes/debug(編譯生成的.class文件的存放路徑)下:
終端上的命令:
cd app/build/intermediates/classes/debug
點擊回車,再輸入要>javah -jni 該類所在的包+該類名稱,示例如下:
javah -jni com.x.mp4player.TestNdk
4.在src/main下建立jni文件夾、並將生成的.h文件復制到該目錄下
5.創建一個同名的.cpp文件(用來編寫C/C++代碼)
生成的.h文件代碼:
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_x_mp4player_TestNdk */ #ifndef _Included_com_x_mp4player_TestNdk #define _Included_com_x_mp4player_TestNdk #ifdef __cplusplus extern "C" { #endif /* * Class: com_x_mp4player_TestNdk * Method: getStringFromNative * Signature: ()I */ JNIEXPORT jint JNICALL Java_com_x_mp4player_TestNdk_getStringFromNative (JNIEnv *, jclass); #ifdef __cplusplus } #endif #endif
編寫的.cpp文件代碼:
#include <jni.h> #include <com_x_mp4player_TestNdk.h> JNIEXPORT jint JNICALL Java_com_x_mp4player_TestNdk_getStringFromNative (JNIEnv *env, jclass cls) { return 1; }
- 在.cpp文件下要導入生成的頭文件 : #include <com_x_mp4player_TestNdk.h>
- .h文件和.cpp文件的名稱一致,另外,他們的方法名稱也要一致
6.在build.gradle下加入ndk模塊
- 模塊名稱要與本地方法所在的類所導入的鏈接庫文件名字相同,如下
static { System.loadLibrary("MyJni");//導入生成的鏈接庫文件 }
7.編譯運行
- 如果出現錯誤,請試着在jni文件夾下創建一個空的util.c文件 或者自行調試