相信大家在使用Android Studio开发项目时,都感受到了使用Gradle来管理项目,以及添加第三方依赖的方便性。同时作为一个Android程序猿,肯定也希望有一款自己的开源库受到大家的认可,不管是出于自己的虚荣,还是为了开源的精神,我们都应该掌握掌握这个装逼神技😄。正好前段时间写了一个自定义View的开源库BezierIndicator,虽然项目简单,正好可以拿来尝试一下发布开源库的操作。
准备
首先我们要知道,Android开源库有两个常用的开源网站JitPack以及JCenter,这两个网站都可以发布我们的开源库,发布成功后都可以在项目gradle中通过一行代码引入开源库,那它们有什么区别呢?
在引入JitPack开源库的时候,我们需要在项目根目录的build.gradle中添加这行代码
allprojects {
repositories {
jcenter()
maven { url 'https://jitpack.io' }
}
}
而引入JCenter的开源库时只需要到项目build.gradle中添加依赖代码就行了。
需要准备以下内容
- 新建一个项目,并在项目中添加一个Library Moudle作为你要发布的开源库
- 一个github账号
- 一个bintray账号
项目结构如下
发布到JitPack
1、在项目根目录build.gradle添加Maven插件
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
2、在要上传的library的build.gralde文件添加如下代码:
// 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
就可发布开源库,成功后就可在项目中直接引用
allprojects{
repositories{
...
maven { url 'https://jitpack.io' }
}
}
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的服务插件
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中添加如下代码
apply plugin: 'com.jfrog.bintray'
apply plugin: 'com.github.dcendents.android-maven'
2、Bintray在上传库时需要一个POM文件,可以通过刚引入的Maven插件自动生成,但还是需要我们给出groudId和version的值,只需在库的build.gradle中添加如下代码
//JCenter 添加
group = 'com.lcm.bezierIndicator' // 这里需要和真实包名对应,不能随便填写
version = '1.0.0' // 指定版本号
3、为了与Maven标准对应,你需要在库module的build.gradle中添加几个task,分别生成Jar、Javadoc和JavadocsJar,只需要将下面三个task代码添加到库的build.gradle文件即可。
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中添加如下代码:
artifacts {
archives generateJavadocsJar
archives generateSourcesJar
}
4、将前面获取的Bintray的user以及apikey写在local.properties文件中,这个文件最好不要添加到版本控制中
bintray.user=your_username
bintray.apikey=your_apikey
5、继续在 Library module的build.gradle中添加上传必须的代码块
//需要在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
按钮提交申请
提交后几个小时后就会有邮件通知添加成功,添加成功后就会变成如下景象
<dependency>
<groupId>com.lcm.bezierIndicator</groupId>
<artifactId>bezierIndicator</artifactId>
<version>1.0.0</version>
<type>pom</type>
</dependency>
6、接下来就可以在项目中直接引用了
compile 'com.lcm.bezierIndicator:bezierIndicator:1.0.0'
小结
发布到JitPack的操作比较简单,只不过引用比Jcenter多一句代码而已,怕麻烦的可以直接发布到JitPack上。发布到JCenter操作比较繁琐点,反正多掌握一点技巧总不会有错的😄,同时也发现一种简化上传JCneter的方法-极简上传Library到JCenter,有兴趣的可以尝试尝试。
参考文章: