注册 登录
  • 欢迎访问Sharezer Blog

AndroidLibrary提交到JCenter仓库

Android sharezer 42次浏览 已收录 0个评论

1 为什么我们需要将library提交到jcenter仓库

jcenter 就是 Android library 文件服务器中的其中一个,另外一个就是 Maven Central,这两个都是Maven 仓库。 jcenter 由 bintray.com 维护 , Maven Central 则是由 sonatype.org 维护,它们分别存储在不同的服务器,两者没有任何关系。在 http://jcenter.bintray.com/ 可以看到 jcenter 整个仓库的内容。
那么既然有了两个选择,为什么最终会选择使用 jcenter ?
起初,Android Studio 选择 Maven Central 作为默认仓库。如果你使用老版本的 Android Studio 创建一个新项目, mavenCentral() 会自动的定义在 build.gradle 中。
但是 Maven Central 的最大问题是对开发者不够友好。上传 library 异常困难。上传上去的开发者都是某种程度的极客。同时还因为诸如安全方面的其他原因, Android Studio 团队决定把默认的仓库替换成jcenter。正如你看到的,一旦使用最新版本的 Android Studio 创建一个项目,jcenter() 自动被定义,而不是 mavenCentral()。
有许多将 Maven Central 替换成 jcenter 的理由,下面是几个主要的原因。

  1. jcenter通过CDN发送library,开发者可以享受到更快的下载体验;
  2. jcenter是全世界最大的Java仓库,因此在Maven Central 上有的,在jcenter上也极有可能有。换句话说jcenter是Maven Central的超集;
  3. 上传library到仓库很简单,不需要像在Maven Central上做很多复杂的事情;
  4. 友好的用户界面;
  5. 如果你想把library上传到Maven Central,你可以在bintray网站上直接点击一个按钮就能实现;

2 过程

2.1 注册账号

注册帐号地址:  https://bintray.com/signup/oss

AndroidLibrary提交到JCenter仓库

2.2 创建仓库

当注册了帐号并且成功了登录的时候

AndroidLibrary提交到JCenter仓库

AndroidLibrary提交到JCenter仓库

2.3 创建测试工程

AndroidLibrary提交到JCenter仓库

2.4 创建Medule(本地代码库)

AndroidLibrary提交到JCenter仓库
选择AndroidLibrary
AndroidLibrary提交到JCenter仓库

2.5 配置项目的build.gradle

dependencies中加入:

classpath 'com.novoda:bintray-release:0.8.0'

如下图所示:
AndroidLibrary提交到JCenter仓库

com.novoda:bintray-release的版本号,AS3.0以下版本使用0.3.4,AS3.0使用0.5.0,AS3.1使用0.8.0

2.6 配置Library的build.gradle

添加以下两个引用:

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

配置library提交到远程库的表单信息:

AndroidLibrary提交到JCenter仓库

publish {
    userOrg = 'sharezer'
    groupId = 'com.sharezer.AndroidUtils'
    artifactId = 'AndroidUrils'
    version = '1.0.0'
    description = 'Super duper easy way to release your Android and other artifacts to bintray'
    website = "https://github.com/novoda/${rootProject.name}"
}

2.7 获取API Key

提交到远程库需要用到API Key,还需要到https://bintray.com/中获取。

AndroidLibrary提交到JCenter仓库

AndroidLibrary提交到JCenter仓库

AndroidLibrary提交到JCenter仓库

AndroidLibrary提交到JCenter仓库

2.8 在命令行下进行提交

运行如下命令:

./gradlew clean build bintrayUpload -PbintrayUser=sharezer -PbintrayKey=a92c014b9dbe8615cb8******************** -PdryRun=false

参数:

  • PbintrayUser=帐号
  • PbintrayKey=API Key
  • PdryRun=false(如果是false那么就会真实提交,如果是true不会去进行真实提交,但是会编译,可以去查看是否编译通过在提交)

如下图如示,则提交成功。

AndroidLibrary提交到JCenter仓库

2.9 提交JCenter审核

到网站上刷新可以看到提交的日志:

AndroidLibrary提交到JCenter仓库

点击maven进入仓库,可以看到提交的库,如下图,点击库名,进入详情。

AndroidLibrary提交到JCenter仓库

AndroidLibrary提交到JCenter仓库

点击send发送审核,内容可以放空。

AndroidLibrary提交到JCenter仓库

审核通过将出现jcenter图标,一般1个小时到半天左右就通过了。

AndroidLibrary提交到JCenter仓库

3 使用仓库

3.1 配置 gradle

在需要使用的项目gradle中添加配置,具体内容可以见仓库详情页,Gradle分页里描述的:

AndroidLibrary提交到JCenter仓库

AS 3.0:

implementation 'com.sharezer.AndroidUtils:AndroidUrils:1.0.0'

3.2 Sync

点击AndroidLibrary提交到JCenter仓库,gradle会自动下载代码库到本地。

在引用的外部库列表就可以看到下载下来的远程代码库:

AndroidLibrary提交到JCenter仓库

在代码中就可以直接引用:

AndroidLibrary提交到JCenter仓库

4 注意事项

4.1 编码GBK的不可映射字符

如果class里面有中文字体,他会报【编码GBK的不可映射字符】。

需要在gradle中配置:

task javadoc(type: Javadoc) {
    options.encoding "UTF-8"
    options.charSet 'UTF-8'
}

4.2 Execution failed for task ‘:core:lint’

在上传过程中执行了lint检查,所以可能会报上面的错误。解决方法就是避免lint的检查,在每个module的gradle下面就要添加如下配置:

android {
    lintOptions {
        abortOnError false
    }
}

4.3 Execution failed for task ‘:core:mavenAndroidJavadocs’

Execution failed for task ':core:mavenAndroidJavadocs'.
\> Javadoc generation failed. Generated Javadoc options file (useful for troubleshooting): '/Users/********/mavenAndroidJavadocs/javadoc.options'

在上传过程中执行了javadoc检查,所以可能会报上面的错误。解决方法就是避免javadoc的检查,在项目根目录下的gradle下面就要添加如下配置:

allprojects {
    repositories {
    jcenter()
}
tasks.withType(Javadoc) {
    options.addStringOption('Xdoclint:none', '-quiet')
    options.addStringOption('encoding', 'UTF-8')
}

4.4 远程仓库下载慢

因为众所周知的原因,国内有较大概率出现JCenter下载慢问题。使用开源中国的maven库阿里云的(速度飞快):http://maven.aliyun.com/nexus/content/groups/public/ 。
使用方法,项目gradle的repositories中添加:

repositories {
    maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
}

Sharezer , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明AndroidLibrary提交到JCenter仓库
喜欢 (0)
[liangshaoze@sina.cn]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址