1、創(chuàng)建一個(gè)類(lèi)抠蚣,在類(lèi)里面聲明一個(gè)本地方法
public class JNIUtils {
//在c語(yǔ)言中對(duì)兩個(gè)數(shù)求和
public static native int getNumSum(int a ,int b);
}
2祝旷、設(shè)置ndk的路徑和.so的名稱(chēng)
- 點(diǎn)擊File->ProjectStructure,配置好ndk的路徑(最好是先把ndk下載到本地)如下圖:
-
在模塊的目錄下找到build.gradle文件,將以下部分
ndk{ //.so的名稱(chēng):testjni moduleName"testjni" //適配了三種平臺(tái)怀跛,一般armeabi平臺(tái)比較多距贷,可以只寫(xiě)一種 abiFilters"armeabi","armeabi-v7a","x86" }
添加到defaultConfig大括號(hào)內(nèi)
-
在grade.properties文件內(nèi)的末尾處添加一句代碼,不然studio會(huì)報(bào)錯(cuò)
android.useDeprecatedNdk=true
3吻谋、生成頭文件
先點(diǎn)擊Build->Make Project忠蝗,再打開(kāi)模塊目錄下的build文件夾,會(huì)生成一個(gè)文件夾classes漓拾,點(diǎn)擊打開(kāi)什湘,找到一個(gè)debug的文件夾
-
打開(kāi)studio的Terminal,先進(jìn)入到debug文件夾中晦攒,輸入:
cd app/build/intermediates/classes/debug
-
再輸入:
//javah -jni 類(lèi)的全名 javah -jni com.blainpeng.jnidemo.JNIUtils
此時(shí)會(huì)在debug文件下生成一個(gè).h文件
4闽撤、java層開(kāi)始調(diào)用c/cpp中的函數(shù)
-
在main目錄下新建一個(gè)名為jni的文件夾,然后jni目錄下新建一個(gè).c或.cpp文件脯颜,將上面生成的.h文件中的方法剪切到j(luò)ni目錄下哟旗,并且在.c/.cpp里面include該頭文件
#include "com_blainpeng_jnidemo_JNIUtils.h" //c中求和的方法 int sum(int a, int b){ return a+b; } JNIEXPORT jint JNICALL Java_com_blainpeng_jnidemo_JNIUtils_getNumSum (JNIEnv *env, jclass clazz, jint ja, jint jb){ return sum(ja,jb); }
寫(xiě)完邏輯后,再rebuild一次栋操,再次點(diǎn)擊build->intermediates闸餐,找到一個(gè)ndk的文件夾,點(diǎn)擊它矾芙,查看是否有生成.so文件
-
在android代碼中調(diào)用本地方法舍沙,需先加載so文件,可以通過(guò)靜態(tài)代碼塊的方式來(lái)加載
static { System.loadLibrary("testjni"); }
-
再調(diào)用本地方法:
int numSum = JNIUtils.getNumSum(4, 9);
得到結(jié)果:
好了剔宪,JNI的簡(jiǎn)單入門(mén)就結(jié)束了拂铡。