新版Bintray下将Android Library 开源到JCenter 的正确姿势

前记

对于经历过Eclipse开发时代的人来说,如今在Android Studio中通过 compile 命令来添加外部库引用简直爽的不要不要的,在使用github上数以千计的开源库时,最常用方式就是:compile ‘com.android.support:recyclerview-v7:23.4.0’,那么如何让自己写的库也能通过这样的方式引用呢?

其实就是将自己写好的库打包发布到JCenter即可,本来看着非常简单,但是实际做起来每一步都有很多坑等着你去踩。经历过从入门到失败到放弃到成功的过程后,现在将一步步的过程和雷区记录下来,希望能帮助别人越过深坑直达彼岸~~~

准备工作

准备一个库

新建Module,选择Library

Android Studio建库

注册谷歌邮箱账号

我知道你不想翻墙,但你迟早需要这个账号的,早准备早升天。

注册Bintray账号

最终需要通过这个账号发布到JCenter上。注册地址官网:https://bintray.com/,这里就有一个坑,现在这个地址默认是注册组织的,注册后会有一个月试用期。

组织账号有试用期

我们一般需要的是个人类型,正确的注册地址为:

https://bintray.com/signup/oss

个人注册地址
这里是没有填写组织名称的。可以使用第三方注册,常用的就是 github账号,需要注意:如果github账号绑定的邮箱不是gmail邮箱,Bintray无法注册成功。所以这个时候你需要完成第一步然后通过gmail邮箱完成注册。

正式开始起飞

创建组织

使用注册账号登录后,点击 Add New Organization

创建组织-1

接着下一步

创建组织-2

接着下一步

创建组织-3

最后点击create完成创建。

创建仓库

点击 Add New Repository 创建仓库

创建仓库-1

创建仓库-2

创建成功后,在刚才的界面 Add New Repository 下面可以看到创建的仓库。点击进去查看详细信息,此时里面是空的。

在Android Studio 中添加配置

主要涉及到的配置文件有三个:

此处输入图片的描述

  • 第一个:工程项目(project)的 build.gradle文件
  • 第二个:模块库(module) 的 build.gradle文件
  • 第三个:工程项目的 local.properties文件

配置第一个

在你Project的build.gradle文件中加入Maven和Jfrog Bintray的依赖插件:

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

添加插件

配置第二个

第二项配置较多,可以参考下面完整的进行补充:

P.S. 有注释的是需要替换自己的参数,其他复制即可

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.android.library'
apply plugin: 'com.jfrog.bintray'
apply plugin: 'com.github.dcendents.android-maven'
def siteUrl = 'https://github.com/leonHua/LFilePicker' // 项目的主页
def gitUrl = 'https://github.com/leonHua/LFilePicker.git' // Git仓库的url
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
version = "1.0" //发布版本号
group = "com.leon" //最终引用形式,如compile 'com.leon.lfilepicker:1.0.0',其中lfilepicker在后面配置
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
minSdkVersion 15
targetSdkVersion 25
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:25.0.0'
compile 'com.android.support:recyclerview-v7:25.0.0'
}
bintray {
user = properties.getProperty("bintray.user")
key = properties.getProperty("bintray.apikey")
pkg {
repo = 'leonlibrary'//自己创建的仓库名字
name = 'lfilepicker'//上传到JCenter的名字,最终引用的名字
websiteUrl = siteUrl
vcsUrl = gitUrl
licenses = ['MIT']//不能随便写,只能是仓库创建时选择的license type
userOrg = 'mumusalibrary' //自己创建的organization名称
publish = true // 是否是公开项目,公开别人可以引用
version {
name = '1.0'
desc = 'leon open library.'//描述,自己定义
released = new Date()
vcsTag = 'v1.0'
attributes = ['gradle-plugin': 'com.use.less:com.use.less.gradle:gradle-useless-plugin']
}
}
configurations = ['archives']
}
install {
repositories.mavenInstaller {
// This generates POM.xml with proper parameters
pom {
project {
packaging 'aar'
// Add your description here
name 'Leon Android'
description 'leon open library.'
url siteUrl
// Set your license
licenses {
license {
name 'MIT' //和之前自己定义的协议一致
url 'https://raw.githubusercontent.com/minggo620/Pluto-Android/master/LICENSE'
}
}
developers {
developer {
id 'leonhua2017' //填写bintray或者github的用户名
name 'leonhua2017' //姓名
email 'leon.gitlibrary@gmail.com'//邮箱
}
}
scm {
connection gitUrl
developerConnection gitUrl
url siteUrl
}
}
}
}
}
task sourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
}
task javadoc(type: Javadoc) {
failOnError false //必须添加以免出错
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}
artifacts {
archives javadocJar
archives sourcesJar
}
javadoc {
options{
//如果你的项目里面有中文注释的话,必须将格式设置为UTF-8,不然会出现乱码
encoding "UTF-8"
charSet 'UTF-8'
author true
version true
links "http://docs.oracle.com/javase/7/docs/api"
}
}

以上添加成功后,点击编译下项目,会下载一些插件东西,成功后继续。

配置第三个

在local.properties中添加账户名称和apikey信息

添加账户和apikey

apikey信息可以通过以下方式获得:

获取apikey

执行命令

在Android Studio中的Terminal窗口中输入命令:gradlew -v
正常的话会显示版本信息,如果还没有安装的话会自动安装,安装后也会显示版本信息。

然后在输入命令:gradlew install
此时也会显示下载安装一些东西,耐心等待即可,完成后显示“BUILD SUCCESSFUL”即表示成功。

install 成功

最后上传,在Terminal窗口输入命令:gradle bintrayUpload
然后等待上传,显示“BUILD SUCCESSFUL”即表示成功。

upload 成功

发布

回到仓库页面可以看到刚才上传的项目:

发布成功

点击项目后进入详细界面,这个时候点击界面右下角的add to JCenter,然后输入描述发送即可。
然后等待审核,我这个比较快,10分钟就通过。

遇到的坑

1:官网地址

前面已经说过,注册地址一定要选对

2:Unsupported major.minor version 52.0

首先检查JDK版本问题,需要更换到JDK8,环境变量配置后一定记得需要在Android Studio中配置

JDK配置

如果JDK没问题,还有可能是Studio里各项配置的版本问题,查了很多资料,总的来说就是当前环境的整体配置版本(以下三项)要一致:

  • compileSdkVersion
  • buildToolsVersio
  • gradle

3: HTTP/1.1 401 Unauthorized

这个一般是因为账号和apikey信息错误,仔细检查local.properties文件中的配置是否正确

4: gradlew 不是内部或外部命令

配置gradle的环境变量,和配置JDK类似,如果配置过后还不行,所有的命令更换为 gradle 也可以。

5: 路径问题

如果环境中除了需要打包的库还有其他模块,那么在命令行窗口中需要先切换到对应的目录环境下再执行命令。

路径

End

弄到这里终于算是成功了。发布到JCenter有很多种方式,这里只是用了其中的一种,自己做的时候也参考了很多文章,有一些时间早点的文章会出现很多莫名其妙的问题。可能别人成功实现的方法,自己在做的过程中还是会发生很多原文章中没有提(遇)到的问题。希望自己的总结可以帮到后来者,同时不可避免的还会有一些文中没有的问题出现,欢迎留言交流。

欢迎访问博客: https://leonhua.github.io/ ,查看更多文章。

打赏一个煎饼果子!