如何使得自己的代码被别人优雅引用:快速上传Android Library到JCenter超详细教程

前言

  • 在日常Android开发中,我们经常会通过 远程引用别人的代码(Android Library来实现一些功能,如引用 网络请求库 Okhttp
// 通过在Android Studio的build.gradle文件中添加依赖
dependencies {
  compile 'com.squareup.okhttp:okhttp:2.4.0'
}
  • 那么,该如何使得自己的代码(Android Library)被别人优雅的引用呢?
  • 答:将代码上传至到 JCenter ->> 别人再通过 JCenter引用
示意图
  • 上传 Android LibraryJCenter有许多方法;其中,采用 Android Studiobintray-release插件上传代码到 JCenter步骤 & 配置简单,可以使你快速、简单的发布开源项目
示意图
示意图
  • 本文将手把手教你 采用 Android Studiobintray-release插件方法发布开源项目(Android Library) 到 JCenter ,包学包会包快!

目录

示意图

1. 为什么要上传 Android Library 到 JCenter ?

  • 方便 其他Android开发者 远程使用你的代码Android Library
  • 即,通过在Android Studiobuild.gradle文件中添加一句依赖即可。如下图
dependencies {
  compile 'com.squareup.okhttp:okhttp:2.4.0'
}

2. 知识储备

2.1 代码引用的本质

jar 包 / aar包的引用

  1. 即别人引用你的代码 = 引用你的jar 包 / aar
  2. 此处主要讲解一下 aar文件
示意图

2.2 代码引用方式

对于 Android 代码引用方式主要有2种方式:

  1. 对于eclipse: 下载包 --> 放入到 lib 文件目录
  2. 对于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仓库 = 中央远程仓库

  • 作用:存储代码 & 提供接口供外部调用内部代码
  1. Bintray 公司维护,Bintray负责将开发者上传的Library传到JCenter
  2. Maven Central 则由sonatype.org维护
  • 上传Android LibraryJCenter 的原理图
示意图

帮助理解:JCenter = 仓库,Bintray = 送货卡车,代码库 = 货物

本文主要讲解如何通过bintray-release插件快速上传代码(Library)到 Jcenter


3. 具体如何上传 Android Library 到 JCenter ?

  • 整个过程分为2部分:准备工作 & 上传
示意图
  • 具体做法如下

3.1 准备工作

示意图

步骤1:注册Bintray账号

注:

  1. 不要在官网注册,因为官网注册的是企业版,我们需要的是个人版
  2. (建议)直接关联 Github账号进行注册 & 登录
示意图

步骤2:在Bintray上建立仓库

具体如下图

示意图

步骤3:在代码项目中创建Module文件夹

  • 步骤如下


    image.png
  • 创建成功后,你会发现Module文件夹的结构和 原有的项目文件夹(app)非常类似

步骤4:将需要上传的代码存放到Module文件中

  • 本文 以上传一个 自定义View 为例子
  • 该自定义View代码包括:1个类文件 & 属性文件
示意图

步骤5:将整个项目上传到 Github

关于如何上传到Github,此处不作过多描述。

具体请看文章:程序员必知:图文清晰介绍Git与Github(含二者关系、区别 & 使用场景)

示意图

3.2 具体上传

示意图

步骤1:配置bintray-release插件

包括在Module & 项目 的Gradle文件配置:

  • 在该ModuleGradle文件中配置
示意图
<-- 配置代码 -->
// 配置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中

  • AndroidStudioTerminal输入以下命令
// 每行命令均用空格隔开,此处是为了展示才会分行

<-- 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
示意图
  • 操作示意图
示意图
  • 第1次上传可能需要较长时间,请耐心等待(科学上网)。上传成功提示如下:
示意图
  • 注:执行可能出错的问题
// 错误日志:说明权限有问题
bash: ./gradlew: Permission denied

// 解决方案:获得权限,直接在终端输入以下命令
chmod +x gradlew
  • 至此,已经将项目上传到 JCenter了,可进入查看相关信息
示意图

但此时还不能够被外部直接被引用,请继续往下看。

步骤3:添加到JCenter

  • 请按照以下步骤真正添加该项目到JCenter

    示意图

  • 提交申请后,需要等待 管理员审核通过(x小时),会以 站内私信
    方式通知

示意图
  • 至此,别人就可直接通过 添加你的依赖 来引用你的Android Library了!
  • 即,如何将代码上传到Jcenter讲解完毕

3.3 额外注意:版本更新

当需要进行Android Library版本更新时,只需要以下2个步骤:

  • 步骤1:在该ModuleGradle文件中的配置2中 重新配置版本号

其他什么都不要修改!!!

示意图
  • 步骤2:重新执行上传代码
    AndroidStudioTerminal输入以下命令
// 每行命令均用空格隔开,此处是为了展示才会分行

<-- 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:查看依赖

示意图
// 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

dependencies {
    compile 'scut.carson_ho:CircileView:1.0.0'
}

步骤3:在XML文件中添加控件 & 添加属性

<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. 总结


请点赞!因为你的鼓励是我写作的最大动力!

相关文章阅读
Android开发:最全面、最易懂的Android屏幕适配解决方案
Android事件分发机制详解:史上最全面、最易懂
Android开发:史上最全的Android消息推送解决方案
Android开发:最全面、最易懂的Webview详解
Android开发:JSON简介及最全面解析方法!
Android四大组件:Service服务史上最全面解析
Android四大组件:BroadcastReceiver史上最全面解析


欢迎关注Carson_Ho的简书!

不定期分享关于安卓开发的干货,追求短、平、快,但却不缺深度

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,013评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,205评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,370评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,168评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,153评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,954评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,271评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,916评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,382评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,877评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,989评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,624评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,209评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,199评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,418评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,401评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,700评论 2 345

推荐阅读更多精彩内容