发布 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 ...
 
随机推荐
- 147.	Insertion Sort List (List)
			
Sort a linked list using insertion sort. class Solution { public: ListNode *insertionSortList(ListNo ...
 - ORM思想
			
-------------------siwuxie095 什么是 ORM 思想 1.Hibernate 使用 ORM 思想对数据库进行 CRUD 操作 2.ORM:Object Relational ...
 - iOS  打印结构体
			
关于OC直接打印结构体,点(CGRect,CGSize,CGPoint,UIOffset)等数据类型,我们完全可以把其转换为OC对象来进项打印调试,而不必对结构体中的成员变量进行打印.就好比我们可以使 ...
 - 671. Second Minimum Node In a Binary Tree 非递减二叉树中第二小的元素
			
[抄题]: Given a non-empty special binary tree consisting of nodes with the non-negative value, where e ...
 - yii2.0 报错Cookievalidationkey Must Be Configured With A Secret Key
			
'components' => [ 'request' => [ // !!! insert a secret key in the following (if it is empty) ...
 - c语言和设计模式
			
在网上看到一个博客专门写了关于设计模式的文章,感觉很有用.其实,我感觉数据结构 算法 设计模式 这三样同等重要啊. 数据结构 算法相对而言接触的比较多,但设计模式这个东西真的一头雾水,有时候觉得别人写 ...
 - python中fork()函数生成子进程分析-乾颐堂
			
python的os module中有fork()函数用于生成子进程,生成的子进程是父进程的镜像,但是它们有各自的地址空间,子进程复制一份父进程内存给自己,两个进程之 间的执行是相互独立的,其执行顺序可 ...
 - [OS] 如何在远程机器上用ctrl+alt+del键修改登录用户的密码
			
远程登录某台机器,想修改当前登录用户的密码,系统提示按Ctrl+Alt+Del,在出现的界面里修改密码 但我一按这三个键,是在我本地客户机生效,而不是在远程服务器. 答案 : 向远程桌面发送Ctrl+ ...
 - Python使用日常
			
#Python中文件夹和文件的判断import os My_Path = "/home/lpworkstudy/Gooddir/" #现在我们判断这个文件夹是否存在 #如果不存在, ...
 - [SHELL]:let 命令详解
			
[SHELL]:let 命令详解 摘自:https://blog.csdn.net/happygongzhuo/article/details/6819099 let :简单的计算器 语 法let[ ...