Android NDK開發(fā)入門
神秘的Android NDK開發(fā)往往眾多程序員感到興奮,但又不知它為何物,由于近期開發(fā)應(yīng)用時(shí),為了是開發(fā)的.apk文件不被他人解讀(反編譯),查閱了很多資料,其中有提到使用NDK開發(fā),懷著好奇的心理,通過在線視頻教育網(wǎng)站,我初步了解了NDK的神秘面紗,好東西自然要分享,接下來我們就一起來認(rèn)識(shí)一下Android NDK開發(fā)?!?/p>
一、NDK產(chǎn)生的背景
Android平臺(tái)從誕生起,就已經(jīng)支持C、C++開發(fā)。眾所周知,Android的SDK基于Java實(shí)現(xiàn),這意味著基于Android SDK進(jìn)行開發(fā)的第三方應(yīng)用都必須使用Java語言。但這并不等同于“第三方應(yīng)用只能使用Java”。在Android SDK首次發(fā)布時(shí),Google就宣稱其虛擬機(jī)Dalvik支持JNI編程方式,也就是第三方應(yīng)用完全可以通過JNI調(diào)用自己的C動(dòng)態(tài)庫,即在Android平臺(tái)上,“Java+C”的編程方式是一直都可以實(shí)現(xiàn)的。
不過,Google也表示,使用原生SDK編程相比Dalvik虛擬機(jī)也有一些劣勢(shì),Android SDK文檔里,找不到任何JNI方面的幫助。即使第三方應(yīng)用開發(fā)者使用JNI完成了自己的C動(dòng)態(tài)鏈接庫(so)開發(fā),但是so如何和應(yīng)用程序一起打包成apk并發(fā)布?這里面也存在技術(shù)障礙。比如程序更加復(fù)雜,兼容性難以保障,無法訪問Framework API,Debug難度更大等。開發(fā)者需要自行斟酌使用。
于是NDK就應(yīng)運(yùn)而生了。NDK全稱是Native Development Kit。
NDK的發(fā)布,使“Java+C”的開發(fā)方式終于轉(zhuǎn)正,成為官方支持的開發(fā)方式。NDK將是Android平臺(tái)支持C開發(fā)的開端。
二、為什么使用NDK
1.代碼的保護(hù)。由于apk的java層代碼很容易被反編譯,而C/C++庫反匯難度較大。
2.可以方便地使用現(xiàn)存的開源庫。大部分現(xiàn)存的開源庫都是用C/C++代碼編寫的。
3.提高程序的執(zhí)行效率。將要求高性能的應(yīng)用邏輯使用C開發(fā),從而提高應(yīng)用程序的執(zhí)行效率。
4.便于移植。用C/C++寫得庫可以方便在其他的嵌入式平臺(tái)上再次使用。
三、NDK簡(jiǎn)介
1.NDK是一系列工具的集合
NDK提供了一系列的工具,幫助開發(fā)者快速開發(fā)C(或C++)的動(dòng)態(tài)庫,并能自動(dòng)將so和java應(yīng)用一起打包成apk。這些工具對(duì)開發(fā)者的幫助是巨大的。
NDK集成了交叉編譯器,并提供了相應(yīng)的mk文件隔離CPU、平臺(tái)、ABI等差異,開發(fā)人員只需要簡(jiǎn)單修改mk文件(指出“哪些文件需要編譯”、“編譯特性要求”等),就可以創(chuàng)建出so。
NDK可以自動(dòng)地將so和Java應(yīng)用一起打包,極大地減輕了開發(fā)人員的打包工作。
2.NDK提供了一份穩(wěn)定、功能有限的API頭文件聲明
Google明確聲明該API是穩(wěn)定的,在后續(xù)所有版本中都穩(wěn)定支持當(dāng)前發(fā)布的API。從該版本的NDK中看出,這些API支持的功能非常有限,包含有:C標(biāo)準(zhǔn)庫(libc)、標(biāo)準(zhǔn)數(shù)學(xué)庫(libm)、壓縮庫(libz)、Log庫(liblog)。
四、NDK開發(fā)環(huán)境的搭建
1.下載安裝Android NDK
地址:http://developer.android.com/sdk/ndk/index.html
2、安裝DNK
網(wǎng)上流傳很多關(guān)于Linux環(huán)境搭建DNK開發(fā)的方法,不過今天要為大家說明一點(diǎn),Google經(jīng)過這些年的努力,現(xiàn)在NDK的安裝已經(jīng)非常簡(jiǎn)單,而且支持眾多平臺(tái),今天我們就以win平臺(tái)來為大家介紹如何配置開發(fā)環(huán)境與設(shè)計(jì)開發(fā)DNK程序。首先是安裝,上面提供的下載地址是官網(wǎng)地址,大家可以根據(jù)自己的需求選擇下載,不過由于在國(guó)內(nèi)限制訪問國(guó)外網(wǎng)站,所以下載的話必須FQ,F(xiàn)Q對(duì)于一些程序員來說又是一件難事,這里我為大家提供一個(gè)下載地址:android-ndk-r9
下載好之后,安裝DNK非常簡(jiǎn)單,我們將下載的.zip文件解壓,然后將文件拷貝到我們的任意一個(gè)磁盤中即可。
3.配置 NDK 環(huán)境變量
學(xué)過JAVA的小童鞋,對(duì)于配置環(huán)境變量一定不陌生,這里我就簡(jiǎn)單介紹一下如何配置DNK的開發(fā)環(huán)境,右鍵單擊我的電腦-->屬性-->高級(jí)系統(tǒng)設(shè)置-->高級(jí)-->環(huán)境變量
在打開的環(huán)境變量,系統(tǒng)變量中找到Path,雙擊,在最后將我們DNK安裝目錄添加上去。
到這里我們的win環(huán)境配置Android NDK開發(fā)環(huán)境已經(jīng)完成,最后我們通過命令行驗(yàn)證一下我們的配置:點(diǎn)擊開始-->輸入cmd回車-->輸入ndk-build回車,如果打印出信息表示我們的配置完成。
五、運(yùn)行NDK提供的事例demo
運(yùn)行事例demo之前我們需要保證我們的Android開發(fā)環(huán)境已經(jīng)配置好,對(duì)于Android開發(fā)環(huán)境的配置,我就不再贅述,大家如果有疑問可以單獨(dú)留言討論。下面我們開始導(dǎo)入事例demo,打開eclipse Android開發(fā)環(huán)境,然后右鍵單擊空白區(qū)域,選擇Import-->Android導(dǎo)入:
導(dǎo)入工程后,我們先來看一下目錄結(jié)構(gòu):
jni目錄下的文件就是我們的.c文件,obj目錄下的.so文件就是我們的ndk編譯后的文件,也就是我們庫文件。當(dāng)然剛導(dǎo)入時(shí)工程中是沒有.so文件的,需要我們編譯生成,生成的方法:開始-->輸入cmd回車-->cd 我們的工程目錄回車,詳見下圖操作分解:
到這里我們事例demo就算完成了,下面我們就可以允許測(cè)試了。
第一個(gè)NDK程序:HelloWord!
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!
相關(guān)文章
Android ProgressBar進(jìn)度條使用詳解
ProgressBar進(jìn)度條,分為旋轉(zhuǎn)進(jìn)度條和水平進(jìn)度條,進(jìn)度條的樣式根據(jù)需要自定義,這篇文章主要介紹了Android ProgressBar進(jìn)度條使用方法,感興趣的小伙伴們可以參考一下2016-02-02全面解析Android的開源圖片框架Universal-Image-Loader
這篇文章主要介紹了Android的開源圖片框架Universal-Image-Loader,Universal-Image-Loader在GitHub上開源,其提供的圖片加載功能令人印象相當(dāng)深刻,需要的朋友可以參考下2016-04-04非常詳細(xì)的android so庫逆向調(diào)試教程
這篇文章主要給大家介紹了關(guān)于android so庫逆向調(diào)試的相關(guān)資料,文中通過示例代碼以及圖文介紹的非常詳細(xì),對(duì)各位Android開發(fā)者具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2021-08-08ListView點(diǎn)擊Item展開菜單實(shí)現(xiàn)代碼詳解
這篇文章主要介紹了ListView點(diǎn)擊Item展開菜單實(shí)現(xiàn)代碼詳解的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06Android開發(fā)實(shí)現(xiàn)根據(jù)包名判斷App運(yùn)行狀態(tài)的方法
這篇文章主要介紹了Android開發(fā)實(shí)現(xiàn)根據(jù)包名判斷App運(yùn)行狀態(tài)的方法,結(jié)合實(shí)例形式分析了Android結(jié)合包名判斷app運(yùn)行狀態(tài)的方法,需要的朋友可以參考下2017-11-11android語音即時(shí)通訊之錄音、播放功能實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了android語音即時(shí)通訊之錄音、播放功能的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07android判斷相機(jī)圖片朝向的簡(jiǎn)單方法
下面小編就為大家?guī)硪黄猘ndroid判斷相機(jī)圖片朝向的簡(jiǎn)單方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-03-03在ubuntu下編譯ijkplayer-android的方法
下面小編就為大家分享一篇在ubuntu下編譯ijkplayer-android的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-01-01Android 自定義View實(shí)現(xiàn)抽屜效果
這篇文章主要介紹了Android 自定義View實(shí)現(xiàn)抽屜效果的相關(guān)資料,需要的朋友可以參考下2017-05-05