目的

发布自己的android library(也就是aar)到公共的jcenter仓库,所有的人都能用gradle最简单的方式引用。

为什么选择jcenter,它兼容maven,而且支持更多形式仓库,android studio最新版本已经默认jcenter了。

环境

Android Studio 1.0+

参考文章

使用Gradle发布Android开源项目到JCenter

使用Gradle发布项目到JCenter仓库

Publishing Gradle Android Library to jCenter Repository

实际上,有这3篇文章已经足够你学会如何发布项目到jcenter了。不过正好我最近在弄一个LessCode项目并发布到了jcenter中了,所以以此来整理一下吧。

一、注册账号

在https://bintray.com/上注册一个账号。

我是以github账号直接登陆的。

二、记录API Key

注册后,在https://bintray.com/profile/edit页面的左边菜单的最下面有API Key,点击后:



复制明文API key,后面会用到。

三、新建项目(以LessCode为例)

在Android Studio中New一个Project。

完成之后在LessCode下会有一个build.gradle,在buildscript/dependencies中添加两个classpath:

classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0'
classpath 'com.github.dcendents:android-maven-plugin:1.2'

这是两个帮助发布项目的插件,完整的project build.gradle请查看这里

四、新建模块

在当前Project中New一个Module,比如我这里叫lesscode-core,这个默认lesscode-core其实已经是一个完整的Android Library,就可以以aar的形式发布了。

完成之后在lesscode-core下也会有一个build.gradle,这个build.gradle是今天的重中之重。

五、构建build.gradle

默认的build.gradle大概是这样的:

apply plugin: 'com.android.library'

android {
compileSdkVersion 21
buildToolsVersion "21.1.2" defaultConfig {
minSdkVersion 11
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
} dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}

下面我们一步步修改补充这个build.gradle

1. 添加插件

// 根节点添加
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'

2. 定义版本

// 根节点添加
version = "0.1"

3. 定义相关网站

有单独的官方网站那是最好的,没用的话就用git网址就可以了。

// 根节点添加
def siteUrl = 'https://github.com/openproject/LessCode' // project homepage
def gitUrl = 'https://github.com/openproject/LessCode.git' // project git

4. 定义Group

举个例子,当我们引用recylerview的时候是这样的:

compile 'com.android.support:recyclerview-v7:21.0.2'

引号内字符串以冒号分割为三部分,第一部分就是group,第二部分是name, 第三部分是上面定义的version。

// 根节点添加
group = "com.jayfeng.lesscode"

5. 定义pom并打包aar

上传到jcenter至少需要四个文件,除了打包的aar之外,还需要pom和javadoc,source,否则是通不过jcenter审核的。不过不用紧张,这些我们都可以用脚本生成。

// 根节点添加
install {
repositories.mavenInstaller {
// This generates POM.xml with proper parameters
pom {
project {
packaging 'aar'
name 'Less Code For Android'
url siteUrl
licenses {
license {
name 'The Apache Software License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
developers {
developer {
id 'jayfeng'
name 'jian.feng'
email '673592063@qq.com'
}
}
scm {
connection gitUrl
developerConnection gitUrl
url siteUrl
}
}
}
}
}

6. 打包javadocjar和sourcejar

这两个也是上传到jcenter必须要的。

task sourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
} task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
} task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
} artifacts {
archives javadocJar
archives sourcesJar
}

7. 上传到Jcenter仓库

上传到jcenter的网站BinTray,需要用户验证,需要2个值:

// 示例值, 仅供参考
// your bintray user name
// your bintray api key
bintray.user=openproject
bintray.apikey=c5434272d522d35d1a0123459981225564155753

第二个API Key就是你在上面记录的API Key。

因为这个属于个人隐私,一般不能传到网上去,所以需要在记录到LessCode下的local.properties中(利用gitignore忽略这个文件到git),然后脚本再从local.properties中读取这两个值。

Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
user = properties.getProperty("bintray.user")
key = properties.getProperty("bintray.apikey")
configurations = ['archives']
pkg {
repo = "maven"
name = "lesscode-core" // project name in jcenter
websiteUrl = siteUrl
vcsUrl = gitUrl
licenses = ["Apache-2.0"]
publish = true
}
}

完整的build.gradle,请参考LessCode/lesscode-core/build.gradle

对于需要注意的地方,我都在该行行尾加了#CONFIG#注释字样。

8. 执行

根据上面的build.gradle,会产生几个特别的gradle任务:

javadocJar
sourcesJar
install
bintrayUpload

通过gradew执行这些任务即可。

gradew javadocJar
gradew sourcesJar
gradew install
gradew bintrayUpload

或者通过Android Studio的最右边栏的Gradle窗口分别可视化操作,点击执行:

9. 请求审核

当bintrayUpload成功之后,

  • 在我的主页https://bintray.com/openproject/右下部分Latest Activity块,会看到你提交了一个项目,
  • 从这个Latest Activity列表中点击你的项目,
  • 进入详情页https://bintray.com/openproject/maven/lesscode-core/view,
  • 找到Maven Central标签,
  • 鼠标放上去它会提示你去提交审核,点击进入后,随便写什么都可以了。

只要上面没问题,一般审核很快,几个小时就差不多了。

我的情况稍微波折一点,第一个版本0.0.1没有传javadocjar和sourcejar,等了半天,管理员站内信通知审核失败,再传的话需要升级到0.0.2,否则0.0.1已经存在不能重复上传,0.0.2版本上传后,等了半天,管理员告诉我0.0.2版本OK了,但是0.0.1版本还是没上传,于是我找了找能不能删了0.0.1版本,是可以删除的,这样的话其实前面没必要升级到0.0.2了,删了重新上传0.0.1也是可以的。删了之后,还是要按上面的步骤重新发请求审核,等了几个小时就通过了。

这次审核通过了,后面升级就不用再审核了。

第三方引用的成就感

compile 'com.jayfeng.lesscode:lesscode-core:0.1.2'

小结

相对于android源码或者jar包的形式,开发者可能更乐意以这种方式开源自己的android框架或者组件。

  • 对于使用者来说,引用方式更简单了
  • 对于开发者开说,能够被中心仓库接受,是一种认可。

更多参考,请查看LessCode

Android拓展系列(12)--使用Gradle发布aar项目到JCenter仓库的更多相关文章

  1. Android Studio系列教程四--Gradle基础

    Android Studio系列教程四--Gradle基础 2014 年 12 月 18 日 DevTools 本文为个人原创,欢迎转载,但请务必在明显位置注明出处!http://stormzhang ...

  2. 如何在Android Studio中使用Gradle发布项目至Jcenter仓库

    简述 目前非常流行将开源库上传至Jcenter仓库中,使用起来非常方便且易于维护,特别是在Android Studio环境中,只需几步配置就可以轻松实现上传和发布. Library的转换和引用 博主的 ...

  3. Android拓展系列(11)--打造Windows下便携的Android源码阅读环境

    因为EXT和NTFS格式的差异,我一直对于windows下阅读Android源码感到不满. 前几天,想把最新的android5.0的源码下下来研究一下,而平时日常使用的又是windows环境,于是专门 ...

  4. [转]Android Studio系列教程六--Gradle多渠道打包

    转自:http://www.stormzhang.com/devtools/2015/01/15/android-studio-tutorial6/ Android Studio系列教程六--Grad ...

  5. Android Studio系列教程六--Gradle多渠道打包

    Android Studio系列教程六--Gradle多渠道打包 2015 年 01 月 15 日 DevTools 本文为个人原创,欢迎转载,但请务必在明显位置注明出处!http://stormzh ...

  6. Android Studio系列教程五--Gradle命令详解与导入第三方包

    Android Studio系列教程五--Gradle命令详解与导入第三方包 2015 年 01 月 05 日 DevTools 本文为个人原创,欢迎转载,但请务必在明显位置注明出处!http://s ...

  7. 使用Gradle发布项目到JCenter仓库 (转载)

    原文:使用Gradle发布项目到JCenter仓库 这篇文章介绍通过Gradle把开源项目发布到公共仓库JCenter中,方便你我他的事情,我们都是很懒的嘛.JCenter现在是Android Stu ...

  8. Gradle实战:发布aar包到maven仓库

    查看原文:http://blog.csdn.net/u010818425/article/details/52441711 Gradle实战系列文章: <Gradle基本知识点与常用配置> ...

  9. [Gradle系列]Gradle发布module库到jCenter, 并构建自己的企业Maven私服

    Tamic 作者: http://blog.csdn.net/sk719887916/article/details/53224544 前言 andorid开发者经常会看到xx公司发布了xx项目,xx ...

随机推荐

  1. 正确理解 clear:both

    要注意以下几点: 1. 浮动元素会被自动设置成块级元素,相当于给元素设置了display:block(块级元素能设置宽和高,而行内元素则不可以). 2. 浮动元素后边的非浮动元素显示问题. 3. 多个 ...

  2. Silverlight动画之 Animation Easing

    使用Animation Easing函数可以创造出更具有动感的动画.对比下面两个动画. 普通线性动画: <Storyboard x:Name="growStoryboard" ...

  3. expression<Func<object,Bool>> 及 Func<oject,bool>用法

    using System;using System.Collections.Generic;using System.Linq;using System.Linq.Expressions;using ...

  4. IOS- 自定义 UIButton

    #pragma mark init方法内部默认会调用initWithFrame: - (id)initWithFrame:(CGRect)frame { self = [super initWithF ...

  5. Mac下java开发环境的搭建与开发工具的安装

    一.安装JDK 1.根据你当前环境的需要,下载相应的JDK并安装,安装步骤与其他Mac软件安装方法相同,我安装的是jdk1.8.0_74.jdk,mac中jdk1.8的默认位置:/Library/Ja ...

  6. Git命令之上传与同步

    操作步骤,可参考:http://blog.csdn.net/chenyufeng1991/article/details/47299461. 1.在本地仓库中,即项目目录下创建文件,如: 2.查看当前 ...

  7. DB2 SQL Mixed data in character strings

    Mixed character data and graphic data are always allowed for Unicode, but for EBCDIC and ASCII, the ...

  8. NYOJ题目112指数运算

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAs0AAAIICAIAAAAaCETRAAAgAElEQVR4nO3drW7jWtwv4PcmwnMhxb ...

  9. linux cpuInfo

    转自:http://blog.csdn.net/lgstudyvc/article/details/7889364   /proc/cpuinfo文件分析 在Linux系统中,提供了proc文件系统显 ...

  10. 【Javascript】IE8兼容 背景图片与a标签的onclick事件

    先说几句牢骚话. 虽然IE8比之IE6.7有很大的进步,但是在执行效率.兼容性上仍然有很多问题.被广大开发者喜爱的平台才是好平台. 可惜多亏当年盗版XP打开中国的计算机市场,IE作为一款捆绑软件仍然在 ...