在我們?nèi)粘5腁pp開發(fā)中都是使用基本的SDK開發(fā)衰粹,那么什么時候使用NDK開發(fā)呢愈腾?NDK開發(fā)用什么用呢?
要了解NDK堕虹,首先需知道Jni卧晓,那么Jni是什么呢?Jni是Java和C溝通的入口赴捞,啥意思呢逼裆?我們使用Java語言進(jìn)行Android開發(fā),眾所周知Android的安全性一直是一個熱議的話題,為了防止被反編譯赦政,我們需要用C/C++編寫重要核心的內(nèi)容增大系統(tǒng)的安全胜宇。另一方面Android的底層一些驅(qū)動耀怜,硬件,音視頻桐愉,圖片處理财破,等都是用C實現(xiàn)的,而且使用C可以極大的提高程序效率从诲,所以在開發(fā)中可能就需要Java和C進(jìn)行交互左痢,Jni就是干這個的。NDK提供了一系列的工具系洛,可以幫助我們生成C/C++的庫俊性,NDK+Jni就實現(xiàn)了Java和C溝通的橋梁。
下面來實現(xiàn)我們的第一個NDK程序:
1.新建Android項目,命名為NDKHelloWord
2.新建一個訪問本地C/C++方法的java類
3.定位到MyJni目錄下描扯,執(zhí)行javac MyJni.java命令定页,生成MyJni類的.Class文件
編譯完成后會在ndkhelloword目錄下生成MyJni.class文件
4.切換到com的上層目錄,執(zhí)行javah -jni com.voyagesun.ndkhelloword.MyJni命令绽诚,使用javah命令生成.h文件典徊。
javah命令主要用于在JNI開發(fā)的時,把java代碼聲明的JNI方法轉(zhuǎn)化成C\C++頭文件憔购,以便進(jìn)行JNI的C\C++端程序的開發(fā)宫峦。
此時便在java目錄下生成h文件,為我們進(jìn)行Jni開發(fā)的頭文件
5.main下右鍵按鈕new -> Foler -> JniFolder,新建jni包
6.jni包下new ->C/C++ SourceFile,出來彈層玫鸟,起個文件名
7.拷貝com_voyagesun_ndkhelloword_MyJni.h頭文件下的所有內(nèi)容至myc.c, 并修改方法返回值
8.配置build.gradle
ndk {
moduleName "FirstJniLibrary" //生成的so庫名稱
? ? abiFilters"armeabi","armeabi-v7a","x86" //生成的不同cpu
}
配置gradle.properties,新增:android.useDeprecatedNdk=true
好咧,所有的配置已完成犀勒,接下來就是見證奇跡的時刻:
Build ->Rebuild Project項目屎飘,成功后會在build-intermediates-ndk-debug-lib下生成我們需要的so庫
這就是我們需要的So庫,拷貝So庫至libs目錄下贾费,并在Activity中調(diào)用測試钦购!
至此,第一個NDk項目運(yùn)行完成褂萧!