Android Studio JNI調用

https://developer.android.google.cn/ndk/guides/index.html
原生開發(fā)工具包 (NDK) 是一組可讓您在 Android 應用中利用 C 和 C++ 代碼的工具管闷。 可用以從您自己的源代碼構建辨图,或者利用現(xiàn)有的預構建庫。

NDK 不適用于大多數(shù)初學的 Android 編程者,對許多類型的 Android 應用沒什么價值挟伙。 因為它不可避免地會增加開發(fā)過程的復雜性老虫,所以通常不值得使用烫沙。 但如果您需要執(zhí)行以下操作镣隶,它可能很有用:

從設備獲取卓越性能以用于計算密集型應用,例如游戲或物理模擬六敬。
重復使用您自己或其他開發(fā)者的 C 或 C++ 庫碘赖。

下載地址:
https://developer.android.google.cn/ndk/downloads/index.html

編譯環(huán)境:

gradle 2.1

dependencies {
        classpath 'com.android.tools.build:gradle:2.1.0'
    }

NDK版本

android-ndk-r13b-windows-x86_64
谷歌中國下載

Android Studio 2.0版本

設置NDK目錄
File —> Project Structure —> SDK Location —> Android NDK location

環(huán)境配置

1,在項目根目錄下的gradle.properties文件里添加

android.useDeprecatedNdk=true

2外构,在項目根目錄下的local.properties文件里添加ndk的目錄

ndk.dir=D\:\\work\\android-ndk-r13b-windows-x86_64

3普泡,在項目app目錄下的build.gradle文件里添加如下片段

android {
    ...

    defaultConfig {
        ...
        
        ndk {
            moduleName "Sample" //模塊名稱,對應的動態(tài)鏈接庫名稱libSample
            ldLibs = ["log"] //在JNI打log 必須加上log,否則會報錯log函數(shù)未定義
        }

    }
}

編譯工程

1审编,創(chuàng)建一個類撼班,編寫本地方法,加載so庫

package com.starry.jni;

public class JNISample {
    
    static {
        System.loadLibrary("Sample");
    }

    public native String getString();
}

2垒酬,生成頭文件砰嘁,打開Android Studio Terminal窗口(左下角)件炉,輸入以下指令

cd  app/src/main/java  //進入到java目錄
javah -jni com.starry.jni.JNISample //生成 點h文件

3,新建jni目錄矮湘,右鍵工程下的app目錄 —> Folder —> JNI Folder —> New Android Component —> Finish斟冕,默認是會在app/src/main目錄下生成jni目錄

4,把第二步生成的com_starry_jni_JNISample.h文件拷貝至第三步生成的jni目錄下

5板祝,右鍵jni目錄宫静,New —> C/C++ Source File,新建與頭文件相同名稱的cpp文件com_starry_jni_JNISample.cpp券时,完整代碼如下

#include "com_starry_jni_JNISample.h"

JNIEXPORT jstring JNICALL Java_com_starry_jni_JNISample_getString (JNIEnv *env, jobject obj){

    return env -> NewStringUTF("我來自JNI");
}

6,在Activity里調用伏伯,代碼如下

...
JNISample jniSample = new JNISample();
String string = jniSample.getString();
...

7橘洞,重新編譯下工程或直接布署代碼到手機上,成功就會在app/build/intermediates/ndk/debug/lib目錄下生成相應的so庫文件

8说搅,示例代碼下載

注:
1炸枣,JNISample類里邊不能用中文件字符
2,我的NDK是從官網(wǎng)下載的弄唧,使用Android Studio提供的NDK死活編譯不過
3适肠,cpp文件和h文件名稱可以自定義,但是最好按照ndk生成的格式命名候引,方法命名必須按照生成的頭文件里的規(guī)范命名(Java_包名_類名_方法名稱)
4侯养,D:\work\android-ndk-r13b-windows-x86_64\platforms\android-22\arch-arm\usr\include目錄里包含了ndk開發(fā)所有使用到的頭文件,做jni開發(fā)可以查看jni.h頭文件里提供函數(shù)澄干。
5逛揩,點擊右上角Gradle —> 當前項目 —> app —> Tasks —> Build —> assembleRelease,打包完成麸俘,.so文件會自動拷貝到lib目錄下辩稽,不需要手動拷貝

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市从媚,隨后出現(xiàn)的幾起案子逞泄,更是在濱河造成了極大的恐慌,老刑警劉巖拜效,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件喷众,死亡現(xiàn)場離奇詭異,居然都是意外死亡拂檩,警方通過查閱死者的電腦和手機侮腹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來稻励,“玉大人父阻,你說我怎么就攤上這事愈涩。” “怎么了加矛?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵履婉,是天一觀的道長。 經(jīng)常有香客問我斟览,道長毁腿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任苛茂,我火速辦了婚禮已烤,結果婚禮上,老公的妹妹穿的比我還像新娘妓羊。我一直安慰自己胯究,他們只是感情好,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布躁绸。 她就那樣靜靜地躺著裕循,像睡著了一般。 火紅的嫁衣襯著肌膚如雪净刮。 梳的紋絲不亂的頭發(fā)上剥哑,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機與錄音淹父,去河邊找鬼株婴。 笑死,一個胖子當著我的面吹牛弹灭,可吹牛的內容都是我干的督暂。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼穷吮,長吁一口氣:“原來是場噩夢啊……” “哼逻翁!你這毒婦竟也來了?” 一聲冷哼從身側響起捡鱼,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤八回,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后驾诈,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缠诅,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年乍迄,在試婚紗的時候發(fā)現(xiàn)自己被綠了管引。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡闯两,死狀恐怖褥伴,靈堂內的尸體忽然破棺而出谅将,到底是詐尸還是另有隱情,我是刑警寧澤重慢,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布饥臂,位于F島的核電站,受9級特大地震影響似踱,放射性物質發(fā)生泄漏隅熙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一核芽、第九天 我趴在偏房一處隱蔽的房頂上張望囚戚。 院中可真熱鬧,春花似錦狞洋、人聲如沸弯淘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至假勿,卻和暖如春借嗽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背转培。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工恶导, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人浸须。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓惨寿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親删窒。 傳聞我的和親對象是個殘疾皇子裂垦,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內容