Android Studio NDK&Jni開發(fā)--MD5加密

簡介

Java Jni--Java Native Interface(Java本地接口),Jni是為了方便Java調(diào)用C瘦棋、C++等本地代碼所封裝的一層接口。

NDK--Android提供的一個(gè)工具集合趟妥,通過Ndk可以在Android中更加方便的通過JNI來訪問本地代碼脱柱,比如C、C++酸舍。

在開發(fā)之前需要配置的地方

● 下載NDK工具帅韧,地址:http://www.androiddevtools.cn/,下載完成之后配置啃勉。

● gradle.properties文件末尾添加 android.useDeprecatedNdk=true

● 在build.gradle文件的defaultConfig內(nèi)添加

? ? ? ? ?ndk {? ? ?

? ? ? ? ? ? ? moduleName "encryptMD5"http://生成的so名字

? ? ? ? ? ? ? ?abiFilters "armeabi","armeabi-v7a","x86"http://輸出指定三種abi體系結(jié)構(gòu)下的so庫

? ? ? ? ? }


JNI開發(fā)流程(windows環(huán)境忽舟,Android studio NDK工具)

1、聲明native方法

? ? ? ?創(chuàng)建一個(gè)類JniUtils淮阐,實(shí)現(xiàn)native方法(加密流程:傳入String型參數(shù)通過C的md5算法獲取加密后的值)叮阅,代碼如下:


public class JniUtils{

? ? ? ? ? ?public static native String encryptMD5(String str);

}

2、編譯Java源文件得到class文件泣特,再通過javah命令到處JNI的頭文件

? ? ? ?在Android Studio中直接Clean Project或者Rebuild Project就可以獲取class文件了浩姥,Clean Project完成后,就可以看到class文件了状您。


? ? ? 然后再打開Android Studio Terminal輸入指令:

? ? ? ? cd app/build/intermediates/classes/debug

? ? ? 然后再輸入指令:

? ? ? ? javah -jni com.panda.ndkdemo.JniUtils ? ?

這時(shí)再打開classes/debug目錄時(shí)勒叠,這里生成了一個(gè)com_panda_ndkdemo_JniUtils.h的頭文件:


extern "C" {

#endif

/*

* Class:? ? com_panda_ndkdemo_JniUtils

* Method:? ? getInfoMD5

* Signature: (Ljava/lang/String;)Ljava/lang/String;

*/

JNIEXPORT jstring JNICALL Java_com_panda_ndkdemo_JniUtils_encryptMD5

(JNIEnv *, jclass, jstring);

#ifdef __cplusplus

}

#endif

#endif


3兜挨、代碼說明:

函數(shù)名的格式規(guī)則 : ? Java_包名_類名_方法名

例如? JNIEXPORT jstring JNICALL Java_com_panda_ndkdemo_JniUtils_encryptMD5(JNIEnv *, jclass, jstring);

com_panda_ndkdemo——包名;

JniUtils——類名眯分;

encryptMD5——方法名拌汇;

jstring——encryptMD5方法的String類型的參數(shù);

JNIEnv*——表示一個(gè)指向JNI環(huán)境的指針弊决,通過它來訪問JNI提供的接口方法噪舀;

JNIEXPORT和JNICALL——JNI中所定義的宏,可以在jni.h這個(gè)頭文件中找到飘诗;

4与倡、實(shí)現(xiàn)JNI方法:

jni方法是指Java中聲明的native方法,在生成com_panda_ndkdemo_JniUtils.h頭文件后疚察,通過c或者c++來實(shí)現(xiàn)jni方法。

在src/main下新建文件夾jni,把生成的.h文件剪切到j(luò)ni文件夾下面去仇奶,新建一個(gè)c類隨便取一個(gè)名字貌嫡,添加代碼如下

#include "com_panda_ndkdemo_JniUtils.h"

#include <stdio.h>

* Class:? ? Java_com_panda_ndkdemo_JniUtils

* Method:? ? encryptMD5

* Signature: ()Ljava/lang/String;

*/JNIEXPORT? jstring? JNICALL Java_com_panda_ndkdemo_JniUtils_encryptMD5(JNIEnv *env, jobject obj){

? ? ? ?//這里省略掉MD5的一些算法調(diào)用代碼

? ? ? //具體的c語言的 MD5算法網(wǎng)上有很多 這里就不貼出咯O(∩_∩)O!

? ? ? return(*env)->NewStringUTF(env," ? c返回的值 ? ");

}


然后編譯再重新build項(xiàng)目该溯,再去app->intermediates-ndk-debug發(fā)現(xiàn)生成了三個(gè)文件夾岛抄,并且對(duì)應(yīng)了之前在build.gradle配置的abiFilters,里面生成了對(duì)應(yīng)的so包狈茉。

在JniUtils類添加如下代碼

static{? ? ??

? ? ? System.loadLibrary("encryptMD5");//必須和在build.gradle里面設(shè)置的so名字一致

}

然后在最后調(diào)用的地方直接JniUtils.encryptMD5("");就行了

ps:如果so給其他工程調(diào)用 那么調(diào)用encryptMD5方法的包名路徑和類名必須和so庫一致

Next:5夫椭、JNI的數(shù)據(jù)類型和類型簽名

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市氯庆,隨后出現(xiàn)的幾起案子蹭秋,更是在濱河造成了極大的恐慌,老刑警劉巖堤撵,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仁讨,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡实昨,警方通過查閱死者的電腦和手機(jī)洞豁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來荒给,“玉大人丈挟,你說我怎么就攤上這事≈镜纾” “怎么了曙咽?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長挑辆。 經(jīng)常有香客問我桐绒,道長夺脾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任茉继,我火速辦了婚禮咧叭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘烁竭。我一直安慰自己菲茬,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布派撕。 她就那樣靜靜地躺著婉弹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪终吼。 梳的紋絲不亂的頭發(fā)上镀赌,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音际跪,去河邊找鬼商佛。 笑死,一個(gè)胖子當(dāng)著我的面吹牛姆打,可吹牛的內(nèi)容都是我干的良姆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼幔戏,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼玛追!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起闲延,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤痊剖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后垒玲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體邢笙,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年侍匙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了氮惯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡想暗,死狀恐怖妇汗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情说莫,我是刑警寧澤杨箭,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站储狭,受9級(jí)特大地震影響互婿,放射性物質(zhì)發(fā)生泄漏捣郊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一慈参、第九天 我趴在偏房一處隱蔽的房頂上張望呛牲。 院中可真熱鬧,春花似錦驮配、人聲如沸娘扩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽琐旁。三九已至,卻和暖如春猜绣,著一層夾襖步出監(jiān)牢的瞬間灰殴,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來泰國打工掰邢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留牺陶,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓尸变,卻偏偏與公主長得像义图,于是被迫代替她去往敵國和親减俏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子召烂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

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

  • _ 聲明: 對(duì)原文格式以及內(nèi)容做了細(xì)微的修改和美化, 主要為了方便閱讀和理解 _ 一. 基礎(chǔ) Java Nativ...
    元亨利貞o閱讀 5,921評(píng)論 0 34
  • 一、NDK產(chǎn)生的背景 Android平臺(tái)從誕生起娃承,就已經(jīng)支持C奏夫、C++開發(fā)。眾所周知历筝,Android的SDK基于J...
    Ten_Minutes閱讀 3,507評(píng)論 1 27
  • 本人為初學(xué)者酗昼,文章寫得不好,如有錯(cuò)誤梳猪,請(qǐng)大力懟我 或者看這里 如何使用jni進(jìn)行開發(fā) 本文主要針對(duì)Android環(huán)...
    AlbertHumbert閱讀 4,665評(píng)論 2 12
  • 什么是JNI麻削? JNI 是java本地開發(fā)接口.JNI 是一個(gè)協(xié)議,這個(gè)協(xié)議用來溝通java代碼和外部的本地代碼(...
    a_tomcat閱讀 2,822評(píng)論 0 54
  • 注:原文地址 1. JNI 概念 1.1 概念 JNI 全稱 Java Native Interface,Java...
    cfanr閱讀 57,710評(píng)論 9 132