前言
NDK即Native Development Kit寞缝,是Google在Android開發(fā)中提供的用于快速創(chuàng)建native工程的一系列工具的集合顽悼,幫助開發(fā)者快速開發(fā)C/C++的動態(tài)庫,并自動將so和java應用一起打包成apk圆到,極大地減輕了開發(fā)人員的打包工作妻怎。
而我們經(jīng)常還會聽到JNI逛钻,那么JNI和NDK之間有什么區(qū)別呢?首先JNI即Java Native Interface雨女,是Java語言提供的一種Java和C/C++通信機制谚攒,Java可以通過JNI來調(diào)用本地的C/C++代碼,本地的C/C++可以通過JNI來調(diào)用Java代碼氛堕。
總得來說馏臭,JNI是Java語言提供的一種特性,是Java調(diào)用native的一種機制讼稚,可以說JNI和Android并沒有實質的關系括儒。而NDK是Google公司幫助Android開發(fā)者通過C/C++編寫應用的開發(fā)工具集合,包含了C/C++的頭文件乱灵、庫文件塑崖、說明文檔和示例代碼。
Android Studio CMake方式
Android Studio目前可以有兩種方式配置NDK的開發(fā)環(huán)境痛倚,個人將其分為傳統(tǒng)的配置方式和CMake方式
傳統(tǒng)的配置方式需要配置Android.mk规婆、Application.mk和gradle,這種方式復雜而且配置繁瑣蝉稳,在這里就不做贅述抒蚜。這里要著重強調(diào)的是CMake方式,Android Studio 2.2已經(jīng)對NDK開發(fā)做了很好的支持耘戚。下面介紹CMake方式:
首先創(chuàng)建工程嗡髓,在Android Studio中File->New->New Project,會出現(xiàn)下圖
這里我們需要注意的是將Include C++ support打上對勾收津,由于目前是最新的Android Studio(3.0)饿这,已經(jīng)很好的支持了Kotlin,所以下面有Include Kotlin support撞秋,最好勾上长捧,這樣可以方便的進行Kotlin語言的開發(fā)。至于警告吻贿,是因為我這張圖是為了展示給你們看串结,后來添加的,但是之前已經(jīng)有這個程序了,可不用管肌割。接下來就是Next->Next->Next->Next->Finish卧蜓。
點開項目目錄結構,可以看到Android Studio替我們多生成了三個文件夾把敞,分別是.externalNativeBuild弥奸、cpp和CMakeLists.txt。
.externalNativeBuild是系統(tǒng)自動生成的奋早,包含一些硬件信息其爵,可以不用管。
cpp文件中默認是有一個C++文件native-lib.cpp伸蚯,我們也可以自己手動添加C/C++文件摩渺,內(nèi)容需要自己編寫。下面是默認生成的剂邮,當然我們可以修改相應的代碼摇幻。
CMakeList.txt是CMake腳本配置的文件,配置的是關于庫的一些信息挥萌,需要自己配置绰姻。下面兩張圖就是默認生成的,我們需要注意的就是這里的native-lib需要和System.loadLibrary("native-lib")中的一致引瀑。首先需要說明的是#號是注釋的意思狂芋,相當于//。add_library:創(chuàng)建一個library憨栽,添加C/C++文件帜矾;find_library:表示依賴NDK中的庫,一般不需要手動去更改屑柔;target_link_libraries:表示將目標庫與NDK中的庫進行連接屡萤。如果有多個庫時,可以添加多個add_library和target_link_libraries掸宛。
再來看看gradle配置:
最后來看Java代碼:
這里需要注意的就是需要加上System.loadLibrary(...)去加載庫文件死陆,同時C/C++在Java中的聲明必須加上native關鍵字。
下載NDK和構建工具
依次選擇File -> Project Structure:
如果之前沒有下載過NDK唧瘾,會顯示download NDK措译,點擊就可以下載NDK,最終我的配置是這樣的:
依次選擇Tools -> Android -> SDK Manager -> SDK Tools:
依次選中CMake饰序、LLDB和NDK领虹。要編譯和調(diào)試本地代碼,需要這些組件菌羽。
NDK:讓你能在Android上面使用C/C++代碼的工具集掠械,提供了一系列的工具,幫助開發(fā)者快速開發(fā)C/C++ 注祖,極大地減輕了開發(fā)人員的打包工作猾蒂。
CMake:外部構建工具。如果你準備只使用ndk-build的話是晨,可以不使用它肚菠。
LLDB:Android Studio上面調(diào)試本地代碼的工具。
一鍵生成方法名
當以上配置都完成時罩缴,編寫一個Native方法蚊逢,直接Alt + Enter就可以生成對應的方法,這樣就可以在對應的C/C++文件中找到該函數(shù)的實現(xiàn)箫章。
展望
下一篇博客我將利用Android Studio從零開始編寫C/C++代碼烙荷,進行NDK開發(fā)。
Android NDK開發(fā)(二):Welcome to JNI
參考鏈接:http://blog.csdn.net/banketree/article/details/12167145