NDK開發知識點

NDK開發知識點

1、NDK介紹

  • 對于大部分應用開發者來說,可能都不怎么的接觸到NDK,但是如果涉及到了硬件的操作,就不得不去使用NDK了,使用NDK還有一個原因,就是c/c++的效率高,因此我們把一些耗時的操作放到NDK中實現
  • NDK 簡稱 Native Develpoment Kit,他是一個工具集,集成了Android的交叉編譯環境,并提供了一套比較方便的Makefile,可以幫助開發者快速開發C或者C++的動態庫,并自動的將so和java程序打包成apk,在Android上運行

2、配置NDK開發環境

3、JNI概述

  • JNI Java Native Interface的縮寫,中文為JAVA本地調用,它允許Java代碼和其他語言寫的代碼進行交互

4、JNI程序實現步驟

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

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

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

  • 用AS自帶的Terminal進行處理

    • 進入到這個項目中,到這個文件下
    • ` javah -jni com.example.firstndk.MainActivity
    • 這里需要注意,有可能編譯的時候出現編碼GBK的不可映射字符,這里用記事本打開這個MainActivity.java文件,保存選擇文件類型是ANSI的編碼,在此運行即可解決
      `
  • 3、然后使用javah + java類名生成擴展名為h的頭文件

  • 4、使用c/c++實現本地方法

    • 在jni目錄下創建這個方法,然后自己去寫
    • `#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++編寫的文件生成動態鏈接庫

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

    *首先用cmd命令行,切換到ndk目錄(比如要切換E盤,那么直接E:然后enter,切換到目錄后輸入ndk-build按下enter進行編譯就行)
  • 在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 "模塊名"(就是你要調用的c代碼,我這里是hello,那么我就寫hello)}
    • 3、在gradle.properties里最下面加入一句android.useDeprecatedNdk=true
    • 4 、在MainActivity.java里面加入一句靜態語句塊` /**
    • 不要忘了在這里靜態的加載一下
      */
      static {
      System.loadLibrary("hello"); //比如so庫是libhello.so 去掉lib
      }`

最后運行結果:


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,182評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,489評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,290評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,776評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,510評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,866評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,860評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,036評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,585評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,331評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,536評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,058評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,754評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,154評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,469評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,273評論 3 399
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,505評論 2 379

推薦閱讀更多精彩內容