美文网首页
Android发布库到MavenCentral说明以及踩坑解决

Android发布库到MavenCentral说明以及踩坑解决

作者: Kepler_II | 来源:发表于2021-04-15 15:00 被阅读0次

    Android发布库到MavenCentral说明以及踩坑解决

    jcenter即将停止服务,由于之前我们好多库都是发布到jcenter上,现在必须抓紧找下家才行,我们针对jitpack和mavencentral进行了调研,结果如下:

    jitpack的发包必须需要将源码发布到github上,这中情况对于我们的产品自用SDK的情况非常不友好
    mavencentral不用公布源码到github上,和自建Nexus Repository Manager去管理发布库很类似,只要把需要配置的gradle选项配置到项目中去,并且把签名和发布地址以及账号配置好就可以通过Android Studio的gradle进行操作把包上传到Sonatye上进行Android包管理。

    发包到mavencentral的具体操作流程和踩坑总结

    一、 Sonatype jira的账号申请以及项目申请

    首先;我们到SonatypeJira上边注册SonatypeJira账号。
    需要在SonatypeJira中的issues projects界面中创建一个issue用来申请一个项目。

    由于截图篇幅有限最下面的Already Synced to Central 选择 No,因为这是我们新申请的。

    创建完成后,管理员会在第一时间处理新建的这个issue,等待管理员回复就可以,在后续的回复,如果不是在github上的开源项目,你要用自己的域名就需要在管理员的指导下完成域名的验证工作。域名验证完成后,这个issue的状态就回标识为RESOLVED,下面就可以准备使用gradle上传你的库了,只要在group id下的所有库都支持。

    所有的issue操作都会同步到注册账号的邮箱上边,可以及时了解所有动态。

    二、gradle脚本的准备

    具体的详细配置官方说明Deploying to OSSRH with Gradle - Introduction,通过这篇文章可以找到标准的的发布包用的gradle脚本模板。下面我把我这用到的和大家分享一下完整版。

    apply plugin: 'maven'
    apply plugin: 'signing'
    
    
    def ossrhUsername = "在SonaType上申请的账号"
    def ossrhPassword = "在SonaType上申请的密码"
    
    def PUBLISH_GROUP_ID = 'com.demo.sdk' //这里可以不是直接申请时候的groupId只要开头是就可以
    
    def PUBLISH_ARTIFACT_ID = "引用库的artifactId"
    
    def PUBLISH_VERSION = android.defaultConfig.versionName //这个是直接获取的库gradle里配置好的版本号,不用到处修改版本号,只需要维护一份就可以。
    
    //签名
    signing {
        required { gradle.taskGraph.hasTask("uploadArchives") }
        sign configurations.archives
    }
    
    uploadArchives {
        repositories {
            mavenDeployer {
    
                beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
    
                repository(url: "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/") {
                    authentication(userName: ossrhUsername, password: ossrhPassword)
                }
    
                snapshotRepository(url: "https://s01.oss.sonatype.org/content/repositories/snapshots/") {
                    authentication(userName: ossrhUsername, password: ossrhPassword)
                }
    
                pom.groupId = PUBLISH_GROUP_ID
                pom.artifactId = PUBLISH_ARTIFACT_ID
                pom.version = PUBLISH_VERSION
    
                pom.project {
                    name '发布库的简单名称'
                    packaging 'aar' //我这里发布的是安卓的包,所有写的aar
                    // optionally artifactId can be defined here
                    description '发布包的描述'
                    url '可以写公司官网地址或github个人页面地址'
    
                    scm {
                        connection 'scm:替换成项目git地址'
                        developerConnection 'scm:替换为git开头的项目地址'
                        url '项目首页,可以是github项目的主页'
                    }
    
                    licenses {
                        license {
                            name 'The Apache License, Version 2.0'
                            url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                        }
                    }
    
                    developers {
                        developer {
                            id '这里填写申请账号时候的全名就可以'
                            name '这里随意填写就可以'
                            email '最好是申请账号时用的邮箱'
                        }
                    }
                }
            }
        }
    }
    

    三、 签名

    之所以签名作为这一块来说说明它很重要也很容易踩坑。我这里用的是Mac系统所以就以Mac系统来说明了。

    1. 创建GPG密钥
    在往上找到一些关于创建GPG密钥的文章,安装方式各异,我这里使用的命令行安装,不过首先Mac电脑上需要安装了brew才可以,相信brew怎么安装作为程序员的我们应该是必不可少的,这里就不赘述了,下面说一下如何安装GPG:
    在命令行使用如下命令

    brew install gpg
    

    等待安装完成就可以。

    2. 创建密钥
    在命令行中使用如下命令作为开始

    gpg --full-gen-key
    

    在执行过程会让选择加密方式,我这边使用的是RSA and RSA,长度输入4096,过期时间直接回车代表不过期,然后提示让输入User ID和一个邮箱,这里可以使用注册SonaType时候用的用户名和邮箱,当然也可以用其他的。接着最后一步输入O,注意这里是大写的O不是零,然后回车接着就会提示让输入密码,输入一次后还会有一次确认输入,这个密码一定要记住后期会用到。

    以上操作完成后,你可以到你的个人账号的目录去查看一下会有这么一个目录存在

    ~/.gnupg/openpgp-revocs.d
    

    在这个目录下有一个.rev文件,记住这个文件名称的末尾8位字符在后续的配置文件会用到。

    接下来创建gpg文件,通过如下命令创建,我建议先在命令行中把目录切到~/.gnupg/下再去执行如下命令这样不会找不到文件。

    gpg --export-secret-keys -o secring.gpg
    

    执行以上命令创建文件secring.gpg,创建过程会让输入上边我们创建密钥过程中输入的密码,验证完密码后会在~/.gnupg目录生成secring.gpg文件,这个文件的路径我们后续在生成配置文件的时候也需要。

    3. 设置配置文件
    在个人目录下.gradle创建配置文件gradle.properties,文件内容如下

    signing.keyId=刚才获取的秘钥后8位
    signing.password=之前我们执行命令时设置的密码
    signing.secretKeyRingFile=刚才生成的secring.gpg文件目录
    ossrhUsername=sonatype用户名
    ossrhPassword=sonatype密码
    

    记住这个配置文件一定放在.gradle目录下才会生效,这个问题困扰了我小半天时间。也就是完整路径是

    ~/.gradle/gradle.properties
    

    如果路径不对或者这个配置文件不对,上传包到SonaType是没有问题,但是在操作close的时候你会发现出现问题了,签名总是出错,如果路径不对就会直接跳过签名这一步,然后在SonaType在操作上传好的包时根本到不了release这一步。如果想看看什么效果自己可以去试验一下。

    四、发布的准备

    通过上面的步骤我们已经把我们的要发布的包传到SonaType的nexus repository manager系统里了。


    可以看到图中我写了很多字,由于我这里没有预发布的包所以我就以红框为例了,大家可以自行去发布查看具体的结构。

    发布的步骤很简单,分为一下几步操作就可以

    1. 登录nexus repository manager平台
    我们上传到库都托管到nexus repository manager平台,所以我们需要使用之前申请的sonaType的账号去登录这个托管平台来管理我们的包。

    2. 通过点击Staging Repositories去找到我们刚刚发布的包并继续发包流程。
    包刚上传上来你会发现只有Refresh、Close和Drop可以点击,这个时候我们如果想立即发布直接点击Close,通过页面的下半部分可以看到处理的状态,刷新需要我们点击Refresh进行刷新,每一次点击Close都是一个单独的Task,如果Task中每个环节都是绿色通过的状态,那么这个包的状态就回变成closed,Release菜单就可以点击发布了,操作完后等待差不多10分钟就可以访问发布包的新版本了。

    本文在开源项目:https://github.com/Android-Alvin/Android-LearningNotes 中已收录,里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中...

    相关文章

      网友评论

          本文标题:Android发布库到MavenCentral说明以及踩坑解决

          本文链接:https://www.haomeiwen.com/subject/saidlltx.html