侧边栏壁纸
博主头像
Z同学博主等级

工作磨平激情前,坚持技术的热忱。 欢迎光临Z同学的技术小站。 分享最新的互联网知识。

  • 累计撰写 290 篇文章
  • 累计创建 57 个标签
  • 累计收到 98 条评论

Android Studio 使用 maven-publish 进行多渠道aar 打包

Z同学
2022-02-12 / 0 评论 / 1 点赞 / 706 阅读 / 1,444 字
温馨提示:
本文最后更新于 2022-02-12,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

介绍

原先在使用下面的介绍方法中,实现了aar多渠道不同Flavors的代码进行打包。

Android Maven 打包不同的Flavors 的aar文件 (zinyan.com)

但是之后,不知道是否更新问题还是项目问题。我的DefaultPublishArtifact 一直无法引用。编译的时候一直出错误。

image-20220212163836095

我本地的gradle 是有该库的。同时maven相较于 maven-publish 已经是过时版本了。

想了想之后,决定放弃使用maven了。然后发现了更简单的编译和配置。

打包不同的Flavors

例如modulebuild.gradle 文件中的配置如下

productFlavors {
    zin {
       ...
    }
    sdk {
       ...
    }
}
...
 apply from: 'gitlab.gradle'

因为我的所有maven库打包的结果配置是放在了gitlab.gradle文件。

所以主要就是在gitlab.gradle中进行配置。

apply plugin: 'maven-publish'

afterEvaluate {
    publishing {
        publications {
            //SDK Release 版本
            sdkRelease(MavenPublication) {   //这个的 sdkRelease 名称是可以随意进行定义的
                from components.sdkRelease  //关键是这个地方的值该如何配置的问题。
                groupId = 'cn.zinyan.util'
                artifactId = 'xxxxx'
                version = '1.0.1'
            }
            //SDK Dev 版本,打包数据将会进行
            sdkDev(MavenPublication){
                from components.sdkRelease
                groupId = 'cn.zinyan.util.dev'
                artifactId = 'xxxxx'
                version = '1.0.1.1'
            }

            // Release 版本
            zinRelease(MavenPublication) {
                from components.zinRelease
                groupId = 'cn.zinyan.util.zin'
                artifactId = 'xxxx'
                version = '1.0.1'
            }
        }
        repositories {
            maven {
                def mavenDirPath = file('D:\\Demo')
                url = "file://${mavenDirPath.absolutePath}"
            }
        }
    }
}

我们在上面的示例中。

容易弄混的就是 from components.sdkRelease 这个在Google 的示例中写的是release 。而我上面写的是sdkRelease 为什么会这样?

那是因为components 后面跟着的数据需要是 variant值。

image-20220212164906105

就是我们的libs项目的 Active Build Variant 的值,只有这个值写对了。脚本在执行的时候才知道需要编译哪个分支的代码,并生成pom文件等。

在上面的示例中,我添加几个打包编译的环境。

上面的配置完毕后,我们需要通过Gradle 面板执行相应的Task 进行编译aar库

image-20220212165346014

配置完毕之后。我们可以将会看到一个publishing的目录下,有一长串的Task任务。

例如:

publish 就会将我publications配置下的所有版本全部打包一遍。

我们如果只想编译 sdkRelease 的版本。执行:publishSdkReleasePublicationToMavenRepository 就可以了。

由于我的需求是打包后通过git上传。到这里就结束了。

1

评论区