0
点赞
收藏
分享

微信扫一扫

【Android Gradle 插件】Gradle 自定义 Plugin 插件 ③ ( 自定义插件作用 | Android Gradle 插件的扩展 | 自定义 Extension 扩展 )


文章目录

  • ​​一、自定义插件作用​​
  • ​​二、Android Gradle 插件的 AppExtension 扩展​​
  • ​​三、自定义 Extension 扩展​​

Android Plugin DSL Reference 参考文档 :

  • Android Studio 构建配置官方文档 : ​​https://developer.android.google.cn/studio/build​​
  • 添加构建依赖项 参考文档 : ​​https://developer.android.google.cn/studio/build/dependencies​​
  • Android Gradle 插件配置与 Gradle 配置关联 : ​​【Android Gradle 插件】Gradle 依赖管理 ① ( org.gradle.api.Project 配置 | Android Gradle 插件配置与 Gradle 配置关联 ) ★​​
  • Android Gradle 插件文档主页 : ​​https://google.github.io/android-gradle-dsl/2.3/​​
  • BaseExtension 文档位置 : ​​android-gradle-dsl/2.3/com.android.build.gradle.BaseExtension.html​​
  • AppExtension ( build.gradle#android 配置 ) 文档位置 : ​​android-gradle-dsl-gh-pages/2.3/com.android.build.gradle.AppExtension.html​​
  • build.gradle#android 模块配置文档 : ​​android-gradle-dsl/2.3/com.android.build.gradle.AppExtension.html​​
  • ProductFlavor ( build.gradle#android#defaultConfig 配置 ) 文档 : ​​android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.ProductFlavor.html​​
  • ProductFlavor#externalNativeBuild 配置 ( build.gradle#android#defaultConfig#externalNativeBuild 配置 ) : ​​com.android.build.gradle.internal.dsl.ProductFlavor:externalNativeBuild​​
  • ExternalNativeBuildOptions ( build.gradle#android#defaultConfig#externalNativeBuild 配置 ) 文档位置 : ​​android-gradle-dsl-gh-pages/2.3/com.android.build.gradle.internal.dsl.ExternalNativeBuildOptions.html​​
  • NdkBuildOptions ( build.gradle#android#defaultConfig#externalNativeBuild#ndkBuild 配置 ) 文档位置 : ​​android-gradle-dsl-gh-pages/2.3/com.android.build.gradle.internal.dsl.NdkBuildOptions.html​​
  • CmakeOptions ( build.gradle#android#defaultConfig#externalNativeBuild#cmake 配置 ) 文档位置 : ​​android-gradle-dsl-gh-pages/2.3/com.android.build.gradle.internal.dsl.CmakeOptions.html​​
  • JackOptions ( build.gradle#android#defaultConfig#jackOptions 配置 ) 文档位置 : ​​android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.JackOptions.html​​
  • AnnotationProcessorOptions ( 注解处理器配置 ) ( build.gradle#android#defaultConfig#javaCompileOptions配置 ) 文档位置 : ​​android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.AnnotationProcessorOptions.html​​
  • NdkOptions ( build.gradle#android#defaultConfig#ndk 配置 ) 文档位置 : ​​android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.NdkOptions.html​​
  • NDK 参考文档 : ​​Add C and C++ Code to Your Project.​​
  • VectorDrawablesOptions ( build.gradle#android#defaultConfig#vectorDrawables 配置 ) 文档位置 : ​​android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.VectorDrawablesOptions.html​​
  • BuildType ( build.gradle#android#buildTypes 配置 ) 文档位置 : ​​android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.BuildType.html​​
  • SigningConfig ( build.gradle#android#signingConfigs 配置 ) 文档位置 : ​​android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.SigningConfig.html​​
  • AaptOptions ( build.gradle#android#aaptOptions 配置 ) 文档位置 : ​​android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.AaptOptions.html​​
  • AndroidSourceSets ( build.gradle#android#sourceSets 配置 ) 文档位置 : ​​android-gradle-dsl/2.3/com.android.build.gradle.api.AndroidSourceSet.html​​
  • AndroidSourceDirectorySet ( build.gradle#android#sourceSets#aidl/assets/java/jni/jniLibs 配置 ) 文档位置 :​​android-gradle-dsl/2.3/com.android.build.gradle.api.AndroidSourceDirectorySet.html​​
  • AndroidSourceFile ( build.gradle#android#sourceSets#manifest 配置 ) 文档位置 : ​​android-gradle-dsl/2.3/com.android.build.gradle.api.AndroidSourceFile.html​​
  • DataBindingOptions ( build.gradle#android#dataBinding ) 文档位置 : ​​android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.DataBindingOptions.html​​
  • DexOptions ( build.gradle#android#dexOptions ) 文档位置 : ​​android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.DexOptions.html​​
  • LintOptions ( build.gradle#android#lintOptions ) 文档位置 : ​​android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.LintOptions.html​​
  • PackagingOptions ( build.gradle#android#packagingOptions ) 文档位置 : ​​android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.PackagingOptions.html​​
  • Splits ( build.gradle#android#splits ) 文档位置 : ​​android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.Splits.html​​
  • AbiSplitOptions ( build.gradle#android#splits#abi ) 文档位置 : ​​android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.AbiSplitOptions.html​​
  • LanguageSplitOptions ( build.gradle#android#splits#language ) 文档位置 : ​​android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.LanguageSplitOptions.html​​
  • DensitySplitOptions ( build.gradle#android#splits#density ) 文档位置 : ​​android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.DensitySplitOptions.html​​
  • TestOptions ( build.gradle#android#testOptions ) 文档位置 : ​​android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.TestOptions.html​​
  • Android 测试相关文档 : ​​https://developer.android.google.cn/training/testing​​
  • UnitTestOptions ( build.gradle#android#testOptions#unitTests ) 文档位置 : ​​android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.TestOptions.UnitTestOptions.html​​
  • org.gradle.api.tasks.testing.Test 单元测试配置类 : ​​https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/testing/Test.html​​
  • LibraryExtension ( Library 依赖库的 build.gradle#android 配置 ) 文档 : ​​android-gradle-dsl/2.3/com.android.build.gradle.LibraryExtension.html​​
  • org.gradle.api.Project 配置 ( build.gradle 根配置 ) 文档 : ​​https://docs.gradle.org/current/javadoc/org/gradle/api/Project.html​​
  • org.gradle.api.initialization.Settings 配置 文档 : ​​https://docs.gradle.org/current/javadoc/org/gradle/api/initialization/Settings.html​​
  • org.gradle.api.artifacts.dsl.DependencyHandler 配置 ( build.gradle#dependencies#implementation 配置 ) : ​​https://docs.gradle.org/current/javadoc/org/gradle/api/artifacts/dsl/DependencyHandler.html​​
  • 添加构建依赖项 参考文档 : ​​https://developer.android.google.cn/studio/build/dependencies​​
  • org.gradle.api.Task 配置 ( Gradle 任务类型 ) 文档 : ​​https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html​​
  • org.gradle.api.tasks.TaskContainer配置 ( Gradle 任务容器类型 ) 文档 : ​​https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/TaskContainer.html​​
  • org.gradle.api.DefaultTask 配置 ( Gradle 自定义任务类父类 ) 文档 : ​​https://docs.gradle.org/current/javadoc/org/gradle/api/DefaultTask.html​​
  • org.gradle.api.tasks.Delete 自带任务 ( clean 任务类型 ) 文档 : ​​https://docs.gradle.org/current/dsl/org.gradle.api.tasks.Delete.html​​
  • org.gradle.api.tasks.bundling.Zip 自带任务 ( 任务类型 ) 文档 :​​https://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Zip.html​​
  • Gradle 自带任务查询界面 ( 搜索 Task Types ) : ​​https://docs.gradle.org/current/dsl/#N1045C​​
  • org.gradle.api.invocation.Gradle 文档 ( 可设置 Gradle 构建声明周期监听器 ) : ​​https://docs.gradle.org/current/javadoc/org/gradle/api/invocation/Gradle.html​​
  • org.gradle.BuildListener 构建监听器 文档 : ​​https://docs.gradle.org/current/javadoc/org/gradle/BuildListener.html​​
  • org.gradle.execution.TaskExecutionGraphListener 构建监听器 文档 : ​​https://docs.gradle.org/current/javadoc/org/gradle/api/execution/TaskExecutionGraphListener.html​​





一、自定义插件作用


在 Gradle 自定义插件 Plugin 中 , 如果要执行复杂的工作 , 可以在 实现的 Plugin 接口的 apply 函数中执行 ;

package org.gradle.api;

public interface Plugin<T> {
void apply(T var1);
}

一般情况下 , 自定义插件工程都是针对 特定的 需求 , 开发固定功能的插件 ;






二、Android Gradle 插件的 AppExtension 扩展


Android Gradle 插件 也是一个 自定义插件 , 这个插件功能复杂 , 代码量较大 , 如 定义了 AppExtension , ProductFlavor 等上百个类 , 涉及到 Android 工程编译的方方面面 ; 详细参考 ​​https://google.github.io/android-gradle-dsl​​ 文档 ;



在 build.gradle 构建脚本 中的 android 脚本配置块 配置 , 其目的就是给 Android Gradle 插件 传递编译参数 ;

android {
compileSdkVersion 31
buildToolsVersion "30.0.3"

defaultConfig {
applicationId "kim.hsl.android_ui"
minSdkVersion 18
targetSdkVersion 31
versionCode 1
versionName "1.0"

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
}






三、自定义 Extension 扩展


在 Android Gradle 插件中 , 定义了 AppExtension 扩展 , 对应的就是 build.gradle 构建脚本 中的 android 脚本块

自定义 Gradle 插件中 , 可以定义自己的扩展 ;

首先 , 调用 ​​project.extensions.create​​​ 方法 , 创建扩展 , 类似于 Android Gradle 插件中的 android , 引入了 MyPlugin 插件后 , 就可以使用 ​​myplugin​​ 配置块 ;

import org.gradle.api.Plugin
import org.gradle.api.Project

class MyPlugin implements Plugin<Project> {
@Override
void apply(Project project) {
println 'MyPlugin'

// 创建一个扩展
// 类似于 Android Gradle 插件中的 android
// 引入了 MyPlugin 插件后
// 就可以使用 myplugin 配置块
project.extensions.create("myplugin", MyPluginExtensions)
}
}

然后 , 创建 MyPluginExtensions 类 , 其中定义扩展项 ;

class MyPluginExtensions {
def name
def age
}

最后 , 在 build.gradle 构建脚本 中 , 配置自定义扩展 ;

apply plugin: MyPlugin

myplugin {
name 'Tom'
age 18
}


举报

相关推荐

0 条评论