发布 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 ...
随机推荐
- 01 lucene基础 北风网项目培训 Lucene实践课程 系统架构
Lucene在搜索的时候数据源可以是文件系统,数据库,web等等. Lucene的搜索是基于索引,Lucene是基于前面建立的索引之上进行搜索的. 使用Lucene就像使用普通的数据库一样. Luce ...
- 蒟蒻LQL的博客
这里是蒟蒻LQL的博客!!! 一枚水的不能再水的弱校ACMer···· 可能会在这写一些题解或者别的什么乱七八糟的··· 可能大概没什么人看,就当错题本好了o(* ̄▽ ̄*)ブ 因为太弱了难免有错误!发 ...
- c++ 迭代器模式(iterator)
提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示.当你需要访问一个聚集对象,而且不管这些对象是什么都需要遍 历的时候,就应该考虑用迭代器模式.同时需要对聚集有多种方式遍历时,可以 ...
- linux系统的命令组与函数
一.命令组 许多时候,我们在shell操作上,需要在一定条件下一次执行多个命令,也就是说,要么不执行,要么就全执行,而不是每次依序的判断是否要执行下一个命令.或是,需要从一些命令执行优先次顺中得到豁免 ...
- p4688 [Ynoi2016]掉进兔子洞
传送门 分析 我们考虑先将所有数离散化 之后我们对于每个状态用一个bitset来记录 其中第i段表示颜色i的信息 对于每一段信息均是段首若干1,剩余若干0表示这种颜色有多少个 于是我们不难想到莫队 答 ...
- STM32F4库函数里面的RCC_DeInit(void)函数分析
void RCC_DeInit(void) { /*Set HSION bit,内部高速时钟使能HSI振荡器打开*/ RCC->CR |=(uint32_t)0x00000001; /*Rese ...
- hdu Lovekey(水题)
#include<stdio.h> #include<string.h> ]; int main() { ],s2[]; int l1,l2,i,j,k; while(scan ...
- javascript总结24:Array常用的队列操作和排序方法
1 数组-引用类型 JavaScript中的内置对象 复习数组的使用 两种创建数组的方式 Array对象的属性 length 获取数组的长度(元素个数) 2 常用方法 : 检测数组 instanceo ...
- [转]ubuntu linux下DNS重启后丢失(不是Network-manager造成的情况)
从网上得知 /etc/resolv.conf中的DNS配置是从/etc/resolvconf/resolv.conf.d/head中加载而来,所以每回改resolv.conf都会失效,在此文件里面已经 ...
- google/protobuf hello world
/(ㄒoㄒ)/~~ 官网被墙 1. github > Search > protobuf or protocol buffers 2.https://github.com/google/p ...