发布aar到jcenter的正确姿势

转发地址:

http://studyai.site/2016/12/03/%E5%8F%91%E5%B8%83aar%E5%88%B0jcenter%E7%9A%84%E6%AD%A3%E7%A1%AE%E5%A7%BF%E5%8A%BF/


前段时间开发了一个android测试小插件ATestKit,准备发布到jcenter库中,可期间碰壁无数,折腾了两天最终终于上传成功。

下面是我的最终整理:

上传aar到jcenter的正确姿势

打开https://bintray.com

第一坑:你需要一个vpn。

注册时国内的qq邮箱,163邮箱通通用不了,gmail可用。

天朝国情,访问google需要翻墙,不解释。

第二坑:注意注册入口

首页有一个START YOUR FREE TRIAL:

如果你按照网上搜到排名很靠前的的其他教程来进行,比如说这几篇:

那么恭喜你,你成功的入坑了,你会发现按照他们的配置一步步进行,但到最后就是不成功,而且错误的提示也很不明确,让你找不到一点头绪。

仔细看看,你看到的jcenter的个人主页似乎和他们的不太一样。

原因可能是因为bintray.com这个网站改版了,导致注册流程和以前不一样了,如果你点击上图的那个注册入口,会引导你创建一个组织,然后你只能在组织下新建自己的仓库,而上面的几篇文章根本就没有组织这一说啊。

在这里有一个关于网站首页的说明:

https://bintray.com/docs/usermanual/starting/starting_gettingstarted.html#_the_bintray_homepage

注意看这里:

好吧,难道说明我们还有另外一个针对于open source plan的注册入口吗?这个入口听起来有点像上面几篇文章描述的那样啊。

果然有!

继续回到首页,拉到页面最底端,有另外一个入口:

从这里注册进入,你就可以不用创建组织了。

第三坑:收费?!

如果你不幸点击了首页的START YOUR FREE TRIAL,那么你的首页上会有这么一个奇怪的标识:

点进来看一看,虽然没有明确说免费版到期后会怎样,但手动终止免费版后会删掉你库里所有的东东:

如果想继续使用,那么150刀一月。

没想到jcenter如此恶毒的把免费试用入口放在最显眼的位置,而且不明确告诉你试用账号到期后的后果,并且把免费使用的社区版入口藏的那么深。

正常配置流程

通过社区版注册入口进入之后,就没有了奇怪的标识,我们可以创建一个个人仓库了:

配置选择public,类型选择Maven:

然后创建新的Package:

填写相关信息:

在你的编辑你android项目根目录下的build.gradle

 
      
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
      
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.0'
// 添加上传到jcenter所需的插件
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.1'
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}

编辑library下的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
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
 
      
apply plugin: 'com.android.library'
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'
version = "0.2" //aar的版本号
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
minSdkVersion 14
targetSdkVersion 23
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile( 'proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions {
abortOnError false
}
}
dependencies {
compile fileTree(dir: 'libs', include: [ '*.jar'])
compile 'com.android.support:appcompat-v7:23.4.0'
}
def siteUrl = 'https://github.com/DannyLee1991/ATestKit' // 项目主页
def gitUrl = 'https://github.com/DannyLee1991/ATestKit.git' // 项目的git地址
def module_name = 'ATestKit' // 项目的名称
group = 'com.dannylee' // 所在组
install {
repositories.mavenInstaller {
// This generates POM.xml with proper parameters
pom {
project {
packaging 'aar'
name 'ATestKit' // 名称
url siteUrl
licenses {
license {
name 'The Apache Software License, Version 2.0' // 开源协议名称
url 'http://www.apache.org/licenses/LICENSE-2.0.txt' // 协议地址
}
}
developers {
developer {
id 'dannylee' // 账号
name 'dannylee' // 名称
email '[email protected]' // 邮箱地址
}
}
scm {
connection gitUrl
developerConnection gitUrl
url siteUrl
}
}
}
}
}
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))
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc. destinationDir
}
artifacts {
archives sourcesJar
}
Properties properties = new Properties()
properties.load( project.rootProject. file( 'local.properties').newDataInputStream())
bintray {
// 读取配置文件中的用户名和key
user = properties.getProperty( "bintray.user")
key = properties.getProperty( "bintray.apikey")
configurations = [ 'archives']
pkg {
repo = "maven" // 你在bintray上创建的库的名称
name = module_name // 在jcenter中的项目名称
websiteUrl = siteUrl
vcsUrl = gitUrl
licenses = [ "Apache-2.0"]
publish = true
}
}

回到bintray,在你的个人信息配置页中,查看APK Key:

在项目根目录下创建local.properties配置文件(如果有就直接打开),写入账号信息:

由于key是比较重要的信息,不能泄露出去,所以需要编辑.gitignore添加过滤规则来把它过滤掉:

 
      
1
2
 
      
# Local configuration file (sdk path, etc)
local.properties

然后命令行进入到你的library项目中执行:

 
      
1
 
      
gradle build

比较坑的是有的时候可能会失败,多试几次就会成功。

成功之后执行:

 
      
1
 
      
gradle bintrayUpload

如果不出意外的话,会成功上传,如果失败了,很有可能是你的网络问题,换个vpn试试说不定可以成功。如果是其他原因的失败,请自行google。

回到jcenter中项目的管理页面,就可以看到上传的版本信息了,点击Add to JCenter就可以正式上传到jcenter中了:

上传后,需要系统审核大概半小时,之后就可以在你的项目中使用这个aar了:

 
      
1
2
3
4
5
 
      
dependencies {
...
compile 'com.dannylee:atestkit:0.2'
...
}

如果你选择的是第一个注册入口,流程也是一样的,唯一不同的就是在library中的build.gradle中要填写组织名称,否则也找不到:

 
      
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
      
install {
repositories.mavenInstaller {
// This generates POM.xml with proper parameters
pom {
project {
userOrg 'your organisation name' // 填写组织名称
...
}
}
...
}
}
}
}

猜你喜欢

转载自blog.csdn.net/coder_nice/article/details/80047956