Android 開(kāi)發(fā)筆記十二

1、Gradle學(xué)習(xí)

? ? ? ? ?Gradle是一個(gè)工具,同時(shí)它也是一個(gè)編程框架。前面也提到過(guò),使用這個(gè)工具可以完成app的編譯打包等工作。當(dāng)然你也可以用它干其他的事情。

Gradle的官網(wǎng):http://gradle.org/

? ? ? ? ? ? ? ? ? ?https://docs.gradle.org/current/dsl/

? ? ? ? ? ? ? ? ? ?https://docs.gradle.org/current/javadoc/org/gradle/api/Project.html

gradle命令介紹

? ? ? ? ? gradle projects查看工程信息

? ? ? ? ? gradle tasks查看任務(wù)信息

? ? ? ? ?gradle task-name執(zhí)行任務(wù)

? ? ? ? ?列出了好多任務(wù),這時(shí)候就可以通過(guò) gradle 任務(wù)名來(lái)執(zhí)行某個(gè)任務(wù)。這和make xxx很像。比如:

gradle clean是執(zhí)行清理任務(wù),和make clean類似。

gradle properites用來(lái)查看所有屬性信息。

gradle tasks會(huì)列出每個(gè)任務(wù)的描述,通過(guò)描述,我們大概能知道這些任務(wù)是干什么的.....。然后gradle task-name執(zhí)行它就好。

這里要強(qiáng)調(diào)一點(diǎn):Task和Task之間往往是有關(guān)系的,這就是所謂的依賴關(guān)系。比如,assemble task就依賴其他 ? ? ? ? ? ? ? ? ? ? ? ? ?task先執(zhí)行,assemble才能完成最終的輸出。

Gradle基本類型

? ? ? ? ? ?gradle基于groovy, gradle提供的基本類型也都實(shí)現(xiàn)了script.并且提供了大量的方法和屬性

? ? ? ? ? Build script -> Project (每個(gè)project的build.gradle也就是一個(gè)project)

? ? ? ? ? Init script -> Gradle

? ? ? ? ? Settings script -> Settings (對(duì)應(yīng)setting.gradle)

? ? ? ? ? Project每個(gè)project的build.gradle都會(huì)轉(zhuǎn)換成一個(gè)project

Gradle 生命周期

? ? ? ? ?1.初始化創(chuàng)建Settings實(shí)例

? ? ? ? ?2.解析settings.gradle 構(gòu)造各個(gè)Project實(shí)例

? ? ? ? 3.解析每個(gè)Project對(duì)應(yīng)的build.gradle,配置相應(yīng)Project

2、NDK&&JNI

NDK簡(jiǎn)介

(1)NDK是一系列工具的集合

NDK提供了一系列的工具,幫助開(kāi)發(fā)者快速開(kāi)發(fā)C(或C++)的動(dòng)態(tài)庫(kù),并能自動(dòng)將so和java應(yīng)用一起打包成apk。這些工具對(duì)開(kāi)發(fā)者的幫助是巨大的。NDK集成了交叉編譯器,并提供了相應(yīng)的mk文件隔離CPU、平臺(tái)、ABI等差異,開(kāi)發(fā)人員只需要簡(jiǎn)單修改mk文件(指出“哪些文件需要編譯”、“編譯特性要求”等),就可以創(chuàng)建出so。NDK可以自動(dòng)地將so和Java應(yīng)用一起打包,極大地減輕了開(kāi)發(fā)人員的打包工作。

(2)NDK提供了一份穩(wěn)定、功能有限的API頭文件聲明

Google明確聲明該API是穩(wěn)定的,在后續(xù)所有版本中都穩(wěn)定支持當(dāng)前發(fā)布的API。從該版本的NDK中看出,這些API支持的功能非常有限,包含有:C標(biāo)準(zhǔn)庫(kù)(libc)、標(biāo)準(zhǔn)數(shù)學(xué)庫(kù)(libm)、壓縮庫(kù)(libz)、Log庫(kù)(liblog)。

NDK產(chǎn)生的背景

Android平臺(tái)從誕生起,就已經(jīng)支持C、C++開(kāi)發(fā)。眾所周知,Android的SDK基于Java實(shí)現(xiàn),這意味著基于 Android?SDK進(jìn)行開(kāi)發(fā)的第三方應(yīng)用都必須使用Java語(yǔ)言。但這并不等同于“第三方應(yīng)用只能使用Java”。在Android?SDK首次發(fā)布 時(shí),Google就宣稱其虛擬機(jī)Dalvik支持JNI編程方式,也就是第三方應(yīng)用完全可以通過(guò)JNI調(diào)用自己的C動(dòng)態(tài)庫(kù),即在Android平臺(tái) 上,“Java+C”的編程方式是一直都可以實(shí)現(xiàn)的。

不過(guò),Google也表示,使用原生SDK編程相比Dalvik虛擬機(jī)也有一些劣勢(shì),Android?SDK文檔里,找不到任何JNI方面的幫助。即使第三方應(yīng)用開(kāi)發(fā)者使用JNI完成了自己的C動(dòng)態(tài)鏈接庫(kù)(so)開(kāi)發(fā),但是so如何和應(yīng)用程序一起打包成apk并發(fā)布?這里面也存在技術(shù)障礙。比如程序更加復(fù)雜,兼容性難以保障,無(wú)法訪問(wèn)Framework API,Debug難度更大等。開(kāi)發(fā)者需要自行斟酌使用。

于是NDK就應(yīng)運(yùn)而生了。NDK全稱是Native?Development?Kit。NDK的發(fā)布,使“Java+C”的開(kāi)發(fā)方式終于轉(zhuǎn)正,成為官方支持的開(kāi)發(fā)方式。NDK將是Android平臺(tái)支持C開(kāi)發(fā)的開(kāi)端。

NDK優(yōu)點(diǎn)

代碼的保護(hù)。由于apk的java層代碼很容易被反編譯,而C/C++庫(kù)反匯難度較大。

可以方便地使用現(xiàn)存的開(kāi)源庫(kù)。大部分現(xiàn)存的開(kāi)源庫(kù)都是用C/C++代碼編寫(xiě)的。

提高程序的執(zhí)行效率。將要求高性能的應(yīng)用邏輯使用C開(kāi)發(fā),從而提高應(yīng)用程序的執(zhí)行效率。

便于移植。用C/C++寫(xiě)得庫(kù)可以方便在其他的嵌入式平臺(tái)上再次使用。

NDK缺點(diǎn)

開(kāi)發(fā)麻煩

調(diào)試不方便

難度相對(duì)較高

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容