JNI開(kāi)發(fā)系列(一:環(huán)境搭建與第一個(gè)Demo)

網(wǎng)上有很多關(guān)于JNI開(kāi)發(fā)的文章虚倒,可能你也留意到了有些文章講解JNI開(kāi)發(fā)流程的不太一樣惕它,我最開(kāi)始接觸的時(shí)候也是一臉懵逼曾棕;其實(shí)這些不一樣是Android Studio版本不一樣造成的油昂,在Android Studio2.2版本完善了對(duì)C/C++的支持敬肚,還提供CMAKE方式的編譯毕荐,支持lldb調(diào)試c/c++代碼了,這算是Android Studio對(duì)JNI開(kāi)發(fā)的一次重大革新吧艳馒。作為技術(shù)人員嘛憎亚,肯定要用最新的IDE才對(duì)吧,所以這次JNI的講解就只針對(duì)Android Studio2.2版本以后了弄慰,我也不會(huì)列舉與老版本開(kāi)發(fā)流程的對(duì)比第美,個(gè)人覺(jué)得沒(méi)有必要,如果確實(shí)需要了解曹动,請(qǐng)自行Google或者問(wèn)度娘吧斋日。接下來(lái)進(jìn)行正題了

一:環(huán)境搭建

先配置好NDK開(kāi)發(fā)的一些所需工具,在SDK Tools中勾選安裝CMake墓陈、LLDB恶守、NDK第献,如下圖:


NDK:讓你能在 Android 上面使用 C 和 C++ 代碼 的工具集。

CMake:外部構(gòu)建工具兔港。

LLDB:Android Studio上面調(diào)試本地代碼的工具庸毫。

注:如SDK Tools 不顯示LLDB,CMake 和NDK衫樊,說(shuō)明你配置了國(guó)內(nèi)鏡像站點(diǎn)飒赃。

二:開(kāi)始第一個(gè)Demo

1、File -> New -> New Project科侈,在如下界面中勾選Include C++ Support载佳,然后一路 Next,直到 Finish 為止即可


項(xiàng)目打開(kāi)后我們查看目錄結(jié)構(gòu)臀栈,與常規(guī)項(xiàng)目不同的是多了.externalNativeBuild文件夾蔫慧、cpp文件夾、CMakeLists.txt文件权薯,如下圖:


.externalNativeBuild文件夾:cmake編譯好的文件, 顯示支持的各種硬件等信息姑躲。系統(tǒng)生成。

cpp文件夾:存放C/C++代碼文件盟蚣,native-lib.cpp文件是該Demo中自帶的黍析,可更改。需要自己編寫屎开。

CMakeLists.txt文件:CMake腳本配置的文件阐枣。需要自己配置編寫。

同時(shí)奄抽,Gradle文件也有不同:


此處主要作用是Gradle調(diào)用外部構(gòu)建腳本 CMakeLists.txt侮繁。打開(kāi)CMakeLists.txt文件,主要關(guān)心的有兩部分:




兩個(gè)library的名字(需一致)以及一個(gè)cpp文件的路徑如孝,彼此需要對(duì)應(yīng)一致;add_library方法和target_link_libraries方法一一對(duì)應(yīng)娩贷,當(dāng)有多個(gè)庫(kù)第晰,多個(gè)C/C++文件時(shí),可寫多組add_library方法和target_link_libraries方法彬祖。

本來(lái)新建項(xiàng)目后就自帶了一個(gè)Demo茁瘦,但我把JNI的代碼單獨(dú)放在了一個(gè)類里面,此處做了簡(jiǎn)單修改储笑,如下:


NdkTest:


native-lib文件:


此處方法的命名規(guī)則為 Java_命名空間(其中.換為_(kāi))_類名_方法名甜熔;其中解釋一下

JNIEnv *:表示一個(gè)指向JNI環(huán)境的指針, 可以通過(guò)它來(lái)訪問(wèn)JNI提供的接口方法.

jobject:表示java對(duì)象中的this.

JNIEXPORT和JNICALL:它們是JNI種所定義的宏, 可以在jni.h這個(gè)頭文件中查到

另外說(shuō)明一下,如果要在native-lib.cpp文件中添加多少方法突倍,必須添加在 extern “c” { } 中腔稀,或者在每個(gè)方法前加 extern “c” , 否則會(huì)報(bào)找不到方法!

ManActivity調(diào)用:


運(yùn)行代碼盆昙,就能看到效果,調(diào)用了C++方法在界面上顯示了Hello from C++字符串和10焊虏, 簡(jiǎn)單的JNIDemo就完成了淡喜。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市诵闭,隨后出現(xiàn)的幾起案子炼团,更是在濱河造成了極大的恐慌,老刑警劉巖疏尿,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瘟芝,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡褥琐,警方通過(guò)查閱死者的電腦和手機(jī)锌俱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)踩衩,“玉大人嚼鹉,你說(shuō)我怎么就攤上這事∏唬” “怎么了锚赤?”我有些...
    開(kāi)封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)褐鸥。 經(jīng)常有香客問(wèn)我线脚,道長(zhǎng),這世上最難降的妖魔是什么叫榕? 我笑而不...
    開(kāi)封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任浑侥,我火速辦了婚禮,結(jié)果婚禮上晰绎,老公的妹妹穿的比我還像新娘寓落。我一直安慰自己,他們只是感情好荞下,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布伶选。 她就那樣靜靜地躺著,像睡著了一般尖昏。 火紅的嫁衣襯著肌膚如雪仰税。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天抽诉,我揣著相機(jī)與錄音陨簇,去河邊找鬼。 笑死迹淌,一個(gè)胖子當(dāng)著我的面吹牛河绽,可吹牛的內(nèi)容都是我干的己单。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼葵姥,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼荷鼠!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起榔幸,我...
    開(kāi)封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤允乐,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后削咆,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體牍疏,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年拨齐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鳞陨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瞻惋,死狀恐怖厦滤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情歼狼,我是刑警寧澤掏导,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站羽峰,受9級(jí)特大地震影響趟咆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜梅屉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一值纱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧坯汤,春花似錦虐唠、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至庶近,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間眷蚓,已是汗流浹背鼻种。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留沙热,地道東北人叉钥。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓罢缸,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親投队。 傳聞我的和親對(duì)象是個(gè)殘疾皇子枫疆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

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