NDK全稱:Native Development Kit。
10年的龍山網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。網(wǎng)絡(luò)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整龍山建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。成都創(chuàng)新互聯(lián)從事“龍山網(wǎng)站設(shè)計”,“龍山網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。
1、NDK是一系列工具的集合。
* NDK提供了一系列的工具,幫助開發(fā)者快速開發(fā)C(或C++)的動態(tài)庫,并能自動將so和java應(yīng)用一起打包成apk。這些工具對開發(fā)者的幫助是巨大的。
* NDK集成了交叉編譯器,并提供了相應(yīng)的mk文件隔離平臺、CPU、API等差異,開發(fā)人員只需要簡單修改mk文件(指出“哪些文件需要編譯”、“編譯特性要求”等),就可以創(chuàng)建出so。
* NDK可以自動地將so和Java應(yīng)用一起打包,極大地減輕了開發(fā)人員的打包工作。
NDK是用來給安卓手機開發(fā)軟件用的,但是和SDK不同的是它用的是C語言,而SDK用的是Java語言。
NDK開發(fā)的軟件在安卓的環(huán)境里是直接運行的,一般只能在特定的CPU指令集的機器上運行,而且C語言可以直接和硬件對話,因此一般用它開給手機開發(fā)驅(qū)動或底層應(yīng)用;而SDK開發(fā)出的軟件在安卓上靠Dalvik虛擬機來運行,所以如果沒有特殊的需要或署專門針對某個硬件去開發(fā),那就一般用SDK
[img]android ndk的使用:
一、NDK是一系列工具的集合。
1、 NDK提供了一系列的工具,幫助開發(fā)者快速開發(fā)C(或C++)的動態(tài)庫,并能自動將so和java應(yīng)用一起打包成apk。這些工具對開發(fā)者的幫助是巨大的。
2、NDK集成了交叉編譯器,并提供了相應(yīng)的mk文件隔離平臺、CPU、API等差異,開發(fā)人員只需要簡單修改mk文件(指出“哪些文件需要編譯”、“編譯特性要求”等),就可以創(chuàng)建出so。
3、NDK可以自動地將so和Java應(yīng)用一起打包,極大地減輕了開發(fā)人員的打包工作。
二、NDK提供了一份穩(wěn)定、功能有限的API頭文件聲明。
Google明確聲明該API是穩(wěn)定的,在后續(xù)所有版本中都穩(wěn)定支持當(dāng)前發(fā)布的API。從該版本的NDK中看出,這些API支持的功能非常有限,包含有:C標(biāo)準庫(libc)、標(biāo)準數(shù)學(xué)庫(libm)、壓縮庫(libz)、Log庫(liblog)。
1,首先,來看看在hello-jni程序的代碼中做了什么(有關(guān)如何創(chuàng)建或?qū)牍こ蹋颂幝裕?,下面代碼中:在JNI_OnLoad()的函數(shù)中,即so加載時,調(diào)用willCrash()函數(shù),而在willCrash()函數(shù)中,std::string的這種賦值方法會產(chǎn)生一個空指針錯誤。這樣,在hello-jni程序加載時就會閃退。記一下這兩個行數(shù):在61行調(diào)用了willCrash()函數(shù);在69行發(fā)生了崩潰2看看發(fā)生崩潰(閃退)時系統(tǒng)打印的logcat日志:、只要細心的查看,再配合Google提供的工具,完全可以快速地準確定位出錯的代碼位置,這個工作我們稱之為“符號化”。需要注意的是,如果要對NDK錯誤進行符號化的工作,需要保留編譯過程中產(chǎn)生的包含符號表的so文件,這些文件一般保存在$PROJECT_PATH/obj/local/目錄下。3方法:ndk-stack這個命令行工具包含在NDK工具的安裝目錄,和ndk-build及其他常用的一些NDK命令放在一起,比如在我的電腦上,其位置是/android-ndk-r9d/ndk-stack。根據(jù)Google官方文檔,NDK從r6版本開始提供ndk-stack命令,如果你用的之前的版本,建議還是盡快升級至最新的版本。使用ndk–stack命令也有兩種方式實時分析日志在運行程序的同時,使用adb獲取logcat日志,并通過管道符輸出給ndk-stack,同時需要指定包含符號表的so文件位置;如果你的程序包含了多種CPU架構(gòu),在這里需求根據(jù)錯誤發(fā)生時的手機CPU類型,選擇不同的CPU架構(gòu)目錄,如:當(dāng)崩潰發(fā)生時,會得到如下的信息:重點看一下#03和#04,這兩行都是在我們自己生成的libhello-jni.so中的報錯信息,因此會發(fā)現(xiàn)如下關(guān)鍵信息:回想一下之前代碼,在JNI_OnLoad()函數(shù)中(第61行),調(diào)用了willCrash()函數(shù);在willCrash()函數(shù)中(第69行),制造了一個錯誤。4先獲取日志再分析這種方法其實和上面的方法沒有什么大的區(qū)別,僅僅是logcat日志獲取的方式不同??梢栽诔绦蜻\行的過程中將logcat日志保存到一個文件,甚至可以在崩潰發(fā)生時,快速的將logcat日志保存起來,然后再進行分析,比上面的方法稍微靈活一點,而且日志可以留待以后繼續(xù)分析。
NDK是一系列工具的集合。它提供了一系列的工具,幫助開發(fā)者快速開發(fā)C(或C++)的動態(tài)庫,并能自動將so和java應(yīng)用一起打包成apk(AndroidPackage的縮寫,Android安裝包)。這些工具對開發(fā)者的幫助是巨大的。它集成了交叉編譯器,并提供了相應(yīng)的mk文件隔離CPU、平臺、ABI等差異,開發(fā)人員只需要簡單修改mk文件(指出“哪些文件需要編譯”、“編譯特性要求”等),就可以創(chuàng)建出so。它可以自動地將so和Java應(yīng)用一起打包,極大地減輕了開發(fā)人員的打包工作。
NDK提供了一份穩(wěn)定、功能有限的API頭文件聲明,Google明確聲明該API是穩(wěn)定的,在后續(xù)所有版本中都穩(wěn)定支持當(dāng)前發(fā)布的API。從該版本的NDK中看出,這些API支持的功能非常有限,包含有:C標(biāo)準庫(libc)、標(biāo)準數(shù)學(xué)庫(libm)、壓縮庫(libz)、Log庫(liblog)。
1、NDK是一系列工具的集合。
2、NDK提供了一份穩(wěn)定、功能有限的API頭文件聲明。
3、NDK的發(fā)布,使“Java+C”的開發(fā)方式終于轉(zhuǎn)正,成為官方支持的開發(fā)方式。
4、NDK將使Android平臺支持C開發(fā)的開端。
NDK使得在android中,java可以調(diào)用C函數(shù)庫。我們都知道,java是半解釋型語言,很容易被反匯編后拿到源代碼文件,在開發(fā)一些重要協(xié)議時,我們?yōu)榱税踩鹨?,使用C語言來編寫這些重要的部分,來增大系統(tǒng)的安全性。還有,在一些接近硬件環(huán)境下,相信大家都清楚C與java的優(yōu)劣。順帶提一下:NDK并不能顯著提升應(yīng)用效率。why?我們都覺得C語言比起java來說效率要高出很多,一方面,隨著jdk的不斷更新,java的效率也隨之提高;另一方面,即便使用C語言編碼提高了應(yīng)用效率,但是在java與C相互調(diào)用時平白又增大了開銷。
1、NDK是一系列工具的集合。
NDK提供了一系列的工具,幫助開發(fā)者快速開發(fā)C(或C++)的動態(tài)庫,并能自動將so和java應(yīng)用一起打包成apk。這些工具對開發(fā)者的幫助是巨大的。
NDK集成了交叉編譯器,并提供了相應(yīng)的mk文件隔離CPU、平臺、ABI等差異,開發(fā)人員只需要簡單修改mk文件(指出“哪些文件需要編譯”、“編譯特性要求”等),就可以創(chuàng)建出so。
NDK可以自動地將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)準庫(libc)、標(biāo)準數(shù)學(xué)庫(libm)、壓縮庫(libz)、Log庫(liblog)。
3、NDK的發(fā)布,使“Java+C”的開發(fā)方式終于轉(zhuǎn)正,成為官方支持的開發(fā)方式。
使用NDK,我們可以將要求高性能的應(yīng)用邏輯使用C開發(fā),從而提高應(yīng)用程序的執(zhí)行效率。
使用NDK,我們可以將需要保密的應(yīng)用邏輯使用C開發(fā)。畢竟,Java包都是可以反編譯的。
NDK促使專業(yè)so組件商的出現(xiàn)。(樂觀猜想,要視乎Android用戶的數(shù)量)
4、NDK將使Android平臺支持C開發(fā)的開端。
NDK提供了的開發(fā)工具集合,使開發(fā)人員可以便捷地開發(fā)、發(fā)布C組件。同時,Google承諾在NDK后續(xù)版本中提高“可調(diào)式”能力,即提供遠程的gdb工具,使我們可以便捷地調(diào)試C源碼。在支持Android平臺C開發(fā),我們能感覺到Google花費了很大精力,我們有理由憧憬“C組件支持”只是Google Android平臺上C開發(fā)的開端。畢竟,C程序員仍然是碼農(nóng)陣營中的絕對主力,將這部分人排除在Android應(yīng)用開發(fā)之外,顯然是不利于Android平臺繁榮昌盛的。