1. Gradle
1). 資料
- Gradle 基于 groovy 語言,groovy 官網(wǎng)
- Gradle DSL
- Android Plugin DSL
- Gradle task
2). 查看所有任務(wù)
./gradlew tasks --all
- compileDebugJavaWithJavac:編譯 java 文件
- processDebugManifest:生成最終 AndroidManifest 文件
- compileDebugAidl:編譯 AIDL 文件
- packageDebug:打包成 apk
- transformClassesAndResourcesWithProguardForRelease task雳刺,即為 release 包混淆殖蚕。
2. 插件基礎(chǔ)
1). 基本步驟
- 創(chuàng)建Android項(xiàng)目(基于 Android Studio 3.0 版本)
- 新建一個Java Library Module, 該module必須命名為buildSrc
- 將src/main/java修改為src/main/groovy
- 在groovy文件夾下嫁赏,新建xxxPlugin.groovy, 并實(shí)現(xiàn)Plugin接口, 泛型參數(shù)為Project
注:由于 Kotlin/Java 與 groovy 的兼容棍苹,所以并非一定要創(chuàng)建 groovy 文件唤殴,也可以是 xxxPlugin.java/xxxPlugin.kt
2). 項(xiàng)目目錄結(jié)構(gòu)
3). TestGlugin.groovy
class TestPlugin implements Plugin<Project> {
@Override
void apply(Project project) {
// 執(zhí)行任務(wù)
project.task('pluginTest') {
doFirst {
println "mazaiting"
}
doLast {
println "Hello World!"
}
}
}
}
4). 應(yīng)用
在app/build.gradle文件中應(yīng)用
apply plugin: TestPlugin
5). 執(zhí)行任務(wù)
在項(xiàng)目的根目錄下運(yùn)行
gradlew pluginTest
3. 擴(kuò)展
需求斋攀,用戶自定義輸出內(nèi)容
1). 創(chuàng)建TestPluginExtension類
class TestPluginExtension {
String message = 'Hello World'
}
2). 創(chuàng)建TestExtension類
class TestExtension implements Plugin<Project> {
@Override
void apply(Project project) {
// 這個名稱在*.gradle文件中使用
def extension = project.extensions.create("testExtension", TestPluginExtension)
// 這個任務(wù)名在命令行中使用
project.task('pluginTestExtension') {
doLast {
println extension.message
}
}
}
}
3). 應(yīng)用
在app/build.gradle文件中應(yīng)用
apply plugin: TestExtension
testExtension {
message 'mazaiting'
}
4). 執(zhí)行命令
gradlew pluginTestExtension
4. 項(xiàng)目化
1). 修改build.gradle
apply plugin: 'groovy'
dependencies {
compile gradleApi()
compile localGroovy()
}
gradle同步之后, External Libraries 中多出了 gradle-api/gradle-installation-beacon/groovy 庫弧哎。
2). 創(chuàng)建配置文件
- 創(chuàng)建 src/main/resources/META-INF/gradle-plugins/插件名.properties雁比,例如 src/main/resources/META-INF/gradle-plugins/com.mazaiting.properties
- properities 文件內(nèi)容改為 implementation-class=Plugin 路徑,例如 implementation-class=com.mazaiting.TestExtension
3). 應(yīng)用
在 build.gradle 文件中通過 apply plugin: '插件名' 引入插件 —— apply plugin: 'com.mazaiting'撤嫩。
4). 執(zhí)行
gradlew pluginTestExtension