oynix

于无声处听惊雷,于无色处见繁花

几分钟完成发布开源库到jCenter


在AndroidStudio中导入开源库一般就是一句话的事:compile 'xxx.xx.xx:xx'。 实际上我们也可以通过这种方式来导入自己的开源库,方便自己的使用。AndroidStudio执行compile 'xxx.xxx.xx:xx' 会先到jCenter上查找该开源库,所以需要我们把自己的开源库库发布到jCenter上。无法直接在jCenter上发布开源库,要通过它的托管商–Bintray(Bintray托管着很多仓库,jCenter只是其中一个)来完成。

把自己平时经常用到的一些代码写到一起上传到jCenter,以后不管做什么项目一句话就能导入,算来还是一个比较实用的功能。

总体步骤概览

1. 注册Bintray账号并创建仓库
2. 准备开源库
3. 修改gradle文件
4. 编译并上传至Bintray
5. linked to jCenter


1. 注册Bintray账号并创建仓库

使用Bintray当然要先注册个账号,注册地址

注册界面
我选的是Sign up with Github
注册登录之后应该是这个样子, 点击Add New Repository


  • Name:仓库的名字,写了之后不能再改,记住该名字,后面上传时会用到;
  • Type:仓库类型,选择Maven
  • License:开源协议,随便选一个就好;
  • Description:仓库描述,随便写;

点击Create 完成仓库创建,到此第一步完成。


2. 准备开源库

备好你想要上传的开源库,有两种方式:

  1. AndroidStudio中new一个project,然后在project中new一个Module,类型选择Android Library.
  2. 直接修改当前Module的build.gradle(注意区分project的build.gradle文件和Module的build.gradle文件,前者在project根目录下,后者在对应的Module目录下)文件,将第一行的apply plugin: 'com.android.application 改为 apply plugin: com.android.library ,再把下面的applicationId "你的包名" 这一行删除(library是不允许有applicationId的).

两种方式最终结果都是得到了一个Android Library 类型的Module,在Module里添加你想要上传的开源库代码(我随便弄了一个,里面有个我常用到的加载App Icon的方法)。

到此第二步准备开源库完成


3. 修改gradle文件

还是那句话,注意区分project的build.gradle文件和Module的build.gradle文件,前者在project根目录下,后者在对应的Module目录下

  • 修改project的build.gradle文件,添加下面这两句话

    Maven Github地址:对应里面的说明选择使用的版本号
    Bintray Github地址:对应里面的说明选择使用的版本号

  • 修改Module的build.gradle文件(这步有点乱,认真看)
    需要配置3个信息:

  1. Bintray账号配置和Developer信息,告诉AndroidStudio传到哪及开发者介绍;
  2. Project信息,开源库的介绍;
  3. 上传配置,对以上3个信息的调用以及其他一些配置;

为了看起来条理清晰,我把能独立的部分都独立到单独文件里了,便于阅读,以下分别说明。

1. Bintray账号信息和Developer信息
AndroidStudio创建项目时默认会在project根目录下创建local.properties 文件并添加到了.gitignore 文件中(如果没有请自行创建并添加至.gitignore 中),在其中添加以下内容:

  • bintray.user:Bintray注册的用户名
  • bintray.apikey:Bintray的API key
  • developer.id:开源社区的昵称(一般指github,或是使用的其他开源社区)
  • developer.name:姓名
  • developer.email:邮箱地址

查看API key方法:

2. Project信息配置

开源库Module目录下新建project.properties文件,添加以下内容:

  • project.name:开源库名字
  • project.groupId:项目组ID,写包名
  • project.artifaceId:项目ID,写Module名
  • project.packaging:打包方式,写aar
  • project.siteUrl:项目主页,没有就写github地址
  • project.gitUrl:项目仓库地址
  • javadoc.name:javadoc主页显示的名称,写项目名字就好

3. 上传配置

开源库Module目录下新建bintrayUpload.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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'

// load properties
Properties properties = new Properties()

File projectPropertiesFile = project.file("project.properties")
if(projectPropertiesFile.exists()){
properties.load(projectPropertiesFile.newDataInputStream())
}

// read properties
def projectName = properties.getProperty("project.name")
def projectGroupId = properties.getProperty("project.groupId")
def projectArtifactId = properties.getProperty("project.artifactId")
def projectVersionName = android.defaultConfig.versionName
def projectPackaging = properties.getProperty("project.packaging")
def projectSiteUrl = properties.getProperty("project.siteUrl")
def projectGitUrl = properties.getProperty("project.gitUrl")
def javadocName = properties.getProperty("javadoc.name")


File localPropertiesFile = project.rootProject.file("local.properties")
if(localPropertiesFile.exists()){
properties.load(localPropertiesFile.newDataInputStream())
}
def developerId = properties.getProperty("developer.id")
def developerName = properties.getProperty("developer.name")
def developerEmail = properties.getProperty("developer.email")

def bintrayUser = properties.getProperty("bintray.user")
def bintrayApikey = properties.getProperty("bintray.apikey")


group = projectGroupId

// This generates POM.xml with proper parameters
install {
repositories.mavenInstaller {
pom {
project {
name projectName
groupId projectGroupId
artifactId projectArtifactId
version projectVersionName
packaging projectPackaging
url projectSiteUrl
licenses {
license {
name 'The Apache Software License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
developers {
developer {
id developerId
name developerName
email developerEmail
}
}
scm {
connection projectGitUrl
developerConnection projectGitUrl
url projectSiteUrl
}
}
}
}
}

// This generates sources.jar
task sourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
}

task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

// This generates javadoc.jar
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}

artifacts {
archives javadocJar
archives sourcesJar
}

// javadoc configuration
javadoc {
options{
encoding "UTF-8"
charSet 'UTF-8'
author true
version projectVersionName
links "http://docs.oracle.com/javase/7/docs/api"
title javadocName
}
}

// bintray configuration
bintray {
user = bintrayUser
key = bintrayApikey
configurations = ['archives']
pkg {
repo = "maven"
name = projectName
websiteUrl = projectSiteUrl
vcsUrl = projectGitUrl
licenses = ["Apache-2.0"]
publish = true
}
}

上传开源库的配置基本都是这样,不用改动什么,值得注意的是bintray 节点的repo 指的是第一步中创建的Maven仓库的名字,这两个名字要一致;此外开源库的版本号默认取的是project的版本号def projectVersionName = android.defaultConfig.versionName,如果有需要也可把这两个属性抽取到project.properties 文件中,便于管理。

最后一个操作,在开源库Modulebuild.gradle 文件末尾中添加如下代码apply from: 'bintrayUpload.gradle' 来调用配置文件。

至此第3步配置gradle文件完成。


4. 编译并上传至Bintray

  • 编译:打开AndroidStudio的Terminal窗口(一般在底部,没有的话点击顶部工具栏->View->Tools Windows-> Terminal),输入命令并回车:

gradlew install

等待一段时间后提示BUILD SUCCESSFUL,表示成功。

  • 上传,同样在Terminal中输入以下命令并回车:

gradlew bintrayUpload

等待一段时间后提示BUILD SUCCESSFUL,表示成功。

至此第4步编译并上传完成。


5. Linked to jCenter

按照上面4步,发送include request之后等待Bintray团队审核,审核完成后会收到邮件和站内信。

至此第5步Linked to jCenter完成。


如果遇到问题,请参考这两篇文章

  1. Android 项目打包到 JCenter 的坑
  2. Android 发布项目到 JCenter 遇到的各种坑

如有问题,欢迎指正~

------------- (完) -------------
  • 本文作者: oynix
  • 本文链接: https://oynix.com/2017/10/cb79da36ff8f/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

欢迎关注我的其它发布渠道