Gradle 自定义插件
Gradle 自定义插件
1.新建项目
配置build.gradle
//使用官方的 `groovy` 插件
apply plugin: 'groovy'
//添加api依赖
dependencies {dependencyHandler ->
    dependencyHandler .compile gradleApi()
   dependencyHandler. compile localGroovy()
}
//添加当前使用的gradle版本为2.1.3
dependencies { DependencyHandler dependencyHandler ->
    dependencyHandler.compile 'com.android.tools.build:gradle:2.1.3'
    //dependencyHandler.compile fileTree()
}
创建资源
注意,红框内的两者名保持一致!
 
   2.新建pluginLaunch类
 class MyPluginLaunch implements Plugin<Project> {
    /**
     * 因为是遍历 List 顺序添加的,所以可以在 Plugin 中通过先后顺序一一添加
     registerTransform 方法第二个参数是 dependsOn, 可以手动设置依赖关系
     * @param project
     */
    @Override
    public void apply(Project project) {
              ZDMLogger.i('Project enable MyPluginLaunch plugin')
        project.extensions.create("ccjReleaseInfo",ReleaseInfoExtension)        //创建扩展属性
        project.tasks.create("ccjReleaseTask",ReleaseInfoTask) //创建自定义任务
    }
}
3.新建自定义属性类Extension 
 
 该属性可以在gradle中直接使用类似于android{}
class ReleaseInfoExtension extends Extension {
    String versionName
    String versionCode
    String versionInfo
    String fileName
    @Override
    public String toString() {
        return "ReleaseInfoExtension{" +
                "versionName='" + versionName + '\'' +
                ", versionCode='" + versionCode + '\'' +
                ", versionInfo='" + versionInfo + '\'' +
                ", fileName='" + fileName + '\'' +
                '}'
    }
}
4.新建自定义Task
用来处理自定义属性ReleaseInfoExtension中的变量
class ReleaseInfoTask extends DefaultTask{
    ReleaseInfoTask() {
        group='zdmrouter'
        description='the realeaseInfo Task of zdm router'
        mustRunAfter()
    }
    /**
     * 在doFitst 和doLast中间执行
     */
    @TaskAction
    void doAction (){
        updateInfo()
    }
    private void updateInfo(){
        String versionCodeMsg=project.extensions.getByName("ccjReleaseInfo").versionCode //其中ccjReleaseInfo为在launcher中定义的变量
        ZDMLogger.i( "ReleaseInfoTask.updateInfo.versionCodeMsg>>>>"+versionCodeMsg)
    }
}
5.将plugin 发布到jcenter 或者自己搭建的服务器仓库地址.然后进行依赖
 
 //在root项目中的dependencies中
        classpath 'com.smzdm:zdm_router_register:1.1.0'
//然后,在使用的地方,;类似于依赖Android插件一样.依赖自己的插件
apply plugin: 'com.smzdm.android.router.register'
6.依赖完成后,可以在apply自定义插件的gradle中进行
配置自定义属性
ccjReleaseInfo {
    versionName = "1.0"
    versionCode = 1
    versionInfo = "versionInfo>>ccjReleaseInfo"
}
运行自定义Task
gradle ccjReleaseTask
或者在gradle面板中直接调用
 
    关注公众号
关注公众号
					低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 
							
								
								    上一篇
								      Gradle API 以及TaskGradle 编程框架 1.groovy语法 2.Build Script Block 3.gradle api 前言 1.灵活性上: ANT和Maven 不能在构建过程中,做自定义操作. 2.颗粒度: gradle 代码开源, 根据task编译,可读,可改 3.扩展性 : 可以在gradle脚本中 可以自定义插件.自定义task 4.兼容性 : gralde代码中, 可以继续依赖 maven等框架 执行过程 initliazation 解析整个工程的所有project, 构建project对象 configuration 解析project对象中的task, 构建好 所欲task 的拓扑图 execution 执行具体的task 以及依赖 project API project 树状结构 rootProject 根节点 parentProject 父节点 this.project 当前节点 subProject 子节点 project 中常用api介绍 //给某个project设置属性 project("module-user"){Project project -> } //... 
- 
							
								
								    下一篇
								      解决 Android 升级 SDK API 27 过程中遇到的问题小菜今天升级适配 SDK-API 27,可谓艰难险阻,真的好磨人,记录一下遇到的两个比较重要的问题,希望各位不会掉坑。 问题一 Could not find common.jar 小菜是由 26.1.0 准备升级到 27.1.1,首先是更换 SDK-Version 等,然后下载 SDK,一切正常,等到下载完 sync now 同步时,却报了如下错误: 问题一.png 在网页中打开链接,却是 404; 404.png 查阅网上资料,说涉及到的版本不要用 27.+ 之类的,应替换为准确的版本号,但是小菜用的是明确的 27.1.1,该方案失败; 网上部分大神说,需要在 build.gradle 中添加 maven { url "https://maven.google.com" },但是小菜也都有,并不能直接解决问题,如图: 修改前 build.gradle 之后查阅资料发现在 build.gradle 中 maven 顺序有关系,因为 jcenter 已经删除 android.arch.core 库,需要从 google.com 中下载,小菜调整顺序,rebuild 之后问题解决。 解决后... 
相关文章
文章评论
共有0条评论来说两句吧...

 
			 
				 
				 
				 
				 
				 
				 
				



 微信收款码
微信收款码 支付宝收款码
支付宝收款码