安卓插件及发布jenter

疫情刚好静下心来回归过去的工作,工作以后往往都是往前跑,其实偶尔多回归下技术,沉淀下来,这是博主一直想做的插件和发布,以前总是各种事情耽搁,本章源码link,麻烦多多关注点星。

1.创建项目

   先创建一个基本项目,此处注意请尽量空白项目,避免乱七八糟报错。

在这里插入图片描述

2.创建插件库

2.1 删除所有java代码和res资源

2.2 创建groovy以及代码编写

2.3 创建meta-inf

在这里插入图片描述

2.4 build.gradle 讲解

//发布bintray的插件
apply plugin: 'com.novoda.bintray-release'
//groovy编译插件
apply plugin: 'groovy'

dependencies {
    compile "com.android.tools.build:gradle:3.4.1"
    compile group: 'org.javassist', name: 'javassist', version: '3.20.0-GA'
    //gradle sdk 依懒sdk
    compile gradleApi()
    //groovy sdk 依懒sdk
    compile localGroovy()
}

/**
 * 发布到bintray的配置
 */
publish {
    userOrg = 'applehusp' //此处一定要有,不然会报错
    repoName='com.model.buildgradle'   //对应仓库名
    groupId = 'com.model.buildgradle'  //对应仓库名
    artifactId = 'model-plugin'    //仓库的包名
    publishVersion = '1.0.0'       //包对应的版本名
    desc = 'this is a frame for android base'
    website = 'https://github.com/apple317/ModelPlugin.git'   //此处对应代码仓库地址
}

2.4 插件代码讲解

首先groovy脚本很想java,如果你有java功底,可以直接上手编写。

class ModelPlugin implements Plugin<Project> {

    //默认是app,直接运行assembleRelease的时候,等同于运行app:assembleRelease
    String compilemodule = "app"

    void apply(Project project) {
        String taskNames = project.gradle.startParameter.taskNames.toString()
        System.out.println("taskNames is " + taskNames)
        String module = project.path.replace(":", "")
        System.out.println("current module is " + module)
        AssembleTask assembleTask = getTaskInfo(project.gradle.startParameter.taskNames)
        if (assembleTask.isAssemble) {
            fetchMainModulename(project, assembleTask)
            System.out.println("compilemodule  is " + compilemodule)
        }

        if (!project.hasProperty("RunAlone")) {
            throw new RuntimeException("you should set isRunAlone in " + module + "'s gradle.properties")
        }

        //对于isRunAlone==true的情况需要根据实际情况修改其值,
        // 但如果是false,则不用修改
        boolean isRunAlone = Boolean.parseBoolean((project.properties.get("RunAlone")))
        String mainmodulename = project.rootProject.property("mainmodulename")
        if (isRunAlone && assembleTask.isAssemble) {
            //对于要编译的组件和主项目,isRunAlone修改为true,其他组件都强制修改为false
            //这就意味着组件不能引用主项目,这在层级结构里面也是这么规定的
            if (module.equals(compilemodule) || module.equals(mainmodulename)) {
                isRunAlone = true
            } else {
                isRunAlone = false
            }
        }
        project.setProperty("RunAlone", isRunAlone)

        //根据配置添加各种组件依赖,并且自动化生成组件加载代码
        if (isRunAlone) {
            project.apply plugin: 'com.android.application'
            if (!module.equals(mainmodulename)) {
                project.android.sourceSets {
                    main {
                        manifest.srcFile 'src/main/independent/AndroidManifest.xml'
                        java.srcDirs = ['src/main/java', 'src/main/independent/java']
                        res.srcDirs = ['src/main/res&#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值