前言
- 在日常
Android
开发中,我们经常会通过远程引用别人的代码(**Android Library
**)来实现一些功能,如引用 网络请求库Okhttp
// 通过在Android Studio的build.gradle文件中添加依赖
dependencies {
compile 'com.squareup.okhttp:okhttp:2.4.0'
}
- 那么,该如何使得自己的代码(
Android Library
)被别人优雅的引用呢? - 答:将代码上传至到
JCenter
->> 别人再通过JCenter
引用
- 上传
Android Library
到JCenter
有许多方法;其中,采用Android Studio
的**bintray-release
插件**上传代码到JCenter
的步骤 & 配置简单,可以使你快速、简单的发布开源项目
- 本文将手把手教你 采用
Android Studio
**的**bintray-release
**插件方法发布开源项目(**Android Library
**) 到**JCenter
,包学包会包快!
目录
1. 为什么要上传 Android Library 到 JCenter ?
- 方便 其他
Android
开发者 远程使用你的代码Android Library
- 即,通过在
Android Studio
的build.gradle
文件中添加一句依赖即可。如下图
dependencies {
compile 'com.squareup.okhttp:okhttp:2.4.0'
}
2. 知识储备
2.1 代码引用的本质
对 jar
包 / aar
包的引用
- 即别人引用你的代码 = 引用你的
jar
包 /aar
包 - 此处主要讲解一下
aar
文件
2.2 代码引用方式
对于 Android
代码引用方式主要有2种方式:
- 对于
eclipse
: 下载包 --> 放入到lib
文件目录 - 对于
Android Studio
:在build.gradle
文件中添加依赖。如下图
dependencies {
compile 'com.squareup.okhttp:okhttp:2.4.0'
}
// 当然,Android Studio 也可以通过 下载包 --> 放入到 lib 文件目录 的方式进行包的引用
2.3 Android Studio添加依赖(Library)原理
2.4 JCenter 介绍
- 定义:一种远程的
Android library
文件服务器
Maven
仓库 = 中央远程仓库
- 作用:存储代码 & 提供接口供外部调用内部代码
- 由
Bintray
公司维护,Bintray
负责将开发者上传的Library
传到JCenter
中 Maven Central
则由sonatype.org
维护- 上传
Android Library
到JCenter
的原理图
帮助理解:
JCenter
= 仓库,Bintray
= 送货卡车,代码库 = 货物
本文主要讲解如何通过bintray-release
插件快速上传代码(Library
)到 Jcenter
3. 具体如何上传 Android Library 到 JCenter ?
- 整个过程分为2部分:准备工作 & 上传
- 具体做法如下
3.1 准备工作
步骤1:注册Bintray账号
- 点击即直达 注册地址
注:
- 不要在官网注册,因为官网注册的是企业版,我们需要的是个人版
- (建议)直接关联
Github
账号进行注册 & 登录
步骤2:在Bintray上建立仓库
具体如下图
步骤3:在代码项目中创建Module
文件夹
- 步骤如下
- 创建成功后,你会发现
Module
文件夹的结构和 原有的项目文件夹(app
)非常类似
步骤4:将需要上传的代码存放到Module文件中
- 本文 以上传一个 自定义
View
为例子 - 该自定义
View
代码包括:1个类文件 & 属性文件
步骤5:将整个项目上传到 Github
关于如何上传到Github
,此处不作过多描述。
具体请看文章:程序员必知:图文清晰介绍Git与Github(含二者关系、区别 & 使用场景)
3.2 具体上传
步骤1:配置bintray-release
插件
包括在Module
& 项目 的Gradle
文件配置:
- 在该
Module
的Gradle
文件中配置
<-- 配置代码 -->
// 配置1
apply plugin: 'com.novoda.bintray-release' // 添加bintray插件
// 配置2
publish {
userOrg = 'carson-ho' // Binary用户名
repoName = 'CircileView' // Binary上的刚才新建的仓库名(Repository)
groupId = 'scut.carson_ho' // 依赖名compile 'x:y:z'中的包名x
artifactId = 'CircileView' // 依赖名compile 'x:y:z'中的项目名y
publishVersion = '1.0.0' // 依赖名compile 'x:y:z'中的版本号z
desc = 'a CircileView' // 对该开源组件的说明
website = 'https://github.com/Carson-Ho/DIY_View' // VCS地址,即填写项目上传的Github地址
}
// 特别注意:保持你的library module的名字同artifactId一样
// 1. 背景
// 在Bintray上你的项目的maven-metadata.xml文件的路径=gruopId "/" module名称
// 如你的groupId=scut.carson_ho,artifactId是CircileView,但module名称是circlelibrary
// 此时,项目文件在scut.carson_ho.CircileView目录下的,但maven-metadata.xml文件却是在scut.carson_ho.circlelibrary目录下的。
// 2. 冲突:若你有多个项目groupId一样 & artifactId不一样,但module名称都是library的话,maven-metadata.xml文件的地址可能会一样,即都是:gruopId "/" module名称,那么就可能产生冲突
// 3. 解决方案:保持module名称和artifactId一致
- 在该项目的
Gradle
文件中配置
<-- 配置代码 -->
// 配置1
classpath 'com.novoda:bintray-release:0.3.4'
// 配置2
allprojects {
tasks.withType(Javadoc) {
options.addStringOption('Xdoclint:none', '-quiet')
options.addStringOption('encoding', 'UTF-8')
}
}
allprojects {
tasks.withType(Javadoc) {
options{
encoding "UTF-8"
charSet 'UTF-8'
links "http://docs.oracle.com/javase/7/docs/api"
}
}
}
步骤2:上传项目到JCenter中
- 在
AndroidStudio
的Terminal
输入以下命令
// 每行命令均用空格隔开,此处是为了展示才会分行
<-- Windows版本 -->
gradlew.bat clean build bintrayUpload
-PbintrayUser=carson-ho // Binary用户名
-PbintrayKey=************* // Binary上的API key,具体获取见下说明
-PdryRun=false
<-- Mac版本 -->
./gradlew clean build bintrayUpload
-PbintrayUser=carson-ho
-PbintrayKey=*****************************
-PdryRun=false
- 注:获取API Key(需回到
Jcenter
网站)
- 操作示意图
- 第1次上传可能需要较长时间,请耐心等待(访问国外网站)。上传成功提示如下:
- 注:执行可能出错的问题
// 错误日志:说明权限有问题
bash: ./gradlew: Permission denied
// 解决方案:获得权限,直接在终端输入以下命令
chmod x gradlew
- 至此,已经将项目上传到
JCenter
了,可进入查看相关信息
但此时还不能够被外部直接被引用,请继续往下看。
步骤3:添加到JCenter
- 请按照以下步骤真正添加该项目到
JCenter
- 提交申请后,需要等待 管理员审核通过(x小时),会以 站内私信 方式通知
- 至此,别人就可直接通过 添加你的依赖 来引用你的
Android Library
了! - 即,如何将代码上传到**
Jcenter
**讲解完毕
3.3 额外注意:版本更新
当需要进行Android Library
版本更新时,只需要以下2个步骤:
- 步骤1:在该
Module
的Gradle
文件中的配置2中 重新配置版本号
其他什么都不要修改!!!
- 步骤2:重新执行上传代码
在
AndroidStudio
的Terminal
输入以下命令
// 每行命令均用空格隔开,此处是为了展示才会分行
<-- Windows版本 -->
gradlew.bat clean build bintrayUpload
-PbintrayUser=carson-ho // Binary用户名
-PbintrayKey=************* // Binary上的API key,具体获取见下说明
-PdryRun=false
<-- Mac版本 -->
./gradlew clean build bintrayUpload
-PbintrayUser=carson-ho
-PbintrayKey=*****************************
-PdryRun=false
- 等待一定时间,就可以看到
Binary
网站上更新了Android Library
的新版本。
至此,关于 将自己代码上传到 JCenter
的步骤 已经讲解完毕。
4. 测试
- 在讲解如何上传代码到
JCenter
后,需要测试上传的代码库是否能正确被其他开发者正常引用 - 下面,我将详细讲解如何测试上传到
JCenter
的代码开源库
以手把手教你写一个完整的自定义View为例进行讲解
步骤1:查看依赖
代码语言:javascript复制// Maven
<dependency>
<groupId>scut.carson_ho</groupId>
<artifactId>CircileView</artifactId>
<version>1.0.0</version>
<type>pom</type>
</dependency>
// Gradle
compile 'scut.carson_ho:CircileView:1.0.0'
步骤2:添加依赖(Gradle)
此处仅展示通过Gradle 添加依赖。
build.Gradle
代码语言:javascript复制dependencies {
compile 'scut.carson_ho:CircileView:1.0.0'
}
步骤3:在XML文件中添加控件 & 添加属性
代码语言:javascript复制<scut.carson_ho.circlelibrary.libraryCircle
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#000000"
android:padding="30dp"
app:circle_color="#FF4081"
/>
运行效果
5. 总结
- 看完本文后,相信你已经可以清晰 采用
bintray-release
**插件方法发布开源项目(**Android Library
**) 到**JCenter
**了**