发布android库到Maven Central
目次
平时写一些小东西时有一部分代码是很常用到的,总不能每次都写一遍,每次都复制也太麻烦了,最简单的方式就发布到maven仓库,用拉取远程仓库的方式解决。因此,废了一顿劲发布到maven central中。也刚好记录下来,帮助有需要的人。
准备 #
在发布之前,需要先考虑发不到哪里,Android工程中常用的maven仓库有四个:
- Maven Central
- Jitpack
- Jcenter
随着Jcenter宣布设为只读代码库,可以选择的只剩了三家,加上Google是官方自己用的,实际上也只有两家。
Jitpack发布相对简单,之间也尝试过,有需要可以参考: Android library模块publish到JitPack完整流程。今天的是发布到maven central的。主要原因是可以用自己的域名- -
发布的流程很清晰:构建-签名-上传
Maven Central注册 #
发布到Maven Central首先要做的当然是注册账号了,中maven central repository右上角点击Sign In,后选择注册或者用Google、Github登录即可。
注册好之后是添加namespace,这样别人才能用com.example.lib:1.0.0这样的形式拉下来你的仓库。
生成token #
进到Setup Token-Based Authentication,点击"Generate User Token",按照提示生成一个新的token,保存下来等下需要用到。
添加namespace #
这里有两种选择,github提供的和自己的域名。如果用github提供的,你的github用户名是yourname,那namespace就是io.github.yourname。io.github这部分是固定的,你只需要修改yourname这部分,按照流程继续往下走就可以了。
如果用自己的域名,只需要在域名的DNS中添加一条Txt类型的记录,内容和maven central提示的相同即可。
构建和发布 #
代码的部分就略过了,还没有那么大能耐能教别人怎么写代码。写好之后就是构建和发布了。
在一个android项目中,一个模块有两种类型,要么是可以运行的应用,要么是提供某些逻辑功能的库。两者的差别只在使用的Gradle插件是com.android.application
(应用)还是com.android.library
(库)上。想要发布用到的当然是库这一类型的。
除了指明是哪种类型的模块的插件,还需要一些其他的。发布用到maven-publish
,它是Gradle提供的发布插件。
在发布到maven central时,是要要求有签名的,Gradle签名的插件一般是signing
,不同于应用的签名,这里的是用GPG,简单来说是一种非对称加密工具,详细的推荐阅读GPG入门教程。别担心,不会引入太多新的内容,只用到创建和输出密钥、分发到服务器中这三个操作。
或者,你也可以用com.vanniktech.maven.publish
这个Gradle插件,包含了发布、签名这两个部分,你只需要导入这一个就可以了。我在使用时,最新的版本是0.34.0
。
配置 #
你需要做的只是在想要发布的模块build.gradle.kts文件加上发布和签名两部分配置。因为有相关的插件依赖,所以还要加上依赖。
插件:
|
|
发布:
|
|
上面的这些都是我的配置,需要吧涉及到的地址改成你的。尤其是coordinates中的,这会影响到你发布到的namespace。
签名:
|
|
除了这些还有些,你还需要在gradle.properties中添加下配置.
|
|
执行 #
最后一步,执行gralde命令:
|
|
打完收工。
GPG命令 #
涉及到的GPG命令:
创建:
gpg --gen-key
创建之后需要拿到keyid才能继续执行后面的操作,获取keyid的命令:gpg --list-keys --keyid-format short
。
你会得到和下面类似的:
|
|
1231231231231231231231231231231234567890就是你的keyid。一般都用短id,也就是后八位34567890。
输出密钥:
gpg --armor --output public-key.txt --export {keyid}
执行后,你会得到很长的一串字符,这就是你的私钥。
发布keyid到服务器:
gpg --keyserver keyserver.ubuntu.com {keyid}
有三个服务器可选,差不多…
- keyserver.ubuntu.com
- keys.openpgp.org
- pgp.mit.edu
这些在GPG入门教程中都是有的。
总结 #
踩坑 #
- 签名
- 签名用了很久才配置好,开始用导出的pgp私钥文件路径,结果不行。试过读出文字,也不行。中间还改了好多种配置,最后把全部内容放上去才好。
- keyid一定要发布到server!
- 不用在build.gradle中自己加maven仓库,替你试过了,不好使….
步骤 #
最后总结一下步骤,以防看着迷糊。
- 注册maven central账号,添加namespace,生成token
- 生成pgp密钥,发布keyid到服务器
- gradle添加插件、发布配置
- 执行gradle脚本发布