NDK簡單的使用

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

AndroidStudio 2.1.2
SDK 23.0.3
NDK 12.1.2977051

2.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。


image.png

我的sdk路徑為:/Users/serenitynanian/Library/Android/sdk
2.1 添加系統(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=/Users/serenitynanian/Library/Android/sdk/ndk-bundle考杉,由于ndk版本和IDE的版本可能存在不一致性,所以編譯時會檢查ndk的過時性舰始,這個時候如果報警了崇棠,可以在gradle.properties文件下添加一行:android.useDeprecatedNdk=true.到此,NDK的安裝和配置就完成.

3.Native方法的創(chuàng)建

3.1 在java目錄下的包中創(chuàng)建一個Hello類丸卷,類里面創(chuàng)建一個native方法枕稀,如下:

  /**
     * 由于當前版本的as暫時不支持c文件的連接和根據(jù)提示自動創(chuàng)建c方法,只有手動添加
     * 添加規(guī)則如下:
     * 來到terminal終端上谜嫉,在app/java/目錄下 輸入 javah -d ../jni com.zcbl.client.zcblsdk.Hello 按下Enter
     * 那么會在java的上級目錄也就是main目錄下創(chuàng)建一個jni的文件夾萎坷,在文件夾下生成一個com_zcbl_client_zcblsdk_Hello.h
     * 的頭文件;
     * 上面的com.zcbl.client.zcblsdk.Hello是native類中的全路徑
     * @return
     */
    public static native String sayHello();
屏幕快照 2018-02-01 下午5.43.46.png

3.2 在jni目錄里生成的com_zcbl_client_zcblsdk_Hello.h內(nèi)容如下:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_zcbl_client_zcblsdk_Hello */

#ifndef _Included_com_zcbl_client_zcblsdk_Hello
#define _Included_com_zcbl_client_zcblsdk_Hello
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_zcbl_client_zcblsdk_Hello
 * Method:    sayHello
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_zcbl_client_zcblsdk_Hello_sayHello
  (JNIEnv *, jclass);

#ifdef __cplusplus
}
#endif
#endif

3.3 com_zcbl_client_zcblsdk_Hello的實現(xiàn)

#include "com_zcbl_client_zcblsdk_Hello.h"


JNIEXPORT jstring JNICALL Java_com_zcbl_client_zcblsdk_Hello_sayHello
  (JNIEnv * env, jclass jclass1){

    return env->NewStringUTF(" from native c");
  }

jstring:返回值類型沐兰;
Java_com_zcbl_client_zcblsdk_Hello_sayHello是實現(xiàn)的方法名食铐,固定格式,Java_所要實現(xiàn)的方法名所在java類僧鲁,將類的包名中的.用下劃線替代_方法名(JNI環(huán)境變量 env,JNI環(huán)境對象 jobj);

3.4 Gradle配置,在app/build.gradle中加入你ndk 的moduleName象泵,也就是生成.so的名字寞秃;

defaultConfig {
        ndk{
            //生成.so的名字 這個名字與native方法名沒有關系
            moduleName "hello"
        }
    }

如上配置,然后編譯偶惠,就會在app/build/intermediates/ndk/debug/lib目錄下生成對應abi的.so文件

四春寿、在類中使用native方法

4.1 首先需要在native類中添加一個靜態(tài)代碼塊,如下:

package com.zcbl.client.zcblsdk;

/**
 * Created by serenitynanian on 2018/1/20.
 */

public class Hello {

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

    /**
     * 由于當前版本的as暫時不支持c文件的連接和根據(jù)提示自動創(chuàng)建c方法忽孽,只有手動添加
     * 添加規(guī)則如下:
     * 來到terminal終端上绑改,在app/java/目錄下 輸入 javah -d ../jni com.zcbl.client.zcblsdk.Hello 按下Enter
     * 那么會在java的上級目錄也就是main目錄下創(chuàng)建一個jni的文件夾谢床,在文件夾下生成一個com_zcbl_client_zcblsdk_Hello.h
     * 的頭文件;或者手動創(chuàng)建厘线;
     * 上面的com.zcbl.client.zcblsdk.Hello是native類中的全路徑
     * @return
     */
    public static native String sayHello();
}

4.2 在java方法中調(diào)用识腿,如下:

Hello.sayHello()

上面就會調(diào)用native的方法;

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末造壮,一起剝皮案震驚了整個濱河市渡讼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌耳璧,老刑警劉巖成箫,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異旨枯,居然都是意外死亡蹬昌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門攀隔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來皂贩,“玉大人,你說我怎么就攤上這事竞慢∠茸希” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵筹煮,是天一觀的道長遮精。 經(jīng)常有香客問我,道長败潦,這世上最難降的妖魔是什么本冲? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮劫扒,結果婚禮上檬洞,老公的妹妹穿的比我還像新娘。我一直安慰自己沟饥,他們只是感情好添怔,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著贤旷,像睡著了一般广料。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上幼驶,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天艾杏,我揣著相機與錄音,去河邊找鬼盅藻。 笑死购桑,一個胖子當著我的面吹牛畅铭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播勃蜘,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼硕噩,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了元旬?” 一聲冷哼從身側響起榴徐,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎匀归,沒想到半個月后坑资,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡穆端,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年袱贮,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片体啰。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡攒巍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出荒勇,到底是詐尸還是另有隱情柒莉,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布沽翔,位于F島的核電站兢孝,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏仅偎。R本人自食惡果不足惜跨蟹,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望橘沥。 院中可真熱鬧窗轩,春花似錦、人聲如沸座咆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽介陶。三九已至腹备,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間斤蔓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工镀岛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留弦牡,地道東北人友驮。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像驾锰,于是被迫代替她去往敵國和親卸留。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

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

  • 生活中頸椎病出現(xiàn)在患者們的身上以后,患者都會感覺到頭暈赏酥,惡心的癥狀喳整,這類疾病在發(fā)現(xiàn)的時候,許多的患者會把它和肩周炎...
    華氏秘方閱讀 224評論 0 0
  • 簡書-知識的天堂 一盞燈裸扶, 一片昏黃框都; 一簡書, 一杯淡茶呵晨。 守著那一份淡定魏保, 品讀屬于自己的寂寞。 保持淡定摸屠, ...
    留v白閱讀 181評論 0 0