发布 Android Library 到 JCenter 从入门到放弃
最近想倒腾一个小小的 UIKit 到 JCenter,为开源社区贡献一点绵薄之力,于是就有了一系列惨无人道的踩坑史。好,接下来,直奔主题,以下是发布流程。
发布到 JCenter
发布到 JCenter 需要以下几个步骤。
注册 Bintray 账号并创建仓库
Bintray 是 JCenter 库的运营商,首先要去这个网站注册一下账号 https://bintray.com/signup/oss

网上大多数教程会把你带到注册企业账号的地方,这是第一个坑。
注册完后创建一个仓库:

填写一下必填项即可:

在 Type 处选择 Maven。接下来创建一个 Package:

注意下 name 这一栏

填上你要发布的 Library 项目的名字。完成之后大概是这样的:

插件配置
网上有很多教程是用 android-maven-gradle 插件来发布 Library,甚至是官方推荐的 gradle-bintray-plugin,其实这两个配置都比较复杂。下面要推荐的是 bintray-release 插件,配置非常简单。首先在项目的 build.gradle 加上:

buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.3'
classpath 'com.novoda:bintray-release:0.4.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
然后打开 Library 的 build.gradle,加入:
apply plugin: 'com.android.library'
apply plugin: 'com.novoda.bintray-release'
android {
compileSdkVersion 25
buildToolsVersion "25.0.0"
defaultConfig {
minSdkVersion 16
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
lintOptions {
abortOnError false
}
}
publish {
userOrg = 'KenChoi1992' // 改成你在 bintray 上注册的用户名
groupId = 'cn.jiguang.imui' // 改成你的包名(影响别人引用的第一段)
artifactId = 'chatinput' // 改成你的 Library 名字(影响别人引用的第二段)
publishVersion = '0.0.1' // 版本号 (影响别人引用的第三段)
desc = 'im uikit'
website = 'https://github.com/jpush/imui.git'
}
完成了上面的配置之后,别人要引用你的 Library,就可以这样:
// 由 groupId,artifcatId,version 三段组成
compile 'cn.jiguang.imui:chatinput:0.0.1'
检查代理
在执行下一步之前,请确保 Android Studio 正确的配置了代理,因为大天朝要科学上网,你懂的。打开 Android Studio 的配置菜单:

点上面的 Check connection,在弹出的窗口输入一个墙外网站:

然后点击 OK,如果成功了,是这样的:

运行任务
最后在 Android Studio 的终端运行:

./gradlew clean build bintrayUpload -PbintrayUser=Username -PbintrayKey=ApiKey -PdryRun=false
将上面的用户名改成自己的,ApiKey 是从 bintray 网站上得到的:
点击 Edit Profile,进入编辑资料界面:

然后点击 API Key 即可查看:

如果执行完上述命令后,成功了,那么恭喜你!你顺利地发布了自己的 Library,在别人的项目中,只要用一行代码就可以引用你的库,实在是高(装)端(逼)大(必)气(备),上档次!请注意,如果失败了,前方高能!非战斗人员撤退!
如果你失败了!请不要惊讶,因为我也失败了!!失败的原因有很多,但是尝试了许多解决方案之后,终于!……我放弃了!!而且尝试了上述的三个插件都失败了!!!所以我并不是标题党……但是!尽管如此,如果轻易放弃,不是吾辈所为!所以我决定手!动!上!传!
说是手动上传,其实也用到了一个工具 release-android-library,在 Library 的 build.gradle 中配置一下:
apply plugin: 'com.android.library'
ext {
PUBLISH_GROUP_ID = 'cn.jiguang.imui'
PUBLISH_ARTIFACT_ID = 'chatinput'
PUBLISH_VERSION = '0.0.1'
}
android {
compileSdkVersion 25
buildToolsVersion "25.0.0"
defaultConfig {
minSdkVersion 16
targetSdkVersion 25
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(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.1.1'
compile 'com.android.support:design:25.1.1'
compile 'com.google.android:flexbox:0.2.5'
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.android.support:support-v4:25.1.1'
testCompile 'junit:junit:4.12'
}
apply from: 'https://raw.githubusercontent.com/blundell/release-android-library/master/android-release-aar.gradle'
主要是加入 ext 和 apply from 这两个相关内容即可。然后在终端中执行命令:
./gradlew clean build generateRelease
完成后,在 build 文件夹下就会生成一个压缩文件:

回到 bintray 的 package 下,点击 New Version:

然后创建一个 version,名字和你要发布的版本号一致,然后点击确定,接着点击上传文件按钮:

在页面中上传刚才的压缩文件:
请注意上面红色方框,一!定!要!勾选这个 Checkbox,否则会发生奇妙的错误,别问我怎么知道的!

然后点击 Save Changes,接着点击页面中的 Publish 按钮,这样就发布了!

接着回到 Package,将 Library 发布到 JCenter。

点击 Add to JCenter,点击后输入一下评论,然后点击 OK 即可,等待几个小时后的审核就可以了。到此为止,我们已经完成了发布!但是!你以为这就完了?接下来介绍一个快捷,简单到令人发指的开源仓库:JitPack
发布到 JitPack
打开 JitPack 网站,使用 GitHub 账号登录即可,很方便,只需要简单的两步即可发布到 JitPack。
在 GitHub 上发布一个版本
把 GitHub 的仓库地址粘贴到 JitPack,然后点击 Look up 按钮:

然后在从下面的列表中选择一个版本,然后点击 Get it 即可!接下来,别人只需要在项目的 build.gradle 中加入:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
然后在 Module 的 build.gradle 中引用即可:
dependencies {
compile 'com.github.User:Repo:Tag'
}
就是这样,so easy !
总结
目前来说 JCenter 虽然是 Android 的默认仓库,但是发布的流程还是比较麻烦,而且发布的过程是一个闻者伤心,见者流泪的辛酸血泪填坑史。JitPack 更加简单快捷,使用的方式也相差无几。顺便一提,文中的 chatinput 是一个 IM UIKit,可以方便地为聊天界面集成文字,录音、发图片、视频消息。另外我们也发布了 imui,可以方便地集成聊天界面功能,使用方式:
compile 'cn.jiguang.imui:imui:0.0.1'
更多信息请登录我们的 GitHub 地址:https://github.com/jpush/imui
后续我们也会不断地完善和维护,欢迎大家提 PR。
作者:KenChoi - 极光开发者
原文:发布 Android Library 到 JCenter 从入门到放弃
知乎专栏:极光日报
发布 Android Library 到 JCenter 从入门到放弃的更多相关文章
- Android Studio提交库至Bintray jCenter从入门到放弃
文:http://blog.csdn.net/sk719887916/article/details/52473914 作者:Tamic 详细文章请看:[Gradle系列]Gradle发布module ...
- How to distribute your own Android library through jCenter and Maven Central from Android Studio
In Android Studio, if you wish to include any library to your application. You could just simply add ...
- Android OOM 问题探究 -- 从入门到放弃
一.前言 最近客户反馈了一些OOM的问题,很早之前自己也有简单了解过OOM的知识,但时间久远,很多东西都记不清了. 现在遇到这个OOM问题,也即趁此搜索了一些资料,对OOM问题做一些探究,把资料记录于 ...
- Android拓展系列(12)--使用Gradle发布aar项目到JCenter仓库
目的 发布自己的android library(也就是aar)到公共的jcenter仓库,所有的人都能用gradle最简单的方式引用. 为什么选择jcenter,它兼容maven,而且支持更多形式仓库 ...
- 【转】如何使用Android Studio把自己的Android library分发到jCenter和Maven Central
转自:http://www.devtf.cn/?p=760&utm_source=tuicool 如何使用Android Studio把自己的Android library分发到jCenter ...
- Android Library的依赖方式及发布(转)
还是那句老话,好记性不然烂笔头,在此整理 Android Studio 依赖相关 以及 如何发布项目到 JCenter Android Studio 添加依赖Module 依赖module 依赖是指在 ...
- 如何通过Android Studio发布library到jCenter和Maven Central
http://www.jianshu.com/p/3c63ae866e52# 在Android Studio里,如果你想引入任何library到自己的项目中,只需要很简单的在module的build. ...
- Android Library项目发布到JCenter最简单的配置方法
前沿 网上的步骤看起来实在太麻烦,gituhb上偶然间看到的一个项目,经过实际验证确实可行.github连接:https://github.com/xiaopansky/android-library ...
- Android Library 发布开源库 JCenter & JitPack 攻略
对于Android 的开源库,一般通过 JCenter 或者 JitPack 发布开源.两种方式均可~ 当你造了一个好玩有用的东西想要分享给大家时,开源出来便是一种好方式~ 一. 上传开源库到 JCe ...
随机推荐
- jquery入门 动态调整div大小,使其宽度始终为浏览器宽度
有时候我们需要设置宽度为整个浏览器宽度的div,当然我们可以使用相对布局的方式做到这一点,不过我们也可以用jquery来实现. <!doctype html> <html> & ...
- 825. Friends Of Appropriate Ages有效的好友请求的数量
[抄题]: Some people will make friend requests. The list of their ages is given and ages[i] is the age ...
- 面向对象 继承 抽象类 接口 static 权限修饰符
Day01 面向对象 继承 抽象类 接口 static 1.匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量. 2.类的继承是指在一个现有类的基础上去构建一个新的类,构建出 ...
- 第二话:javascript中闭包的理解
闭包是什么? 通过闭包,子函数得以访问父函数的上下文环境,即使父函数已经结束执行. OK,我来简单叙述下,先上图. 都知道函数是javascript整个世界,对象是函数,方法是函数,并且js中实质性的 ...
- 1097G Vladislav and a Great Legend
传送门 分析 https://blog.csdn.net/forever_shi/article/details/88048528 代码 #include<iostream> #inclu ...
- Cw210开发板
达内培训嵌入式开发板 qt + kernel uboot toolchain
- Microsoft(C)注册服务器(32位)CPU占用高
Microsoft(C)注册服务器(32位)CPU占用高 摘自:https://blog.csdn.net/jtsqrj/article/details/83034252 2018年10月12日 23 ...
- Python with yield语句
1.with 语句 语法: with expression as variable 需要引入一个上下文管理协议,实现的方法是为一个类定义 __enter__() 和 __exit__() 方法, 在执 ...
- 斐波那契数列—java实现
最近在面试的时候被问到了斐波那契数列,而且有不同的实现方式,就在这里记录一下. 定义 斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
- BZOJ 2038 小Z的袜子(hose) (莫队算法)
题意:中文题. 析:很著名的莫队算法,先把这个求概率的式子表达出来,应该是分子:C(x1, 2) + C(x2, 2) + C(x3, 2) + ... + C(xn, 2) 分母:C(n, 2), ...