Android Studio 2.2 NDK/JNI配置

期待已久的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路徑

01.png

在local.propertise里面:
ndk.dir=$you sdk path$\sdk\ndk-bundle(注意這里是雙斜杠,網(wǎng)頁(yè)自動(dòng)轉(zhuǎn)換顯示不出來(lái))

在main下新建一個(gè)jni文件夾

02.png

新建一個(gè)類,聲明native方法:

03.png

在項(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ò)揣非。

04.png

再打開(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代碼

05.png

然后好像在gradle.propertise里面的android.useDeprecatedNdk=true屬性貌似也不用加了镰矿,為了保險(xiǎn)還是加上吧(o(╯□╰)o)

然后使用:

String str = new JniTest().accessMethod();
TextView tv = (TextView) findViewById(R.id.tv);
tv.setText(str);
06.png

這里改動(dòng)比較大的是編譯生成的so庫(kù)在這里:

[10.24跟新:貌似2.2.2這個(gè)文件換到了app\build\intermediates\ndkBuild]

07.png

然后在main新建jniLibs文件夾琐驴,拷貝so文件


08.png

然后注釋掉這里刪掉編譯生成的so庫(kù)看能不能運(yùn)行,因?yàn)?externalxxx文件夾就是mk文件配置成的:

09.png
10.png

二、

好了秤标,最后有點(diǎn)小技巧也分享個(gè)大家:
大家有沒(méi)有感到每次生成.h文件和去找方法簽名的時(shí)候感覺(jué)到特別的麻煩绝淡,還要找class文件啊指令什么的,從此之后讓大家解放雙手:
一苍姜、打開(kāi)as設(shè)置界面牢酵,進(jìn)入External Tools

11.png

參數(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$

然后使用:

12.png
13.png
14.png

是不是很酷!衙猪!

二.自動(dòng)生成簽名:
套路都是一樣的其他的不在贅述

15.png
16.png

----end-----

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末馍乙,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子垫释,更是在濱河造成了極大的恐慌丝格,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件棵譬,死亡現(xiàn)場(chǎng)離奇詭異显蝌,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)订咸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)琅束,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人算谈,你說(shuō)我怎么就攤上這事涩禀。” “怎么了然眼?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵艾船,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng)屿岂,這世上最難降的妖魔是什么践宴? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮爷怀,結(jié)果婚禮上阻肩,老公的妹妹穿的比我還像新娘。我一直安慰自己运授,他們只是感情好烤惊,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著吁朦,像睡著了一般柒室。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上逗宜,一...
    開(kāi)封第一講書(shū)人閱讀 49,792評(píng)論 1 290
  • 那天雄右,我揣著相機(jī)與錄音,去河邊找鬼纺讲。 笑死擂仍,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的熬甚。 我是一名探鬼主播逢渔,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼则涯!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起冲簿,我...
    開(kāi)封第一講書(shū)人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤粟判,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后峦剔,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體档礁,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年吝沫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了呻澜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡惨险,死狀恐怖羹幸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情辫愉,我是刑警寧澤栅受,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響屏镊,放射性物質(zhì)發(fā)生泄漏依疼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一而芥、第九天 我趴在偏房一處隱蔽的房頂上張望律罢。 院中可真熱鬧,春花似錦棍丐、人聲如沸误辑。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)稀余。三九已至,卻和暖如春趋翻,著一層夾襖步出監(jiān)牢的瞬間睛琳,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工踏烙, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留师骗,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓讨惩,卻偏偏與公主長(zhǎng)得像辟癌,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子荐捻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容