这里记录一下上传用AndroidStudio上传lib到jCenter的一些步骤。

注册账号并创建仓库

1.到 https://bintray.com 网站先用个人邮箱注册账号(不支持qq、163邮箱);
2.注册并登录完成后,在个人页点击“Add New Repository”,添加仓库(使用novoda.bintray插件时,创建的仓库名称必须为”maven”);
3.进入仓库,并点击“Add New Package”新建一个程序包用于上传lib组件(包名会在build.gradle中配置);
4.点击个人头像-“Edit Profile”-“API Key”,输入密码后获取的自己的API Key,复制出来在上传Library时使用;
5.Library上传成功后,点击“Add to Jcenter”按钮,勾选相关选项并填写groupId(和gradle中配置的一样),Send后等待审核通过;

AndroidStudio中配置

可以使用novoda.bintray插件上传Library到仓库:
插件github地址:https://github.com/novoda/bintray-release
示例项目github地址:https://github.com/guangGG/AndroidEncryptLib
参考链接:
https://blog.csdn.net/sky837/article/details/78477534
https://blog.csdn.net/small_lee/article/details/52328613
https://blog.csdn.net/huangxuanheng/article/details/52495968

工程全局build.gradle中配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.novoda:bintray-release:0.9' //这里配置bintray插件的依赖(请使用最新版本)
}
}
allprojects {
repositories {
jcenter()
}
//设置生成doc编码,解决报错:mavenAndroidJavadocs
tasks.withType(Javadoc) {
options.addStringOption('Xdoclint:none', '-quiet')
options {
encoding "UTF-8"
charSet 'UTF-8'
links "http://docs.oracle.com/javase/7/docs/api"
}
}
}
在Library Module的build.gradle中配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
apply plugin: 'com.android.library'
apply plugin: 'com.novoda.bintray-release' //必须放在'com.android.library'插件后
……
android {
……
//build打包时报错不中断
lintOptions {
abortOnError false
}
}
//在publish中配置仓库信息
publish {
userOrg = 'novoda' //bintray网站的用户名
groupId = 'com.novoda' //jcenter上的路径,不需要在bintray网站配置
artifactId = 'bintray-release' //在bintray网站仓库中创建的package的名字
publishVersion = '0.6.1'
desc = 'Oh hi, this is a nice description for a project, right?'
website = 'https://github.com/novoda/bintray-release'
}
使用bintrayUpload命令发布Library
1
2
//在Terminal中执行此语句(BINTRAY_USERNAME替换为bintray网站的用户名,BINTRAY_KEY替换为bintray网站个人的API Key)
gradlew clean build bintrayUpload -PbintrayUser=BINTRAY_USERNAME -PbintrayKey=BINTRAY_KEY -PdryRun=false

引用Library

上传Library到仓库成功后,在网站上Add to Jcenter,添加成功后就可以直接引用此Library了。
在主工程build.gradle中配置:

1
2
3
4
5
6
7
8
9
10
……
repositories {
……
//引用时,若还未添加到Jcenter成功时,可配置私有仓库地址使用(如果已添加到Jcenter,不需要这个配置)
maven { url 'https://dl.bintray.com/username/maven' } //网站上Library主页的右上角给出的仓库私有地址
}
dependencies {
……
implementation 'com.demo:MyLib:1.0.0'
}

遇到的问题

  • 1.build时报错:com.novoda.gradle.release.AndroidLibrary$LibraryUsage.getDependencyConstraints()Ljava/util/Set;
    原因:导入插件版本比较低(0.7.0),不支持gradle-4.6
    解决:使用最新的插件版本(0.9)

  • 2.上传到仓库时报错:bintrayUpload: Could not find publication: release
    原因:apply plugin ‘com.android.library’要在apply plugin ‘com.novoda.bintray-release’上面,两个的顺序不能反,否则会出这个错
    解决:先apply plugin ‘com.android.library’,再apply plugin ‘com.novoda.bintray-release’

  • 3.上传到仓库时报错:Execution failed for task ‘lib:bintrayUpload’. > java.net.ConnectException: Connection timed out: connect
    原因:网络原因,当前使用的网络开了翻墙,导致连接失败
    解决:换一个未翻墙的网络可以了

  • 4.上传到仓库时报错:Execution failed for task ‘lib:bintrayUpload’. > Could not create package ‘username/maven/libname’: HTTP/1.1 404 Not Found [message:Repo ‘maven’ was not found]
    原因:插件默认上传Library到名字为maven的仓库,bintray网站上创建的Repository名称必须为”maven”
    解决:在bintray网站上创建”maven” Repository,并在此仓库中创建对应Library的”Package”