使用Maven-Publish发布多渠道aar包

59 篇文章 0 订阅

推荐阅读这篇文章[Android开发笔记]多渠道打包(动态替换包名、常量、资源文件等)

  1. 在module中配置多个渠道
android {
    compileSdkVersion 29
    buildToolsVersion "29.0.2"

    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
        
    //配置多个渠道
    productFlavors {
        cqtest {
            dimension = "full"
        }
        pre {
            dimension = "full"

        }
        dev {
            dimension = "full"
        }
    }
}

2.在module的目录下新建一个gradle文件(这里我将其命名为mavenpublish.gradle)(可以通过复制build.gradle文件的方式来创建一个gradle文件),该文件与module中的build.gradle文件同级。如图所示:

 3.在新建的gradle文件中添加如下脚本

apply plugin: 'maven-publish'

publishing {
    publications {
        //重庆测试环境
        cqtest(MavenPublication) {//cqtest即为渠道的名称,可以随意取
            groupId = 'cn.companyname'//公司域名
            artifactId = 'lib-mycar-cqtest'//该aar包的名称
            version = '1.0.6'//版本号
            def projectName = project.getName()
            artifact "build/outputs/aar/mycar-cqtest-release.aar"//对应该渠道打包出来的aar所在的目录(如何打包请往下看)
            pom.withXml{
                def dependenciesNode = asNode().appendNode("dependencies")
                configurations.implementation.allDependencies.forEach(){
                    Dependency dependency ->
                        if (dependency.version != "unspecified" && dependency.name != "unspecified"){
                            def dependencyNode = dependenciesNode.appendNode('dependency')
                            dependencyNode.appendNode('groupId', dependency.group)
                            dependencyNode.appendNode('artifactId', dependency.name)
                            dependencyNode.appendNode('version', dependency.version)
                        }
                }
            }
        }

        //开发环境
        dev(MavenPublication) {
            groupId = 'cn.companyname'
            artifactId = 'lib-mycar-dev'
            version = '1.0.6'
            def projectName = project.getName()
            artifact "build/outputs/aar/mycar-dev-release.aar"
            pom.withXml{
                def dependenciesNode = asNode().appendNode("dependencies")
                configurations.implementation.allDependencies.forEach(){
                    Dependency dependency ->
                        if (dependency.version != "unspecified" && dependency.name != "unspecified"){
                            def dependencyNode = dependenciesNode.appendNode('dependency')
                            dependencyNode.appendNode('groupId', dependency.group)
                            dependencyNode.appendNode('artifactId', dependency.name)
                            dependencyNode.appendNode('version', dependency.version)
                        }
                }
            }
        }

        //预发布环境
        pre(MavenPublication) {
            groupId = 'cn.companyname'
            artifactId = 'lib-mycar-pre'
            version = '1.0.6'
            def projectName = project.getName()
            artifact "build/outputs/aar/mycar-pre-release.aar"
            pom.withXml{
                def dependenciesNode = asNode().appendNode("dependencies")
                configurations.implementation.allDependencies.forEach(){
                    Dependency dependency ->
                        if (dependency.version != "unspecified" && dependency.name != "unspecified"){
                            def dependencyNode = dependenciesNode.appendNode('dependency')
                            dependencyNode.appendNode('groupId', dependency.group)
                            dependencyNode.appendNode('artifactId', dependency.name)
                            dependencyNode.appendNode('version', dependency.version)
                        }
                }
            }
        }
    }
    repositories {
        maven {
        	//maven仓库的地址
			url = "http://nexus.isuanyun.com/repository/maven-public/"
			//仓库的用户名及密码
              credentials {
                  username ''
                 password ''
              }
             //👇这是一个本地仓库地址即D盘的maventestrepository文件夹,可以用来测试发布aar包,发布之后的aar将存放于该地址
            //url = "file://d:/maventestrepository"
        }
    }
}

4.在module的build.gradle中添加如下脚本
在build.gradle的最顶部添加 apply from: ‘mavenpublish.gradle’

//把mavenpublish换成自己的文件名
apply from: 'mavenpublish.gradle'

添加task,与android{}同级
注意:generatePomFileForCqtestPublication,其中Cqtest即为渠道名,必须和mavenpublish.gradle文件中定义的名称完全一致。

android{
//~~~~~~
}
//编译发布到maven
task deploy{
    dependsOn tasks.clean
    dependsOn tasks.build
    dependsOn tasks.publish
    tasks.preBuild.mustRunAfter(tasks.clean)
    //👇
    tasks.generatePomFileForCqtestPublication.mustRunAfter(tasks.build)
    tasks.generatePomFileForDevPublication.mustRunAfter(tasks.build)
    tasks.generatePomFileForPrePublication.mustRunAfter(tasks.build)
}

5.打包各个渠道的aar包
可以通过gradle打包,如图所示:

 打包后的文件存放路径为:module—build—outputs—aar,如图所示:

6.发布各个渠道的aar包到maven仓库
也是通过gradle来发布,如图所示:

 

7.引用远程依赖

  • 发布成功之后,在需要依赖该aar包的项目build.gradle中添加maven仓库地址即在mavenpublish.gradle文件中配置的maven仓库地址。

 

allprojects {
    repositories {
        google()
        jcenter()
        maven { url 'https://jitpack.io' }
        //添加aar包的maven仓库地址
        maven {
            url = "file://d:/maventestrepository"
        }
    }
}


在需要依赖该aar包的module的build.gradle中添加依赖

implementation 'cn.companyname:lib-mycar-cqtest:1.0.6'


————————————————
版权声明:本文为CSDN博主「卧龙跃马」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/LZK_Dreamer/article/details/108344644

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值