Android NDK開發(fā)(一)

前言

目前的Android開發(fā),在很多公司不再是純粹的Java層開發(fā)署穗,更多的會與C++結合芯义,把一些重要的方和行為以及一些私密性質(zhì)的東西放在C++中,一般遇到多人開發(fā)的時候早龟,通常的做法是在Android項目中放入C++的動態(tài)庫(.so文件)惫霸。不過呢,有些時候葱弟,當我們Java開發(fā)人員也想在AS中調(diào)用C++代碼怎么辦壹店?

正文

概念

什么是NDK?

定義:Native Development Kit芝加,是Android的一種開發(fā)工具包

作用:快速開發(fā)C茫打、 C++的動態(tài)庫,并自動將so和應用一起打包成 APK
即可通過 NDKAndroid中 使用 JNI與本地代碼(如C妖混、C++)交互

優(yōu)點:

  1. 運行效率高
  2. 代碼安全性高
  3. 跨平臺

什么是JNI老赤?

定義:Java Native Interface,

作用:通過JNI能使java調(diào)用c++

什么是CMake制市?

定義:允許開發(fā)者編寫一種平臺無關的 CMakeList.txt 文件來定制整個編譯流程抬旺,然后再根據(jù)目標用戶的平臺進一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程祥楣。從而做到“Write once, run everywhere”开财。

實踐

創(chuàng)建NDK項目

? 前提:確認當前的NDK環(huán)境是否正常汉柒,AS版本是否支持創(chuàng)建NDK項目(我的AS版本是3.2.1)

  1. 新建項目工程
Snip20190302_3.png

如上圖所示,當創(chuàng)建項目時责鳍,會出現(xiàn)<1><2>兩個選項碾褂,因為要做NDK開發(fā),所以<1>需要進行勾選處理历葛,然后點擊Next按鈕

Snip20190302_5.png

單擊完Next按鈕之后就會出現(xiàn)如上界面正塌,勾選相應選項,并單擊Finish按鈕

C++ Standard
指定編譯庫的環(huán)境恤溶,其中Toolchain Default使用的是默認的CMake環(huán)境乓诽;C++ 11也就是C++環(huán)境。兩種環(huán)境都可以編庫

Exceptions Support
如果選中復選框咒程,則表示當前項目支持C++異常處理鸠天,如果支持,在項目Module級別的build.gradle文件中會增加一個標識 -fexceptionscppFlags屬性中帐姻,并且在so庫構建時稠集,gradle會把該屬性值傳遞給CMake進行構建。

Runtime Type Information Support
同理饥瓷,選中復選框巍杈,項目支持RTTI,屬性cppFlags增加標識-frtti

Snip20190302_6.png

進入項目工程中扛伍,我們進入build.gradle查看一下筷畦,因為在上一步Exceptions Support選項進行了勾選,所以會出現(xiàn)如上圖所示的<1>中的內(nèi)容刺洒,同時鳖宾,項目工程中會自動幫我們創(chuàng)建CMakeLists.txt文件,并會在gradle文件中出現(xiàn)如上圖<2>所示內(nèi)容逆航,點擊CMakeList.txt文件

Snip20190302_7.png

AS在我們創(chuàng)建C++支持的項目時鼎文,會自動幫我們創(chuàng)建一個案例,生成一個叫native-lib動態(tài)庫因俐,關于CMake的命令行以及CMakelists文件的編輯拇惋,可以查看網(wǎng)上的教程

Snip20190302_8.png
Snip20190302_9.png

如上面兩張圖所示,這是系統(tǒng)自帶的一個案例抹剩,可以先運行一下撑帖,看看是不是能夠正常使用,當能正常使用后澳眷,那就可以把這個案例刪除了胡嘿,開始我們新的旅程

  1. 修改項目

    修改native庫的名稱,并修改CMakeLists文件配置

Snip20190304_1.png

創(chuàng)建loadLibrary的調(diào)用類

Snip20190304_2.png

創(chuàng)建JNI的接口實現(xiàn)文件

Snip20190304_3.png

Java調(diào)用C++方法

  1. 如下圖所示,在JNITest類中新建init的native方法


    Snip20190304_4.png
  2. 在對應的cpp文件中實現(xiàn)init方法钳踊,并對其做實現(xiàn)衷敌,如下圖所示


    Snip20190304_5.png

    Snip20190304_6.png

Java注冊C++回調(diào)接口

  1. 注冊接口

    Snip20190304_7.png

    Snip20190304_8.png

    實現(xiàn)接口,如下圖所示勿侯,使用showLog的方法

Snip20190304_9.png

Snip20190304_10.png

源碼

https://gitee.com/zac_tee/JNILearn

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市缴罗,隨后出現(xiàn)的幾起案子助琐,更是在濱河造成了極大的恐慌,老刑警劉巖面氓,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兵钮,死亡現(xiàn)場離奇詭異,居然都是意外死亡侧但,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門航罗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來禀横,“玉大人,你說我怎么就攤上這事粥血“爻” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵复亏,是天一觀的道長趾娃。 經(jīng)常有香客問我,道長缔御,這世上最難降的妖魔是什么抬闷? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮耕突,結果婚禮上笤成,老公的妹妹穿的比我還像新娘。我一直安慰自己眷茁,他們只是感情好炕泳,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著上祈,像睡著了一般培遵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上登刺,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天籽腕,我揣著相機與錄音,去河邊找鬼纸俭。 笑死节仿,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的掉蔬。 我是一名探鬼主播廊宪,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼矾瘾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了箭启?” 一聲冷哼從身側響起壕翩,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤新博,失蹤者是張志新(化名)和其女友劉穎速蕊,沒想到半個月后律适,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拯勉,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡柄错,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年略水,在試婚紗的時候發(fā)現(xiàn)自己被綠了锅纺。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片毅人。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡托启,死狀恐怖宅倒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情屯耸,我是刑警寧澤拐迁,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站疗绣,受9級特大地震影響线召,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜多矮,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一缓淹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧塔逃,春花似錦割卖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至淹仑,卻和暖如春丙挽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背匀借。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工颜阐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吓肋。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓凳怨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子肤舞,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

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