NDK入門(一)

文章來源:https://pioneerzdb.com/2019/02/23/NDK(%E4%B8%80)/

前言:學(xué)習(xí)一個新知識時掸鹅,無非就是弄懂三個問題:
1.這個是什么?
2.為什么要學(xué)習(xí)這個墅冷?
3.怎么做?

首先貼出官方介紹地址:https://developer.android.com/ndk/guides

NDK是什么?

NDK:即Native development kit(原聲開發(fā)工具)縮寫。其實從Android誕生之初含懊,就已經(jīng)支持C/C++開發(fā),開發(fā)者可以通過jni完成自己的動態(tài)庫(so)開發(fā)鳄袍,但是這樣存在一個問題:如何將so庫和我們的工程一起打包绢要?而且這里面也存在著一些技術(shù)障礙,比如:很難調(diào)用framework層的api拗小,兼容性難以保障等問題。所以樱哼,NDK就應(yīng)運而生了哀九。由此可知,他是一款開發(fā)工具集搅幅,可以幫助我們更快的開發(fā)so庫阅束,以及和java工程一起打包等。

為什么要用NDK茄唐?

無非就是用NDK有什么好處息裸?
1.可以快速的開發(fā)出so庫蝇更,以便共享
2.安全性高,java層的代碼很容易被反編譯呼盆,雖然做了混淆年扩,但是懂得smali語法的人看起來還是很容易的,所以so庫還是很難被反編譯的访圃。
3.提高執(zhí)行效率和性能厨幻,論起執(zhí)行效率,C/C++是要快于java的腿时。

使用場景

由上面可以知道:
1.重復(fù)使用自己或者別人開發(fā)的c/c++庫
2.進一步提升設(shè)備性能

怎么做况脆?

首先貼出官方示例:https://github.com/googlesamples/android-ndk/tree/master

環(huán)境要求:

Android stadio 2.2及其更高版本

下載NDK工具包:

1.打開Android stadio的SDK Tools

SDKTools

NDK:這套工具允許您為 Android 使用 C 和 C++ 代碼。
CMake:一款外部構(gòu)建工具批糟,可與 Gradle 搭配使用來構(gòu)建原生庫格了。如果您只計劃使用 ndk-build,則不需要此組件徽鼎。
LLDB:一種調(diào)試程序盛末,Android Studio 使用它來調(diào)試原生代碼。

將圖中所指的三個文件下載即可

手動創(chuàng)建一個demo

create

因為我這是Android stadio3.3的纬傲,所以界面呈現(xiàn)這樣子的满败,可能每個版本都不一樣,然后點擊Native C++叹括,下面都是next算墨,然后finish即可。
查看目錄時你會發(fā)現(xiàn)多了一個cpp目錄汁雷,該目錄下面有兩個文件净嘀,一個是CMarkLists.txt,一個是native-lib.cpp。
我們先來看看native-lib.cpp文件:
native-lib.cpp

我們可以看到它里面其實就是用C寫的一些源代碼侠讯。
參數(shù)說明:
1挖藏、extern “C”:實現(xiàn) C 和 C++ 的混合編程,用于 C++ 代碼調(diào)用 C 的函數(shù)
2厢漩、JNIEXPORT 和 JNICALL膜眠,用于標(biāo)識函數(shù)用途的兩個宏
3、jstring溜嗜,JNI 中的數(shù)據(jù)類型宵膨,對應(yīng) Java 中 String 類型,還有 8 種基本數(shù)據(jù)類型 jbyte炸宵、jchar辟躏、jshort、jint土全、jlong捎琐、jfloat会涎、jdouble、jboolean瑞凑,引用數(shù)據(jù)類型 jintArray末秃、jshortArray、jlongArray 等拨黔。
4蛔溃、函數(shù)命名規(guī)則:Java類全路徑方法名,這里的類是那個調(diào)用 C 或 C++ 的類篱蝇,像這里的 Java_com_timcoder_ndkproject_NativeHelper_buttonFromJNI
5贺待、函數(shù)的參數(shù):JNIENV和jobject。這兩個參數(shù)暫時還未用到零截,也沒研究麸塞,等后面研究之后再來更新

我們再來看看CMarkLists文件:

CMarkLists

這張圖片沒有截全,它里面有三個方法:add_library涧衙, find_library哪工, target_link_libraries, 而且官方注釋的也很清楚弧哎,我就不再重復(fù)了雁比。
CMakeList.txt 是腳本文件, 需要指定包含哪些源代碼

大致了解了結(jié)構(gòu),那我們就先來做個很簡單的小demo:

目標(biāo)實現(xiàn):點擊button撤嫩,改變textview的內(nèi)容偎捎。

button

我自己創(chuàng)建了一個button-lib.cpp文件,你也可以使用官方的native-lib.cpp文件序攘,在其里面添加一個相應(yīng)的方法就行茴她。如果要自己創(chuàng)建源文件的話,還記得剛才上面所說的CMarklists文件的作用嘛程奠?一定要在它里面配置源代碼的路徑才會生效丈牢。

完成demo已上傳至github

demo地址:https://github.com/pioneerz/NDKProject

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市瞄沙,隨后出現(xiàn)的幾起案子己沛,更是在濱河造成了極大的恐慌,老刑警劉巖距境,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泛粹,死亡現(xiàn)場離奇詭異,居然都是意外死亡肮疗,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門扒接,熙熙樓的掌柜王于貴愁眉苦臉地迎上來伪货,“玉大人们衙,你說我怎么就攤上這事〖詈簦” “怎么了蒙挑?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長愚臀。 經(jīng)常有香客問我忆蚀,道長,這世上最難降的妖魔是什么姑裂? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任馋袜,我火速辦了婚禮,結(jié)果婚禮上舶斧,老公的妹妹穿的比我還像新娘欣鳖。我一直安慰自己,他們只是感情好茴厉,可當(dāng)我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布泽台。 她就那樣靜靜地躺著,像睡著了一般矾缓。 火紅的嫁衣襯著肌膚如雪怀酷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天嗜闻,我揣著相機與錄音蜕依,去河邊找鬼。 笑死泞辐,一個胖子當(dāng)著我的面吹牛笔横,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播咐吼,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼吹缔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了锯茄?” 一聲冷哼從身側(cè)響起厢塘,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎肌幽,沒想到半個月后晚碾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡喂急,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年格嘁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片廊移。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡糕簿,死狀恐怖探入,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情懂诗,我是刑警寧澤蜂嗽,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站殃恒,受9級特大地震影響植旧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜离唐,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一病附、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧侯繁,春花似錦胖喳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至咕别,卻和暖如春技健,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背惰拱。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工雌贱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人偿短。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓欣孤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親昔逗。 傳聞我的和親對象是個殘疾皇子降传,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,627評論 2 350

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