重新認識 Gradle 打包
前一段時間因為打 AAR 包折騰了一整天,不得不懷疑我對 Gradle 的認識。雖然在此之前確實能解決一些 Gradle 打包依賴的衝突或錯誤,但並沒有系統的去學習。
一、Gradle 是什麼
Gradle 是 依賴管理 + 構建工具。它繼承了 Ant 的靈活和 Maven 的生命週期管理,它最後被 google 作為了 Android 御用管理工具。它最大的區別是不用 XML 作為配置檔案格式,採用了DSL格式,使得指令碼更加簡潔。
Ant 是最早的構建工具,基於 idea,好象是2000年有的,當時是最流行 java 構建工具,不過它的 XML 指令碼編寫格式讓 XML 檔案特別大。對工程構建過程中的過程控制特別好。
Maven 它是用來給 Ant 補坑的,Maven 第一次支援了從網路上下載的功能,仍然採用 xml 作為配置檔案格式,它的問題是不能很好的相同庫檔案的版本衝突。Maven 專注的是依賴管理,構建神馬的並不擅長。
構建工具 是什麼
單個原始碼檔案,你可以很輕鬆地 javac、gcc。然而專案結構複雜的時候,從原始碼到實際產出的生成物之間需要經過一些列的轉換操作,比如說編譯、打包。而這一整個完整的過剩叫做“構建”。
Maven 的主要功能主要分為5點,分別是依賴管理系統、多模組構建、一致的專案結構、一致的構建模型和外掛機制。
二、Android 是如何打包的
將一堆原始碼生成一個 APK 的過程就是打包,Gradle 作為一個構建平臺已經有了很好的基礎,到具體的打包應用步驟就由
buildscript {
...
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
}
}
另外在專案子工程中,app、XXXlibrary 內的 build.gradle 檔案使用 apply plugin
來指定具體使用的外掛,如:
apply plugin: 'com.android.application'
apply plugin: 'com.android.library '
三、什麼是 AAR 檔案
AAR 檔案本身是一個 zip 檔案,在您構建相關應用模組時,庫模組將先編譯到 AAR 檔案中,然後再新增到應用模組中。為了避免常用資源 ID 的資源衝突,請使用在模組(或在所有專案模組)中具有唯一性的字首或其他一致的命名方案。解壓後可以看到如下目錄:
- aapt
- aidl
- AndroidManifest.xml
- assets
- classes.jar
- jni
- libs
- R.txt
- res
四、Android Studio 如何快速執行程式
執行速度嚴重影響了開發效率,雖然換 MBP 後比以前的執行速度提高了三倍,但還是不夠滿意。提高速度主要有如下幾個方法:
提高編譯記憶體,在工程目錄下的 gradle.properties 檔案中新增如下程式碼:
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 org.gradle.parallel=true org.gradle.daemon=true
在 app 子工程目錄下的 build.gradle 中配置下改成增量編譯和調整 minSdkVersion
dexOptions { incremental true } productFlavors { dev { // dev utilizes minSDKVersion = 21 // to allow the Android gradle plugin // to pre-dex each module and produce an APK that can be tested on // Android Lollipop without time consuming dex merging processes. minSdkVersion 21 } prod { // The actual minSdkVersion for the application. minSdkVersion 15 } }
參考文件
上面是我再查詢資料中做的一些總結,內容不全面和一些不連貫地方。如要更詳細的瞭解請見如下連結: