Gradle插件学习笔记(四)

这篇文章主要是在前几篇文章的基础上实现一个Android打包的插件,因此没看过前几篇文章的朋友能够先查看:android

Gradle插件学习笔记(一)git

Gradle插件学习笔记(二)github

Gradle插件学习笔记(三)bash


原本想将写的插件上传到maven提供给你们使用,可是后来仍是决定以开源库的形式提供给你们,主要是由于微信

  • 网上关于Gradle功能性插件的开源工程不多,很难找到学习资料,这个库能够方便开发者入门,学习
  • 开发者打包需求各类各样,因为提供的接口不够,可能会影响开发者使用,因此,不如将源码提供给你们。
  • 也但愿你们多多star,有什么意见能够给我留言 demo地址

引入工程

因为并无上传maven,只须要把demo工程中的buildSrc文件夹粘贴入本身的工程便可使用 有问题能够issues我,或者微信公众号给我留言: 个人公众号: app

功能介绍

这个插件的主要功能分为三部分maven

打包apk

  • 打包apk提供了输出到指定文件夹的功能
  • 打包apk提供了修改apk名字的功能
  • 打包apk提供了修改渠道或修改AndroidManifest指定字段的功能

使用方式

修改 apk module的build.gradlepost

apply plugin: 'deep.app'
deep{
    name "{name}_{type}_{flavor}_deep.apk"
    path "../out"
    holder= [aaa:123,bbb:666]

}
复制代码
参数 描述
name 输出的apk名字
path 指定输出路径
holder AndroidManifest指定替换的字段 如上述:将AndroidManifest中的aaa替换成123,bbb替换成666

须要注意的是若是想指定名字为普通名字直接输入字符串便可,若是须要与变异模式绑定,只须要加{}:学习

参数 描述
{name} 当前module的名字
{type} 编译方式,debug release或其它自定义的模式
{flavor} flavor,若是没有自定义就没有

效果以下: gradle

特殊说明

可能有开发者会问,为何没有提供选择打包文件的功能,即不一样apk打包不一样文件,若是有这种需求的朋友,建议使用flavor,android提供了flavor能够很方便设置打包出不一样报名不一样内容的apk,若是对flavor感兴趣的朋友能够给我留言,或者查看我以前的一片文章Android工程gradle详解

打包aar或jar

打包aar或jar提供了两种不一样形式配置

  • aar与apk相似,提供了替换Androidmanifest内容的功能
  • aar 提供了指定输出路径或输出内容的功能,与apk打包一致
  • jar提供了指定混淆,指定打入内容,指定去除内容,指定打入三方依赖库,指定输出的功能

使用方式

apply plugin: 'deep.library'
deep {

           aar{
               name "{name}_{type}_{flavor}_deep.aar"
               path "../out/aar"
               holder= [aaa:123,bbb:666]
           }
    jar{
                name "{name}_{type}_{flavor}_deep.jar"
                path "../out/jar"
                excludeClass=['com/deep/test/exclude.class']
                excludePackage=['exclude']
                isProguard true

                includeJar = ["libs/open_sdk_r5923_lite.jar"]
            }
   }
复制代码

aar中参数说明:

参数 描述 备注
name 输出的aar名字 特殊参数与apk一致,这里不作赘述
path 指定输出路径
holder AndroidManifest指定替换的字段 如上述:将AndroidManifest中的aaa替换成123,bbb替换成666

效果以下:

jar中参数说明:

参数 描述 备注
name 输出的jar名字 特殊参数与apk一致,这里不作赘述
excludeClass 打成jar,不包含的文件
excludePackage 打成jar 不包含的package
isProguard 是否混淆
prpguardFile 混淆文件 相对于module路径的,不设置,默认使用proguard-rules.pro
includeJar 须要打入的三方jar

效果以下:

打包日志功能

有的时候,咱们以为gradle的打包日志都是英文很烦,没用页也看不懂,不要紧,使用这个功能能够开关日志,或打印本身须要的日志。 选择使用的module,修改build.gradle

import com.deep.DeepLogger
import com.deep.DeepTimeListener
gradle.useLogger(new DeepLogger(true))
gradle.addListener(new DeepTimeListener(true))
复制代码

若是不想使用,只须要将参数设置为false便可:

经过这个日志能够看出没有Task的耗时,以及对应任务的开始关闭。 在最后会有全部任务的耗时:

这些日志的提示内容都是能够设置: 只须要修改DeepLogger文件,这里面有全部任务的生命周期,只须要插入你想要的log便可。

总结

今天将插件的全部功能介绍完毕了,若是有需求,也能够给我留言,我会再开一篇文章介绍一下代码,方便你们修改代码。

相关文章
相关标签/搜索