NDK開發(fā)知識點(diǎn)

NDK開發(fā)知識點(diǎn)

1乃坤、NDK介紹

  • 對于大部分應(yīng)用開發(fā)者來說,可能都不怎么的接觸到NDK火惊,但是如果涉及到了硬件的操作,就不得不去使用NDK了奔垦,使用NDK還有一個(gè)原因屹耐,就是c/c++的效率高,因此我們把一些耗時(shí)的操作放到NDK中實(shí)現(xiàn)
  • NDK 簡稱 Native Develpoment Kit椿猎,他是一個(gè)工具集惶岭,集成了Android的交叉編譯環(huán)境,并提供了一套比較方便的Makefile犯眠,可以幫助開發(fā)者快速開發(fā)C或者C++的動態(tài)庫按灶,并自動的將so和java程序打包成apk,在Android上運(yùn)行

2筐咧、配置NDK開發(fā)環(huán)境

3、JNI概述

  • JNI Java Native Interface的縮寫量蕊,中文為JAVA本地調(diào)用铺罢,它允許Java代碼和其他語言寫的代碼進(jìn)行交互

4、JNI程序?qū)崿F(xiàn)步驟

  • 1残炮、編寫帶有native聲明的方法的java類

  • private native int add(int num1, int num2);

  • 2韭赘、使用javac命令編譯所編寫的java類

  • 用AS自帶的Terminal進(jìn)行處理

    • 進(jìn)入到這個(gè)項(xiàng)目中,到這個(gè)文件下
    • ` javah -jni com.example.firstndk.MainActivity
    • 這里需要注意势就,有可能編譯的時(shí)候出現(xiàn)編碼GBK的不可映射字符泉瞻,這里用記事本打開這個(gè)MainActivity.java文件,保存選擇文件類型是ANSI的編碼苞冯,在此運(yùn)行即可解決
      `
  • 3瓦灶、然后使用javah + java類名生成擴(kuò)展名為h的頭文件

  • 4、使用c/c++實(shí)現(xiàn)本地方法

    • 在jni目錄下創(chuàng)建這個(gè)方法抱完,然后自己去寫
    • `#include "com_example_firstndk_MainActivity.h"
      JNIEXPORT jint JNICALL Java_com_example_firstndk_MainActivity_add
      (JNIEnv * env, jobject obj, jint num1, jint num2){

    return num1 + num2;
    }
    `

  • 5贼陶、將c/c++編寫的文件生成動態(tài)鏈接庫

    • 在jni目錄下創(chuàng)建Android.mk文件,寫入以下(后面的注釋要去掉)
      LOCAL_PATH := $(call my-dir) //指定編譯的路徑 include $(CLEAR_VARS) //每個(gè)新模塊的開始處巧娱,清理所有的LOCAL_XXX LOCAL_MODULE :=hello //定義了模塊的名稱 LOCAL_SRC_FILES :=hello.c //源代碼文件 include $(BUILD_SHARED_LIBRARY) //說明編譯的是共享庫及動態(tài)鏈接庫
  • 6碉怔、測試

    *首先用cmd命令行,切換到ndk目錄(比如要切換E盤禁添,那么直接E:然后enter撮胧,切換到目錄后輸入ndk-build按下enter進(jìn)行編譯就行)
  • 在Android Studio中要注意的:

    • 1、在local.properities文件中添加:ndk(ndk的路徑)ndk.dir=F\:\\xunlei\\android-ndk-r10e(如果在AS的Project Structure 中的SDK Location里面指定了NDK的目錄)這一步可以省略
    • 2老翘、在build.gradle文件有defaultConfig配置中添加:ndk{moduleName "模塊名"(就是你要調(diào)用的c代碼芹啥,我這里是hello锻离,那么我就寫hello)}
    • 3、在gradle.properties里最下面加入一句android.useDeprecatedNdk=true
    • 4 墓怀、在MainActivity.java里面加入一句靜態(tài)語句塊` /**
    • 不要忘了在這里靜態(tài)的加載一下
      */
      static {
      System.loadLibrary("hello"); //比如so庫是libhello.so 去掉lib
      }`

最后運(yùn)行結(jié)果:


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末汽纠,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子傀履,更是在濱河造成了極大的恐慌虱朵,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钓账,死亡現(xiàn)場離奇詭異碴犬,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)梆暮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門服协,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人啦粹,你說我怎么就攤上這事偿荷。” “怎么了卖陵?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵遭顶,是天一觀的道長张峰。 經(jīng)常有香客問我泪蔫,道長,這世上最難降的妖魔是什么喘批? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任撩荣,我火速辦了婚禮,結(jié)果婚禮上饶深,老公的妹妹穿的比我還像新娘餐曹。我一直安慰自己,他們只是感情好敌厘,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布台猴。 她就那樣靜靜地躺著,像睡著了一般俱两。 火紅的嫁衣襯著肌膚如雪饱狂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天宪彩,我揣著相機(jī)與錄音休讳,去河邊找鬼。 笑死尿孔,一個(gè)胖子當(dāng)著我的面吹牛俊柔,可吹牛的內(nèi)容都是我干的筹麸。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼雏婶,長吁一口氣:“原來是場噩夢啊……” “哼物赶!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起尚骄,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤块差,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后倔丈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體憨闰,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年需五,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鹉动。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宏邮,死狀恐怖泽示,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蜜氨,我是刑警寧澤械筛,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站飒炎,受9級特大地震影響埋哟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜郎汪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一赤赊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧煞赢,春花似錦抛计、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至凝危,卻和暖如春波俄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背媒抠。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工弟断, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人趴生。 一個(gè)月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓阀趴,卻偏偏與公主長得像昏翰,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子刘急,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

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