这是一份详细&清晰的 上传Android Library到JCenter 教程:如何使得自己的代码被别人优雅引用

前言

  • 在日常Android开发中,我们经常会通过远程引用别人的代码(Android Library)来实现一些功能,如引用 网络请求库 Okhttp
arduino 复制代码
// 通过在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 ,包学包会包快!

目录

* 为什么要上传 Android Library 到 JCenter ?

方便 其他Android开发者 远程使用你的代码Android Library

  • 即,通过在Android Studio的build.gradle文件中添加一句依赖即可。如下图
python 复制代码
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文件中添加依赖。如下图

arduino 复制代码
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 Library 到JCenter 的原理图

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

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

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

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

3.1 准备工作

步骤1:注册Bintray账号

注: 1.不要在官网注册,因为官网注册的是企业版,我们需要的是个人版 2.(建议)直接关联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文件中配置
ini 复制代码
<-- 配置代码 -->
// 配置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文件中配置
javascript 复制代码
<-- 配置代码 -->
// 配置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输入以下命令
ini 复制代码
// 每行命令均用空格隔开,此处是为了展示才会分行
​
<-- 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次上传可能需要较长时间,请耐心等待(访问外国网站)。上传成功提示如下:
  • 注:执行可能出错的问题
arduino 复制代码
// 错误日志:说明权限有问题
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输入以下命令
ini 复制代码
// 每行命令均用空格隔开,此处是为了展示才会分行
​
<-- 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的代码开源库

步骤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

python 复制代码
dependencies {
    compile 'scut.carson_ho:CircileView:1.0.0'
}

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

ini 复制代码
<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了
相关推荐
我是陈泽13 小时前
一行 Python 代码能实现什么丧心病狂的功能?圣诞树源代码
开发语言·python·程序员·编程·python教程·python学习·python教学
肖哥弹架构2 天前
Spring 全家桶使用教程
java·后端·程序员
IT杨秀才5 天前
自己动手写了一个协程池
后端·程序员·go
程序员麻辣烫6 天前
像AI一样思考
程序员
一颗苹果OMG8 天前
关于进游戏公司实习的第一周
前端·程序员
万少8 天前
你会了吗 HarmonyOS Next 项目级别的注释规范
前端·程序员·harmonyos
楽码9 天前
彻底理解时间?在编程中使用原子钟
后端·算法·程序员
江南一点雨9 天前
又一家培训机构即将倒闭!打工人讨薪无果,想报名的小伙伴擦亮眼睛~
java·程序员
用户86178277365189 天前
ELK 搭建 & 日志集成
java·后端·程序员
河北小田10 天前
局部变量成员变量、引用类型、this、static
java·后端·程序员