Android Studio 如何发布library到jCenter

现在开发android应用大都开始使用Android Studio,这个开发工具最大的好处就是引用第三方库时非常方面,只需要在build.gradle文件添加一句引用,就可以自动下载。

dependencies {
    compile 'com.android.support:appcompat-v7:25.1.0'
    compile 'com.android.support:recyclerview-v7:25.1.0'
}

那么这个library是从哪来下载的呢??

Android Studio是从build.gradle里面定义的Maven 仓库服务器上下载library的。Apache Maven是Apache开发的一个工具,提供了用于贡献library的文件服务器。总的来说,只有两个标准的Android library文件服务器:jcenter 和 Maven Central , 当然你还可以自定义仓库。

类型 备注
Maven Central 发布过程繁杂冗长, 每次发布成功都应该感谢一下上苍的厚爱。
jCenter jCenter貌似稍微简单一点,但也不是省油的灯。
自定义仓库 一般的猿猿玩不起,企业内部可能会见到。

jcenter

jcenter是一个由 bintray.com维护的Maven仓库 。你可以在这里看到整个仓库的内容。我们在项目的build.gradle 文件中如下定义仓库,就能使用jcenter了:

allprojects {
    repositories {
        jcenter()
    }
}

Maven Central

Maven Central 则是由sonatype.org维护的Maven仓库。你可以在这里看到整个仓库。不管是jcenter还是Maven Central ,两者都是Maven仓库
我们在项目的build.gradle 文件中如下定义仓库,就能使用Maven Central了:

allprojects {
    repositories {
        mavenCentral()
    }
}

除了两个标准的服务器之外,如果我们使用的library的作者是把该library放在自己的服务器上,我们还可以自己定义特有的Maven仓库服务器。Twitter的Fabric.io 就是这种情况,它们在https://maven.fabric.io/public上维护了一个自己的Maven仓库。如果你想使用Fabric.io的library,你必须自己如下定义仓库的url。

repositories {
    maven { url 'https://maven.fabric.io/public' }
}

然后在里面使用相同的方法获取一个library。

dependencies {
    compile 'com.crashlytics.sdk.android:crashlytics:2.2.4@aar'
}

jitPack

JitPack是一个自定义的Maven仓库 ,最大的好处就是省时间...

使用条件:

  • 会使用GitHub,能提交项目到GitHub上
  • 使用AndroidStudio,且Gradle版本在2.4以上

gradle 如何获取library?

比如我们在 build.gradle输入如下代码的时候,这些库是如果奇迹般下载到我们的项目中的。

compile 'com.squareup.picasso:picasso:2.5.2'

一般来说,我们需要知道library的字符串形式,包含3部分:

GROUP_ID:ARTIFACT_ID:VERSION

上面的例子中:

GROUP_ID: com.squareup.picasso
ARTIFACT_ID:picasso
VERSION:2.5.2

group id 定义了library的group。有可能在同样的上下文中存在多个不同功能的library。如果library具有相同的group,那么它们将共享一个group id。通常我们以开发者包名紧跟着library的group名称来命名,比如com.squareup.picasso。然后ARTIFACT_ID中是library的真实名称。至于VERSION,就是版本号而已,虽然可以是任意文字,但是我建议设置为x.y.z的形式,如果喜欢还可以加上beta这样的后缀。

下面是Square library的一个例子。你可以看到每个都可以很容易的分辨出library和开发者的名称。

dependencies {
  compile 'com.squareup:otto:1.3.7'
  compile 'com.squareup.picasso:picasso:2.5.2'
  compile 'com.squareup.okhttp:okhttp:2.4.0'
  compile 'com.squareup.retrofit:retrofit:1.9.0'
}

那么在添加了上面的依赖之后会发生什么呢?简单。Gradle会询问Maven仓库服务器这个library是否存在,如果是,gradle会获得请求library的路径,一般这个路径都是这样的形式:GROUP_ID/ARTIFACT_ID/VERSION_ID。比如可以在http://jcenter.bintray.com/com/squareup/otto/1.3.7https://oss.sonatype.org/content/repositories/releases/com/squareup/otto/1.3.7/下获得com.squareup:otto:1.3.7的library文件。
然后Android Studio 将下载这些文件到我们的电脑上,与我们的项目一起编译。整个过程就是这么简单,一点都不复杂。

我相信你应该清楚的知道从仓库上下载的library只是存储在仓库服务器上的jar 或者aar文件而已。有点类似于自己去下载这些文件,拷贝然后和项目一起编译。但是使用gradle依赖管理的最大好处是你除了添加几行文字之外啥也不做。library一下子就可以在项目中使用了。

arr文件

仓库中存储的有两种类型的library:jar 和 aar。jar文件大家都知道,但是什么是aar文件呢?
aar文件是在jar文件之上开发的。之所以有它是因为有些Android Library需要植入一些安卓特有的文件,比如AndroidManifest.xml,资源文件,Assets或者JNI。这些都不是jar文件的标准。

因此aar文件就是发明出来包含所有这些东西的。总的来说它和jar一样只是普通的zip文件,不过具有不同的文件结构。jar文件以classes.jar的名字被嵌入到aar文件中。其余的文件罗列如下:

- /AndroidManifest.xml (mandatory)
- /classes.jar (mandatory)
- /res/ (mandatory)
- /R.txt (mandatory)
- /assets/ (optional)
- /libs/*.jar (optional)
- /jni/<abi>/*.so (optional)
- /proguard.txt (optional)
- /lint.jar (optional)

如何发布library到 jcenter

注册jcenter账号 ,获取apiKey

个人注册地址:https://bintray.com/signup/oss
有github账号的,可以直接使用github账号登录,登录后可以获取到apiKey

QQ截图20170208145756.png

创建仓库

创建一个名字为maven的Repository


QQ截图20170208150126.png

在maven仓库中创建一个package,注意package的名字和要发布的library的名字相同

QQ截图20170208151818.png

新建android library ,添加配置

关于上传可以使用gradle-bintray-plugin插件,但是略复杂,所以我们采用bintray-release

QQ截图20170208150300.png

如上图,photopicker 就是一个android library ,也就是我们也发布到jcenter上的library 。

  1. 在project build.gradle文件中添加bintray-release的classpath
 dependencies {
        classpath 'com.novoda:bintray-release:0.3.4'
    }
  1. 在 photopicker 的 build.gradle文件中添加
apply plugin: 'com.novoda.bintray-release'//添加

//添加
 publish {
    userOrg = 'jcenter'//bintray.com用户名
    groupId = 'com.helloandroid'//jcenter上的路径
    artifactId = 'photopicker'//项目名称
    publishVersion = '1.0.0'//版本号
    desc = 'this is for test'//描述,不重要
    website = 'https://github.com/github/photopicker'//网站,最好有,不重要
}

配置完成后,下面就要执行上传命令了,如果上传一切正常,那么以后引用这个库就是这样

compile 'com.helloandroid:photopicker:1.0.0

执行发布命令 ,上传代码至Bintray

上传很简单,在Android Studio的Terminal面板进行,执行下面的代码即可:

  gradlew clean build bintrayUpload 
 -PbintrayUser=jcenter //jcenter 用户名
 -PbintrayKey=xxxxxxxxxxxxxxxxxxxxxx // 注册账号获取到的apikey
 -PdryRun=false

user就是用户名,key就是我们刚才的Api key,dryRun是一个配置参数,当为true的时候,会运行所有的环节,但是不会上传。
然后就是等待,当运行并上传完成,看到BUILD SUCCESSFUL就没问题了,如果有问题,根据log排查下。


QQ截图20170208144455.png

add to jcenter , 等待审核

上一步虽然把library上传到jcenter,但是我们现在还不能使用,需要提交审核 。


QQ截图20170208150903.png
QQ截图20170208150915.png

审核通过会给你发送站内Message,大概两个小时左右,并且Add to Jcenter那个按钮就消失了。

在发布过程中遇到几个问题

1、如何解决Unsupported major.minor version 52.0问题?
2、乱码问题:
注释中有中文,可能会出现:编码GBK的不可映射字符 。项目的build.gradle中添加:

allprojects {
tasks.withType(Javadoc) {
    options{
        encoding "UTF-8"
        charSet 'UTF-8'
        links "http://docs.oracle.com/javase/7/docs/api"
    }
  }
}

参考文档

Android快速发布项目到jcenter
AndroidStudio library上传JCenter
Android 发布开源库到 JitPack、jCenter
优雅的发布 Android 开源库 (论 JitPack 的优越性)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容