走進AndroidStudio下的NDK(一)

本文已授權微信公眾號:鴻洋(hongyangAndroid)在微信公眾號平臺原創(chuàng)首發(fā)。

這一篇文章主要介紹在AndroidStudio環(huán)境如何搭建JNI開發(fā)環(huán)境勋锤,并通過一個helloword的方式了解進行JNI開發(fā)的步驟楔壤。

開發(fā)編譯環(huán)境

  • AndroidStudio 2.1.2
  • SDK 23.0.3
  • NDK 12.1.2977051

NDK安裝與配置

  • 首先創(chuàng)建一個Android項目工程隆箩,F(xiàn)ile-->New-->New Project伤锚,一路下一步就好,最后finish創(chuàng)建完成項目.
  • 打開Project Structure舆乔,默認Android NDK location是沒有的,這時候如果已經(jīng)下載有了NDK剂公,那你就可以直接選擇下載好的NDK路徑設置到輸入框希俩,否則點擊download進行下載,下載完成后默認安裝在sdk根目錄纲辽,命名為ndk-bundle颜武。 // 我的SDK地址為 D:\android-sdk.
Project Structure
  • 添加系統(tǒng)環(huán)境變量,新建變量名ANDROID_NDK_HOME拖吼,對應變量值為ndk根目錄地址 鳞上,如D:\android-sdk\ndk-bundle,然后將ANDROID_NDK_HOME添加到Path中去(%ANDROID_NDK_HOME%;),確定OK.
  • 至此吊档,會在項目的local.properties文件下添加ndk的目錄地址篙议,如果沒有自動添加,可以收到加上一行:ndk.dir=D\:\\android-sdk\\ndk-bundle,由于ndk版本和IDE的版本可能存在不一致性鬼贱,所以編譯時會檢查ndk的過時性移怯,這個時候如果報警了,可以在gradle.properties文件下添加一行:android.useDeprecatedNdk=true.到此这难,NDK的安裝和配置就完成.

HelloWord

  • 在main下創(chuàng)建jni目錄舟误,該目錄用于存放jni文件,主要包含c文件以及頭文件等等雁佳。
  • 在MainActivity中創(chuàng)建native方法脐帝,遺憾的是當前版本AndroidStudio暫不支持c文件的連接和很好的根據(jù)提示自動創(chuàng)建c方法,所以只好手動添加模板糖权。
Hint for Create Method
  • 在jni目錄下創(chuàng)建c文件hello.c堵腹,并創(chuàng)建MainActivity中的sayHello方法:
c method impl
  • 首先,添加頭文件星澳,類似java中的導包疚顷,這里首先必加的是jni.h,這是java與c/c++之間語言轉(zhuǎn)換的核心文件禁偎,具體可以查看ndk目錄下D:\android-sdk\ndk-bundle\platforms\android-23\arch-arm\usr\include\jni.h腿堤,另一個這里需要處理字符串,所以還需要包含string.h的頭文件如暖,同樣可以在上面目錄include中找到.
  • 然后笆檀,添加java中native方法的實現(xiàn)。jstring:返回值類型盒至,Java_com_lzj_demojni_MainActivity_sayHello(JNIEnv *env, jobject jobj):實現(xiàn)的方法名酗洒,固定格式,Java_所要實現(xiàn)的方法名所在java類用下劃線替代點的引用地址_方法名(JNI環(huán)境變量 env,JNI環(huán)境對象 jobj)枷遂;其中env和jobj方法中可能用不到樱衷,但也必須申明,源碼中是這樣說明的酒唉,大概作用就是env作為了一個JNINativeInterface指針矩桂,是java與c/c++之間的一個功能環(huán)境變量中間橋梁。
JNIEnv
  • 具體實現(xiàn)痪伦,(*env)->NewStringUTF(env, "Hello from JNI !"); 該行代碼返回字符串Hello from JNI !侄榴,NewStringUTF方法可以查閱jni.h,可以看到具體的申明如下:
NewStringUTF申明

NewStringUTF具體申明
  • Gradle配置网沾,在build.gradle中加入你ndk moduleName
ndk moduleName

這里的moduleName是在代碼中l(wèi)oadLibrary所填寫的名稱癞蚕,也是生成so包的lib后面的名稱,與jni目錄下的c文件名稱沒有關系绅这,

  • 代碼中調(diào)用涣达,首先需要在靜態(tài)代碼塊中l(wèi)oadLibrary,然后可以調(diào)用申明的native方法.
use in code

結束語

到這里,就完成了JNI編程的HelloWord度苔,使用項目內(nèi)部文件的方式進行JNI編程的基本步驟大致就是這樣匆篓,下一篇文章將介紹如何編譯成so包以及編譯過程中的一些配置和常見的坑。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末寇窑,一起剝皮案震驚了整個濱河市鸦概,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌甩骏,老刑警劉巖窗市,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異饮笛,居然都是意外死亡咨察,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門福青,熙熙樓的掌柜王于貴愁眉苦臉地迎上來摄狱,“玉大人,你說我怎么就攤上這事无午∶揭郏” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵宪迟,是天一觀的道長酣衷。 經(jīng)常有香客問我,道長次泽,這世上最難降的妖魔是什么穿仪? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮箕憾,結果婚禮上牡借,老公的妹妹穿的比我還像新娘拳昌。我一直安慰自己袭异,他們只是感情好,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布炬藤。 她就那樣靜靜地躺著御铃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沈矿。 梳的紋絲不亂的頭發(fā)上上真,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機與錄音羹膳,去河邊找鬼睡互。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的就珠。 我是一名探鬼主播寇壳,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼妻怎!你這毒婦竟也來了壳炎?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤逼侦,失蹤者是張志新(化名)和其女友劉穎匿辩,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體榛丢,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡铲球,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了晰赞。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片睬辐。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖宾肺,靈堂內(nèi)的尸體忽然破棺而出溯饵,到底是詐尸還是另有隱情,我是刑警寧澤锨用,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布丰刊,位于F島的核電站,受9級特大地震影響增拥,放射性物質(zhì)發(fā)生泄漏啄巧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一掌栅、第九天 我趴在偏房一處隱蔽的房頂上張望秩仆。 院中可真熱鬧,春花似錦猾封、人聲如沸澄耍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽齐莲。三九已至,卻和暖如春磷箕,著一層夾襖步出監(jiān)牢的瞬間选酗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工岳枷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留芒填,地道東北人呜叫。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像殿衰,于是被迫代替她去往敵國和親怀偷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,509評論 25 707
  • 一播玖、NDK產(chǎn)生的背景 Android平臺從誕生起椎工,就已經(jīng)支持C、C++開發(fā)蜀踏。眾所周知维蒙,Android的SDK基于J...
    Ten_Minutes閱讀 3,479評論 1 27
  • 前段時間由于做比賽的事,一直都沒時間寫博客果覆,現(xiàn)在終于可以補上一篇了颅痊,一直想學習一點NDK開發(fā)的知識,但是遲遲沒有動...
    冰鑒IT閱讀 1,743評論 7 18
  • Android跨進程通信IPC整體內(nèi)容如下 1局待、Android跨進程通信IPC之1——Linux基礎2斑响、Andro...
    隔壁老李頭閱讀 11,477評論 1 46
  • #不是錯過是想念# 那天聽eason的陪你度過漫長歲月,失眠到半夜钳榨,哈哈舰罚,可是最后我還是好慫,不敢聯(lián)系你薛耻。從大一到...
    Noahsi閱讀 156評論 0 0