Android 开源库发布到MavenCentral,jitpack (gradle-maven-publish-plugin+io.github域名)

211 阅读6分钟

本文已参与[新人创作礼]活动,一起开启掘金创作之路

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第5天,点击查看活动详情

背景

如果你的aar库没有引用第三方库,也不需要远程仓库的话,只是想打成aar引用,那么看这个文章即可:blog.csdn.net/zx_android/…

如果你需要把本地引用了很多个第三方库的工程变成aar供别人远程使用的话,那么就需要上传到MavenCentral了。 如果你有自己的域名那么直接去看郭神的文章 如果你跟我一样,懒得去申请域名,就可以继续往下看了。

注册Sonatype账号

Sonatype公司是负责维护Maven Central的,他们使用Sonatype Nexus Repository Manager 这个产品来管理Maven中央仓库,所以我们要使用Maven Central的话,首先需要注册Sonatype账号。注册地址:issues.sonatype.org/secure/Dash… up进行注册图片

  • Email: 邮箱帐号,在 Sonatype 上的相关操作,会通知到这个邮箱帐号
  • Full name: 填写联系人名称
  • Username: Sonatype 的登录帐号
  • Password: 登录密码,要求至少8位,并带有大小写字母和字符

/ 创建Project工单 /注册完成后,就可以进行登录了,登录进去后,可以发现,他其实是一个JIRA系统,在这个系统中,我们需要创建一个Ticket,用来申请我们自己的Group Id,这个Group Id熟悉maven的应该都了解,可以看成我们自己库的顶级域名,可以用它来和artifactId以及version组合,简称GAV,来定位到我们的某个版本的资源。点击Create来创建一个Ticket图片

图片

  • Project: 选择 Community Support - Open Source Project
  • Repository Hosting (OSSRH)
  • Issue Type: 选择 New Project
  • Summary: 可填写jar 包名称
  • Description: 描述信息
  • Group Id: Group Id的命名规则为一个域名的反向名称,,可以采用io.github.[username]的方式,比如我上面填写的io.github.xiaozeiqwe8。
  • 这边可填写的内容会有2种选择,一种是使用自己的域名,另一种就像我上面填写的那样,使用github仓库地址,这里推荐使用自己的github仓库地址作为Group Id,因为这个会影响到后面工作人员要求验证的方式的不同,验证起来会方便些。
  • 另外,如果使用的是github地址,需要注意的是需要使用io.github而不是com.github,如果你是用com,工作人员会要求你修改,并会附上这个文档让你查看原因central.sonatype.org/changelog/#…
  • Project URL: 项目地址,可以是github仓库地址,也可以是官网地址
  • SCM URL: 项目的 Git 地址

填写完成这些信息后,就可以create了,create完成后,你的单子会自动assign给工作人员图片

/ 开通仓库 /工作人员会根据你填写的GroupId的方式,来要求你配合完成一些验证,会在comments里面回复你,在这边,我只说明github的验证方式,域名方式则可自行百度查看验证方式。图片

然后要求我们在自己的github账号里创建一个public的名称为你这个Ticket的repository,很简单,直接创建一个,注意 Repository名称以及权限是public即可图片

图片

这样就完成了,然后我们就可以立马去刚刚的Ticket的comments里面告诉工作人员,我们已经完成了这一步图片

接下来的步骤,我们就是等待了,等待工作人员回复完成即可进行下一步了,我在这一步等待的时间很快,应该不到半小时,至于为什么要等待,可以查看官网的解释central.sonatype.org/faq/a-human…](p3-juejin.byteimg.com/tos-cn-i-k3…)

等待到结果会像这样,这时候,我们也不忘谢谢工作人员。到这一步,我们的Maven仓库就已经可以使用了,使用这个地址进行登录s01.oss.sonatype.org,用户名密码就是你上面注册的工单系统的账密,接下来我们就可以准备我们需要上传的库了。

创建密钥

到这里就可以从郭神的这里开始看了 因为郭神使用的这个框架更简单的: github.com/vanniktech/… 在这里插入图片描述 之后基本都可以发布成功。

那么之后如果你的库写了新的版本怎么更新呢?这里补充一下 如果更新或者上传的过程中出现了一些问题呢?这里补充一下

更新的话,就修改下gradle.properties中的VERSION_NAME版本号后重新publish,close,release即可。

问题汇总

回顾打包流程:(Android Studio左下角选择Gradle -> 切换到对应module的Tasks->pushlishing->publish)

1.打包上传没有Tasks选项的情况 Android Studio 4.2+ task默认是关闭的。Settings - Experimental - 取消勾选 “Do not build Gradle task list during Gradle sync” - 然后重新sync一次,你就能看到Tasks了。

2.当你在Android Studio中打包aar并上传的时候,可能出现这个错误: Direct local .aar file dependencies are not supported when building an AAR. 那么此时如果你的第三方包里面的aar不重要可以删除,那么你可以把它们都删除以后再打包 那么或者也可以把aar的后缀改为zip,然后解压,提取里面的jar包和so文件也可以(前提是里面的res你都不需要)。

3.如果你的工程里面有aar并且打包没报错,那么可能会出现无法依赖的问题,比如: Missing required attribute: dependency groupId POM,可以看这里 在这里插入图片描述

4.本地打包上传没问题了,也上传到s01.oss.sonatype.org/#stagingRep… 这里了 此时你需要close并且release,问题来了,你close失败了,为什么会失败呢?原因可以在这里查看: 在这里插入图片描述 我遇到的错误呢就是这个了:Upload your public key and try the operation again. 让我上传公钥,我第一次上传的时候也没说这茬啊,算了,不记得了,先看看怎么解决吧。 然后就搜到这个,上传以后解决了: GPG 使用 Maven 签名后发送到中央仓库提示 Upload your public key and try the operation

进入keys.openpgp.org输入邮箱查询果然没有,![在这里插入图片描述](p3-juejin.byteimg.com/tos-cn-i-k3…) 导出之后,再次上传,再次通过邮箱查询,有了结果,此时再回到s01.oss.sonatype.org/#stagingRep…

好了,在这里记录一下遇到的各种问题,希望能帮到大家。

附加jitpack的上传

jitpack相对maven来说要简单很多

1.最外层的build.gradle添加插件
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
2.需要打包的module的build.gradle添加插件
apply plugin:'com.github.dcendents.android-maven'
group='com.github.xx'
3.github上面找到自己的项目

选择Releases -> new Releases并发布

4.进入jitpack拷贝自己的项目地址

Look up -> get in 即可