在 buildSrc 模块 中的 src/main/groovy 目录 下 , 创建 MyPlugin.groovy 代码文件 作为插件的主要代码 , 代码如下 :
如果执行一个 Gradle 任务 , 该任务名称比较长 , 如 compileDebugAndroidTestSources 任务 ,
Sonatype Nexus 安装目录为 : D:\001_Develop\043_Sonatype_Nexus\nexus-3.27.0-03-win64\nexus-3.27.0-03
在上一篇博客 【Android Gradle 插件】Gradle 自定义 Plugin 插件 ③ ( 自定义插件作用 | Android Gradle 插件的扩展 | 自定义 Extension 扩展 ) 中 , 实现了 自定义插件 的 扩展 Extension , 在 Module 模块下的 build.gradle 构建脚本中 , android 配置块 就是一个 AppExtension 扩展 , 但是在 android 扩展下又定义了 defaultConfig 扩展 , 这是一个 ProductFlavor 配置 ;
如 : other 分组下的 compileDebugJavaWithJavac 任务 , 该任务的主要作用是 使用 javac 编译器工具 将 Java 源代码文件 编译成 Class 字节码文件 ;
等分组 , 是 Gradle 自带分组 , 自定义的 Gradle 任务 默认放置在 other 分组 中 ;
org.gradle.api.Project 配置 ( build.gradle 根配置 ) 文档 : https://docs.gradle.org/current/javadoc/org/gradle/api/Project.html
如果 Gradle 任务 A 的执行 是在 Gradle 任务 B 执行的基础上的 , 那么可以将任务 B 设置为 任务 A 的依赖 ;
在 DefaultTask 中的 任务输出 调用 TaskOutputs#upToDateWhen 方法 , 在传入的闭包参数中 , 返回值为 true 时 , 在编译时遇到该 自定义 Gradle 任务 , 如果 第二次执行 且 输入 / 输出 相同 , 会跳过该任务 , 执行下一个任务 ;
Task#dependsOn 函数的作用是为 Gradle 任务设置依赖任务 , 执行该任务前 , 依赖任务必须被满足 ;
创建 Gradle 插件 , 一般是在 Android Studio 或者 IntelliJ IDEA 中 , 创建一个插件模块 , 这里以 AS 中为例 ;
在之前的 【Android Gradle 插件】自定义 Gradle 插件模块 ⑤ ( 完整总结 ) ★★★ 博客中 , 将自定义 Gradle 插件的 jar 包发布到了本地 Maven 仓库 , 效果如下 : " C:\Users\octop.m2\repository " 目录中的内容如下 :
参考 Android Gradle 插件内容 , 将 Android Studio 的 Project 面板中的 External Libraries 展开 ,
org.gradle.api.tasks.bundling.Zip 自带任务 ( 任务类型 ) 文档 :https://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Zip.html
在 Gradle 面板 中的 自定义 Gradle 插件的 Module 模块 下 , 有 documentation 任务分组 , 其中有
在上一篇博客 【Android Gradle 插件】Gradle 自定义 Plugin 插件 ⑦ ( 自定义 Gradle 插件导入方式 | buildSrc 插件导入 | 构建脚本中自定义插件 | 独立文件 ) 中 , 总结了在 Android Studio 工程中 自定义 Gradle 插件 , 并在 build.gradle 构建脚本 中导入插件的代码 ;
在插件模块中的 src/main 目录 下创建 groovy 目录 , 用于存放 Groovy 代码 , 在其中定义包名以及包名下的源码 :
org.gradle.api.Task 配置 ( Gradle 任务类型 ) 文档 : https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html
在 图片优化时 , 需要将 png 格式的图片转为 webp 格式 , 但是注意不要将带 alpha 透明度通道的图片转为 webp 格式 , 在某些 Android 版本中 只支持 没有透明度通道的 webp 图片 ;
添加构建依赖项 参考文档 : https://developer.android.google.cn/studio/build/dependencies
中 , 直接在 build.gradle 构建脚本 中定义的 扩展属性 , 是为 org.gradle.api.Project 对象定义的扩展属性 ;
Task#finalizedBy 函数 的作用是为 Gradle 任务 设置任务执行完毕后执行的任务 ;
在上一篇博客 【Android Gradle 插件】自定义 Gradle 插件模块 ② ( 在模块中定义插件 | 引入自定义 Gradle 插件模块 | 配置 Gradle 插件上传选项 | 配置分组名称版本号 ) 中 , 定义完插件后 , 在 自定义 Gradle 插件模块 的 build.gradle 构建脚本中 , 添加了 插件上传仓库的 配置 , 为插件指定了 分组 , 版本号 , 名称 配置 ;
默认情况下 , 在 build.gradle 中配置 com.facebook.fresco:fresco:0.14.0 依赖 ,
参考 android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.Splits.html 文档 ;
ProductFlavor ( build.gradle#android#defaultConfig 配置 ) 文档 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.ProductFlavor.html
转载: http://blog.csdn.net/xx326664162/article/details/52002616 文章出自:薛瑄的博客 分析原因: 更改Gradle的版本后,或者更新AS后,再次打开Android studio 会根据指定的url去Gradle官网下载新版文件,所需时间过长,很大可能下载不成功,一直卡在Building gradle project info或refreshing gradle project这一步(解决方法见下)。 你可能会有疑问,为什么有时候更新AS需要再下载
BaseExtension 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.BaseExtension.html
在 buildSrc 中开发了自定义 Gradle 插件 , 编译后在 build/libs 目录下会生成 buildSrc.jar 包 ,
到 Gradle 官方网站 https://gradle.org/ 下载 Gradle 工具 ;
也可以 通过 project.ext.hello 访问该扩展属性 , 代码如下 :
在 【Android Gradle 插件】将自定义 Gradle 插件上传到自建 Maven 仓库 ⑦ ( 登录 Maven 私服 | Maven 私服初始化设置 | 创建 Maven 仓库 ) 博客中 , 在 Maven 私服中创建了 Maven 仓库 " MyRepository “ , 地址为 ” http://localhost:8081/repository/MyRepository/ " ;
DefaultTask 又继承了 AbstractTask 类 , 在 AbstractTask 类中 , 有 taskInputs 和 taskOutputs 两个成员变量 , 分别代表任务的 输入 和 输出 ;
LibraryExtension ( Library 依赖库的 build.gradle#android 配置 ) 文档 : android-gradle-dsl/2.3/com.android.build.gradle.LibraryExtension.html
在 自定义 Gradle 插件 编译后生成的 pom 文件 , 存放在 " build/publications/plugin/pom-default.xml " 文件中 ,
TestOptions ( build.gradle#android#testOptions ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.TestOptions.html
在本系列的此前文章中,我们学习了为什么要用Gradle、Gradle的入门基础和Groovy的基础,这些文章为Gradle的入门打下了基础,这一篇我们接着学习Gradle Wrapper。有的同学可能有疑问,你不是要讲Android Gradle嘛,讲这个干啥?了解Gradle Wrapper可以更好的理解Gradle,Gradle Wrapper在日常开发中看似“不起眼”,实则超级重要。
DexOptions ( build.gradle#android#dexOptions ) 文档位置 : https://google.github.io/android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.DexOptions.html
在 Gradle 自定义插件 Plugin 中 , 如果要执行复杂的工作 , 可以在 实现的 Plugin 接口的 apply 函数中执行 ;
分组是在 org.gradle.api.Project 中的 configurations 中配置的 ,
领取专属 10元无门槛券
手把手带您无忧上云