期待已久的android studio 2.2正式版本終于發(fā)布了刚陡,as新增了對(duì)NDK的支持惩妇,在以前的版本對(duì)NDK的支持一直是as的一個(gè)短板,現(xiàn)在代碼關(guān)聯(lián)筐乳、提示歌殃、打包都沒(méi)問(wèn)題,以后再也不用eclipse和as之間來(lái)回切換了蝙云。
一氓皱、NDK環(huán)境配置
- 下載最新的2.2版本 ,或者直接升級(jí)
- gradle classpath 'com.android.tools.build:gradle:2.2.0'
新建一個(gè)工程->File->project structure 配置你的ndk路徑
在local.propertise里面:
ndk.dir=$you sdk path$\sdk\ndk-bundle(注意這里是雙斜杠,網(wǎng)頁(yè)自動(dòng)轉(zhuǎn)換顯示不出來(lái))
在main下新建一個(gè)jni文件夾
新建一個(gè)類,聲明native方法:
在項(xiàng)目的gradle中添加
android {
...
ndk {
moduleName "jni_test" //編譯生成so庫(kù)的名字波材,注意不要lib股淡,和.so加進(jìn)來(lái) ,而且要和上面loadLibrary里面的參數(shù)一致
abiFilters "armeabi","armeabi-v7a"http://編譯支持的平臺(tái)
}
}
生成.h頭文件
然后clean project 再rebuild project 生成class文件,這時(shí)候打開(kāi)如下圖的文件夾看是否生成了classes文件夾各聘,沒(méi)有生成請(qǐng)重新來(lái)過(guò)揣非。
再打開(kāi)Terminal輸入指令
cd app/build/intermediates/classes/debug
然后再輸入指令
javah -jni xxxxx.JniUtils
注意 這里javah -jni后面跟的是JniUtils類的全路徑,如果javah報(bào)不存在之類的,是你的java環(huán)境沒(méi)有配置好趴俘。
這時(shí)候打開(kāi)classes/debug下面的文件發(fā)現(xiàn)多了一個(gè)文件xxxx.h,把生成的.h文件復(fù)制或者剪切到j(luò)ni文件夾下面去摩骨,新建一個(gè)c類隨便取一個(gè)名字,添加代碼如下
include "jni_test.h"
Java_xc_com_ndk_1accessjavafield_JniTest_accessMethod
(JNIEnv *env, jobject jobj){
return (*env)->NewStringUTF(env,"hello world form c");
}
這里發(fā)現(xiàn)頭文件#include <jni.h>報(bào)紅色搞监,這是因?yàn)闆](méi)有關(guān)聯(lián)源碼,需要在工程的gradle里面配置如下:
android {
...
externalNativeBuild {
ndkBuild {
path 'src/main/jni/Android.mk'
}
}
sourceSets.main {
jni.srcDirs = []
// jniLibs.srcDirs = ['libs']
jniLibs.srcDirs = ['src/main/jniLibs']//設(shè)置目標(biāo)的so存放路徑
}
}
這是你還需要在jni里面建一個(gè).mk文件來(lái)配置編譯你的c代碼
然后好像在gradle.propertise里面的android.useDeprecatedNdk=true屬性貌似也不用加了镰矿,為了保險(xiǎn)還是加上吧(o(╯□╰)o)
然后使用:
String str = new JniTest().accessMethod();
TextView tv = (TextView) findViewById(R.id.tv);
tv.setText(str);
這里改動(dòng)比較大的是編譯生成的so庫(kù)在這里:
[10.24跟新:貌似2.2.2這個(gè)文件換到了app\build\intermediates\ndkBuild]
然后在main新建jniLibs文件夾琐驴,拷貝so文件
然后注釋掉這里刪掉編譯生成的so庫(kù)看能不能運(yùn)行,因?yàn)?externalxxx文件夾就是mk文件配置成的:
二、
好了秤标,最后有點(diǎn)小技巧也分享個(gè)大家:
大家有沒(méi)有感到每次生成.h文件和去找方法簽名的時(shí)候感覺(jué)到特別的麻煩绝淡,還要找class文件啊指令什么的,從此之后讓大家解放雙手:
一苍姜、打開(kāi)as設(shè)置界面牢酵,進(jìn)入External Tools
參數(shù)
Program: $JDKPath$/bin/javah
Parameters: -classpath . -jni -o $ModuleFileDir$\src\main\jni\$Prompt$ $FileClass$
Working directory: $ModuleFileDir$/src/main/java
還有一種寫(xiě)法:-classpath . -jni -d $ModuleFileDir$/src/main/jni $FileClass$
然后使用:
是不是很酷!衙猪!
二.自動(dòng)生成簽名:
套路都是一樣的其他的不在贅述
----end-----