如何上传Android库项目的到JCenter

2,744 阅读4分钟

原文首发于微信公众号:躬行之(jzman-blog),欢迎关注交流!

上篇文章实现了一个日期时间选择器,github 地址如下:

https://github.com/jzmanu/MDatePickerSample

直接使用 gradle 依赖即可:

compile 'com.manu:MDatePicker:1.0.0'

也可以查看上篇文章的详细介绍或在文末点击阅读原文查看,这里顺便将其开源出来,顺便点个 star 支持一下,下面将介绍如何上传 Android 库项目到 JCenter 上供自己或其他人使用,具体参考如下:

  1. 注册账号
  2. 创建仓库
  3. 库项目配置
  4. 上传库项目
  5. 添加到JCenter
  6. 遇到的问题

注册账号

注册一个 Bintray 账号,选择注册个人类型,为什么要特意说明一下,这里大多数人第一次注册的时候都会注册成企业账号,企业账号貌似不能将库添加到 JCenter 中,此外企业版肯定在试用期之外是需要收费的,注册地址如下:

//个人账号
https://bintray.com/signup/oss
//企业账号
https://bintray.com/

创建仓库

这里上传的时候使用的时 bintray-release 插件,该插件如果在上传的时候不使用 repo 指定仓库名称,则会将项目上传到名为 maven 的库中,这里又有一个小坑,这个名为 maven 的仓库需要手动创建,为了方便就创建一个名为 maven 的仓库,登录自己的账号,选择 Add New Repository 创建仓库:

创建仓库

如果没有创建则会报如下错误:

* What went wrong:
Execution failed for task ':dashview:bintrayUpload'.
> Could not create package 'smalllee/maven/dashview': HTTP/1.1 404 Not Found [message:Repo 'maven' was not found]

然后,再该仓库中创建一个和 artifactId 名称一样的包:

创建包

以上是将库项目上传到 JCenter 的准备工作,下面来看一看项目这边是如何进行配置。

库项目配置

创建一个库 module 用于单独存放对外开放的库项目,首先在 Project 下的 build.gradle 文件中引入 bintray-release 插件的依赖:

buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
        //bintray-release插件
        classpath 'com.novoda:bintray-release:0.8.0'
    }
}

可以在配置编码格式为 UTF-8 来防止编译上传过程中出错,也可以设置忽略对 doc 文档的不规范检查,设置如下:

allprojects {
    repositories {
        google()
        jcenter()
    }
    tasks.withType(Javadoc){
        //不对生成的doc文档进行检查
        options.addStringOption('Xdoclint:none', '-quiet')
        //设置编码格式
        options.addStringOption('encoding', 'UTF-8')
    }
}

然后在库 module 下的 build.gradle 文件中引入 bintray-release 插件:

apply plugin: 'com.novoda.bintray-release'

注意 bintray-release 插件一定要在 com.android.library 插件之后引入,否则最后上传的时候虽然会提示上传成功,但实际上没有上传成功,报错信息如下:

:mdatepicker:xxx
:mdatepicker:xxx
//报错信息
:mdatepicker:bintrayUpload: Could not find publication: release.

BUILD SUCCESSFUL in 45s

然后在名为 publish 的 Task 中定义上传库项目的关键信息如下:

publish{
    //bintray.com的用户名
    userOrg = 'jzman'
    //一般写包名
    groupId = 'com.manu'
    //指定仓库名称
//    repo = "maven"
    //项目名称
    artifactId = 'MDatePicker'
    //版本号
    publishVersion = '1.0.0'
    //项目描述
    desc = 'a goog date picker'
    //项目网址
    website = 'https://github.com/jzmanu/MDatePickerSample'
}

然后就可以进行库项目的上传了。

上传库项目

上传之前需要先获取 API Key ,按照图示选择 Edit Profile:

jcenter03.PNG

然后选择 API Key,填写用户密码获取 API Key:

jcenter04.PNG

获取到 API KEY 之后使用如下上传命令进行上传:

gradlew clean build bintrayUpload -PbintrayUser=用户名 -PbintrayKey=API KEY -PdryRun=false

上传成功之后日志如下:

//...
:mdatepicker:releaseAndroidJavadocsJar
:mdatepicker:releaseAndroidSourcesJar
:mdatepicker:publishReleasePublicationToMavenLocal
:mdatepicker:bintrayUpload

BUILD SUCCESSFUL in 45s

添加到JCenter

上传成功之后就可以打开项目详情,选择 Add to JCenter 就可以申请添加到 JCenter 了,如下图所示:

jcenter05.PNG

然后就可以使用通过依赖的方式直接使用该库项目了,如下:

compile 'com.manu:MDatePicker:1.0.0'

遇到的问题

遇到的问题大部分都在上文中介绍了,还有一点需要注意的是如果出现如下错误:


A problem occurred configuring project ':app'.
> Failed to notify project evaluation listener.
com.novoda.gradle.release.AndroidLibrary$LibraryUsage.getDependencyConstraints()Ljava/util/Set;

建议检查自己的 gradle 版本,我用的时 4.6 要修改成 4.4,gradle 插件的版本也要相应的降低,

//gradle插件版本
classpath 'com.android.tools.build:gradle:3.0.1'
//gradle版本
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip

这样就可以开源自己的库了,进步很简单就是不断的去实践、去学习。