装逼必备-发布开源库

相信大家在使用Android Studio开发项目时,都感受到了使用Gradle来管理项目,以及添加第三方依赖的方便性。同时作为一个Android程序猿,肯定也希望有一款自己的开源库受到大家的认可,不管是出于自己的虚荣,还是为了开源的精神,我们都应该掌握掌握这个装逼神技😄。正好前段时间写了一个自定义View的开源库BezierIndicator,虽然项目简单,正好可以拿来尝试一下发布开源库的操作。

准备

首先我们要知道,Android开源库有两个常用的开源网站JitPack以及JCenter,这两个网站都可以发布我们的开源库,发布成功后都可以在项目gradle中通过一行代码引入开源库,那它们有什么区别呢?

在引入JitPack开源库的时候,我们需要在项目根目录的build.gradle中添加这行代码

1
2
3
4
5
6
allprojects {
repositories {
jcenter()
maven { url 'https://jitpack.io' }
}
}

而引入JCenter的开源库时只需要到项目build.gradle中添加依赖代码就行了。

需要准备以下内容

  1. 新建一个项目,并在项目中添加一个Library Moudle作为你要发布的开源库
  2. 一个github账号
  3. 一个bintray账号


项目结构如下

项目目录结构

发布到JitPack

1、在项目根目录build.gradle添加Maven插件

1
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'

2、在要上传的library的build.gralde文件添加如下代码:

1
2
3
4
// JitPack Maven
apply plugin: 'com.github.dcendents.android-maven'
// Your Group
group=‘com.github.你的github_username'

3、项目发布到github上,在github项目主页创建一个release或者Tag:

4、将项目的仓库提交到JitPack,Jitpack可使用github账号授权登录:

5、点击Get it就可发布开源库,成功后就可在项目中直接引用

1
2
3
4
5
6
allprojects{
repositories{
...
maven { url 'https://jitpack.io' }
}
}
1
compile 'com.github.linchenming0516:BezierIndicator:1.0.0'

发布到JCenter

Bintray准备

1、注册Bintray,这里注意注册邮箱不能是国内的邮箱,所以自备梯子吧。

2、获取注册完的User账号及APIKey,后面上传有用

3、进入你的Bintray主页,注册一个Maven仓库

新建仓库name最好写成maven

项目gradle配置

1、在项目根目录build.gradle中配置Bintray以及Maven的服务插件

1
2
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'

可以去插件的github地址获取最新插件的版本号,添加完插件后,需要让 library module 依赖新的插件,在库的build.gradle中添加如下代码

1
2
apply plugin: 'com.jfrog.bintray'
apply plugin: 'com.github.dcendents.android-maven'

2、Bintray在上传库时需要一个POM文件,可以通过刚引入的Maven插件自动生成,但还是需要我们给出groudId和version的值,只需在库的build.gradle中添加如下代码

1
2
3
//JCenter 添加
group = 'com.lcm.bezierIndicator' // 这里需要和真实包名对应,不能随便填写
version = '1.0.0' // 指定版本号

3、为了与Maven标准对应,你需要在库module的build.gradle中添加几个task,分别生成Jar、Javadoc和JavadocsJar,只需要将下面三个task代码添加到库的build.gradle文件即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
task generateSourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs //通过from函数指定代码源,这里是默认代码源
classifier 'sources'
}

task generateJavadocs(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs //source指定了代码源
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

//这里dependsOn意为仅当generateJavadocs完成后才开始本task
task generateJavadocsJar(type: Jar, dependsOn: generateJavadocs) {
from generateJavadocs.destinationDir
classifier 'javadoc'
}

为了将你生成的源代码和Javadoc Jar文件添加到Maven中,你需要将task添加到一个archive中,只需要向库module下的build.gradle中添加如下代码:

1
2
3
4
artifacts {
archives generateJavadocsJar
archives generateSourcesJar
}

4、将前面获取的Bintray的user以及apikey写在local.properties文件中,这个文件最好不要添加到版本控制中

1
2
bintray.user=your_username
bintray.apikey=your_apikey

5、继续在 Library module的build.gradle中添加上传必须的代码块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//需要在local.properties文件中取值
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())

bintray {
user = properties.getProperty("bintray.user")
key = properties.getProperty("bintray.apikey")

pkg {
repo = 'maven'
name = 'com.lcm.bezierIndicator'

version {
name = '1.0.0'
desc = "BezierIndicator"
released = new Date()
vcsTag = '1.0.0'
}



licenses = ['Apache-2.0']
//git管理地址
vcsUrl = 'https://github.com/lichenming0516/BezierIndicator.git'
//项目github地址
websiteUrl = 'https://github.com/lichenming0516/BezierIndicator'
}

configurations = ['archives']
}

在选择License时,可以参考这张图,来自阮一峰老师的博文。刚才说过,选择License只是选择一种权利,选好之后可以直接添加就好。GitHub在创建Repo时可以快速添加License文件。

开始进行上传

1、选择AndroidStudio Gradle视图,菜单点击View->Tool Windows->Gradle调出,点击图标栏的Gradle图标。

2、输入install,点击OK。这时会执行Maven相关的task,完成后会在build目录下生成必要的文件

3、成功后再次点击Gradle图标,输入bintrayUpload 并点击OK

上传成功后,可以在你的Bintray的maven仓库中看见上传完成的项目

4、点击进入maven仓库中的项目,会有一个提示让你七天内公开,点击Publish

5、为了让所有开放者使用,我们需要将类库添加到JCenter中,点击 Add to JCenter 按钮提交申请

提交后几个小时后就会有邮件通知添加成功,添加成功后就会变成如下景象

1
2
3
4
5
6
<dependency>
<groupId>com.lcm.bezierIndicator</groupId>
<artifactId>bezierIndicator</artifactId>
<version>1.0.0</version>
<type>pom</type>
</dependency>

6、接下来就可以在项目中直接引用了

1
compile 'com.lcm.bezierIndicator:bezierIndicator:1.0.0'

小结

发布到JitPack的操作比较简单,只不过引用比Jcenter多一句代码而已,怕麻烦的可以直接发布到JitPack上。发布到JCenter操作比较繁琐点,反正多掌握一点技巧总不会有错的😄,同时也发现一种简化上传JCneter的方法-极简上传Library到JCenter,有兴趣的可以尝试尝试。




参考文章:

  1. Android 发布开源库到 JitPack、jCenter
  2. 从零到一发布Android开源库
  3. 新版Bintray-极简上传Library到JCenter




坚持原创技术分享,您的支持将鼓励我继续创作!