在自定義gradle插件時,最頭疼的莫過於不知道將插件加入到執行流程中哪個地方,下面梳理了一些主要task的作用:
1、preDebugBuild
獲取compile 和 runtime的依賴包並對其做一些版本號,依賴等的校驗工作。
2、compileDebugAidl
將aidl轉換爲java文件
3、checkDebugManifest
檢查menifest文件是否存在
4、generateDebugBuildConfig
生成BuildConfig.java文件
5、generateDebugResValues
處理用戶在app/build.gradle下定義的resValue,生成路勁:app/build/generated/res/resValues/debug/values/generated.xml
例如
buildTypes {
debug {
//可以在xml中使用,或者調用getResources().getString(R.string.app_name)獲取app_name的值
resValue "string", "app_name", "@string/app_name_debug"
//會寫入生成BuildConfig.java中
buildConfigField "String","debugtestKey","\"debugtestValue\""
}
}
buildConfigField 和resValue可以在buildTypes、defaultConfig、productFlavors中定義。
6、mergeDebugResources
合併資源文件,主要包括:generateDebugResValues生成的generated.xml、依賴的以及工程中的資源
依賴庫資源地址:gradle本地路徑/.gradle/caches/transforms-1/files-1.1/
用途: 例如將圖片轉換爲webp格式的插件可以在此task前處理
7、processDebugManifest
mege manifest文件
8、processDebugResources
aapt處理資源文件,生成R.java等文件
9、javaPreCompileDebug
java註解處理器收集,生成 annotationProcessors.json 文件,路勁目錄:app/build/intermediates/annotation_processor_list/
10、compileDebugJavaWithJavac
將java文件編譯成class文件,如果有定義註解處理器則會執行相應邏輯
11、compileDebugNdk
編譯 ndk
12、mergeDebugShaders
合併 shader 文件
13、compileDebugShaders
編譯 shaders
14、mergeDebugAssets
合併 assets 文件
15、transformClassesWithDexBuilderForDebug
將項目中的class以及依賴的jar包轉化爲一個一個dex文件(會有重複),生成目錄:app/build/intermediates/transforms/dexBuilder
16、transformDexArchiveWithExternalLibsDexMergerForDebug
生成所有依賴的jar包的dex集合,對不同moudle中的jar包會去重
17、transformDexArchiveWithDexMergerForDebug
打包最終dex文件