Android JNI使用(Android Studio)

java native interface (JNI)學習
java和C/C++各有優(yōu)缺點,有時用C/C++實現(xiàn)更好,所以需要調(diào)用native方法
首先下載好NDK
NDK下載
下面步驟:
1:先創(chuàng)建一個類,其中有native方法
(System.loadLibrary("JniTest");JniTest:引入的庫名)


public class MyJNI {

    public static native String getString();

    static {
        System.loadLibrary("JniTest");
    }

}

2,使用javac生成.class文件
根據(jù)你的目錄和包名執(zhí)行下面命令
D:\develop\JniTest>cd D:\develop\JniTest\app\src\main\java\han\jnitest\

D:\develop\JniTest\app\src\main\java\han\jnitest>javac MyJNI.java

如圖你會生成一個class文件

3,使用javah生成.h文件
執(zhí)行(javah -jni 你的包名加類名)
javah -jni han.jnitest.MyJNI

切換到java目錄(我也不知道為啥,不切換就找不到文件)

所以正確如圖

這個時候就生成了.h文件,我的就在java目錄下

/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class han_jnitest_MyJNI */
#ifndef_Included_han_jnitest_MyJNI
#define_Included_han_jnitest_MyJNI
#ifdef__cplusplus
extern"C"{
#endif
/*
* Class:    han_jnitest_MyJNI
* Method:    getString
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_han_jnitest_MyJNI_getString
(JNIEnv *, jclass);
#ifdef__cplusplus
}
#endif
#endif

這個時候我們要對其修改

/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class han_jnitest_MyJNI */
#ifndef_Included_han_jnitest_MyJNI
#define_Included_han_jnitest_MyJNI
#ifdef__cplusplus
extern"C"{
#endif
/*
* Class:    han_jnitest_MyJNI
* Method:    getString
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_han_jnitest_MyJNI_getString
(JNIEnv *env, jclass jobj){
return(*env)->NewStringUTF(env,"JNI Test");
}
#ifdef__cplusplus
}
#endif
#endif

4,添加配置
main目錄下創(chuàng)建jni目錄
創(chuàng)建一個.c文件名字隨意(我的是JniTest.c)把han_jnitest_MyJNI.h修改后的內(nèi)容復制進來
再創(chuàng)建一個util.c空文件(沒有會報空,也不知道為啥,好像其他名字也行..)
gradle.properties文件配置

android.useDeprecatedNdk=true

local.properties文件配置ndk路徑(你自己的路徑)

ndk.dir=D\:\\sdk\\ndk\\android-ndk-r10b

build.gradle文件配置

ndk {
//JniTest生成的so名字
moduleName"JniTest"
abiFilters"armeabi","armeabi-v7a","x86"
}

一切都完成之后rebulid project一下

生成的so文件路徑XXXXX\JniTest\app\build\intermediates\ndk\debug\lib

main下創(chuàng)建一個jniLibs目錄 把生成的文件復制然后調(diào)用

效果如下

第一次使用簡書添加代碼怪怪的,
有什么疑惑或者不懂的 可在下面留言一起學習哈
如有錯誤也請指出留言謝謝

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末饰序,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌龄恋,老刑警劉巖饼疙,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡忱屑,警方通過查閱死者的電腦和手機波丰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門壳坪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人掰烟,你說我怎么就攤上這事爽蝴。” “怎么了纫骑?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵蝎亚,是天一觀的道長。 經(jīng)常有香客問我先馆,道長发框,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任煤墙,我火速辦了婚禮梅惯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘仿野。我一直安慰自己铣减,他們只是感情好,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布设预。 她就那樣靜靜地躺著徙歼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鳖枕。 梳的紋絲不亂的頭發(fā)上魄梯,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天,我揣著相機與錄音宾符,去河邊找鬼酿秸。 笑死,一個胖子當著我的面吹牛魏烫,可吹牛的內(nèi)容都是我干的辣苏。 我是一名探鬼主播肝箱,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼稀蟋!你這毒婦竟也來了煌张?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤退客,失蹤者是張志新(化名)和其女友劉穎骏融,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體萌狂,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡档玻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了茫藏。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片误趴。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖务傲,靈堂內(nèi)的尸體忽然破棺而出凉当,到底是詐尸還是另有隱情,我是刑警寧澤树灶,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布纤怒,位于F島的核電站糯而,受9級特大地震影響天通,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜熄驼,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一像寒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瓜贾,春花似錦诺祸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至龟劲,卻和暖如春胃夏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背昌跌。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工仰禀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蚕愤。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓答恶,卻偏偏與公主長得像饺蚊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子悬嗓,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

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