阿里云服务器免费领卷啦。

捡代码论坛-最全的游戏源码下载技术网站!

 找回密码
 立 即 注 册

QQ登录

只需一步,快速开始

搜索
关于源码区的附件失效或欺骗帖, 处理办法
查看: 1725|回复: 0

把Android library上传到jCenter和Maven Central

[复制链接]

4208

主题

210

回帖

12万

积分

管理员

管理员

Rank: 9Rank: 9Rank: 9

积分
126171
QQ
发表于 2017-2-17 17:48:31 | 显示全部楼层 |阅读模式
前言

我们在Android Studio中使用一些第三方库时(例如:gson),只需要在moduel的build.gradle中添加一条依赖就可以了:


  1. dependencies {
  2.     compile 'com.google.code.gson:gson:2.3.1'
  3. }
复制代码
然后Android Studio就会去jCenter仓库或者Maven Central仓库,自动去寻找,并且下载这个第三方库。
而'com.google.code.gson:gson:2.3.1'就是第三方库在仓库中的地址。它的组成部分如下:

com.google.code.gson gson 2.3.1
groupId artifactId version

所以,如果自己也有一些轮子想分享给大家使用,就需要把它传到jCenter或Maven Central中。下面就是上传的具体方法。

申请账号

jCenter和Maven Central是两个标准的Maven仓库,其中jCenter是Google官方默认的中央仓库。它们分别由bintray和sonatype维护。


仓库名称 维护机构 Android Studio中使用
jCenter bintray jcenter()
maven sonatype mavenCentral()




所以,如果想把library传到jCenter和Maven Central,必须要有bintraysonatype的账号。


为library配置插件
1. 配置Gradle Android Maven plugin
  • 在project的build.gradle中添加依赖


  1. dependencies {
  2.     classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
  3. }
复制代码
在library的build.gradle中应用插件
  1. apply plugin: 'com.github.dcendents.android-maven'
复制代码
2. 配置Gradle Bintray Plugin
  • 在project的build.gradle中添加依赖


  1. dependencies {
  2.     classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7'
  3. }
复制代码


在library的build.gradle中的应用插件


  1. apply plugin: 'com.jfrog.bintray'
复制代码


3. 配置完以后,project和library的build.gradle应该分别是下面这样

project:


  1. buildscript {
  2.     repositories {
  3.         jcenter()
  4.     }

  5.     dependencies {
  6.         classpath 'com.android.tools.build:gradle:2.1.2'
  7.         //Gradle Android Maven plugin
  8.         classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
  9.         //Gradle Bintray Plugin
  10.         classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.1'
  11.     }
  12. }
复制代码
library:


  1. apply plugin: 'com.android.library'
  2. //Gradle Android Maven plugin
  3. apply plugin: 'com.github.dcendents.android-maven'
  4. //Gradle Bintray Plugin
  5. apply plugin: 'com.jfrog.bintray'
复制代码


配置Gradle Bintray Plugin插件

在第二步中,已经为library配置了Gradle Bintray Plugin插件,但是为了能够使用它,还需要对Gradle Bintray Plugin进行进一步的配置。
对Gradle Bintray Plugin的配置,在library的build.gradle中进行。


1. 为bintray账号设置 API Key
  1. 登陆 bintray
  2. Edit Your Profile -> API Key
复制代码


2. 在project的local.properties中添加bintray的账号信息
  1. bintray.user = bintray_username
  2. bintray.apikey = bintray_api_key
复制代码

local.properties在工程创建时,就已经被默认加到.gitignore文件中了,不会被误传到仓库,所以通常都用它来保存账号的配置信息。


3. 在library的build.gradle文件中添加bintray的配置信息
  • 添加bintray账号
    从project的local.properties文件读取




  1. bintray {
  2.     user = properties.getProperty("bintray.user")
  3.     key = properties.getProperty("bintray.apikey")
  4.     ...
  5. }
复制代码

配置要上传到Bintray中的package的信息
以下四个是package的必需项:

  • repo,bintray中的目的仓库名字
    • bintray中默认有九个仓库,且仓库的名字都是固定的,如:maven,npm等
  • name,package的名字,也就是artifactId
  • licenses,package的licenses
  • vcsUrl,package的仓库地址

下面我的一个library的bintray配置信息:




  1. bintray {
  2.     ...
  3.     pkg {
  4.         repo = 'maven'
  5.         name = 'magicreddot'
  6.         vcsUrl = 'https://github.com/kanglongba/MagicRedDot.git'
  7.         licenses = ['Apache-2.0']
  8.         userOrg = 'bintray_user' //可选项,如果作者属于一个组织,填写组织的名字;否则默认为‘BINTRAY_USER’
  9.     }
  10. }
复制代码


配置package的版本信息

  • 必须项
    • name,版本名字
  • 可选项
    • desc,版本描述
    • released,此版本发布的日期。有格式要求:
      • 'yyyy-MM-dd'T'HH:mm:ss.SSSZZ'
      • java.util.Date instance
    • vcsTag,版本控制的tag名字
    • attributes,版本附加的属性信息

上实例:


  1. bintray {
  2.     ...
  3.     pkg {
  4.         ...
  5.         version {
  6.             name = '1.0.0-Final‘
  7.             desc = 'a powerful red dot widget for android'
  8.             released  = new Date()
  9.             vcsTag = 'v1.0.0'
  10.             attributes = ['gradle-plugin': 'com.use.less:com.use.less.gradle:gradle-useless-plugin']
  11.         }
  12.     }
  13. }
复制代码


4. 定义要上传到Bintray的文件集合

Gradle Bintray Plugin插件提供三种方式,分别是:

三种我都不懂,但是大家都用 Configurations,我也跟风这么写:




  1. bintray {
  2.     ...
  3.     configurations = ['archives']
  4. }
复制代码


至此,对Gradle Bintray Plugin插件的配置就完成了。最后附上我的项目-MagicRedDot的bintray配置信息。
在project的local.properties中:


  1. bintray.user = bintray_username
  2. bintray.apikey = bintray_api_kay
  3. bintray.gpg.password = gpg_passphase
复制代码


在library的build.gradle中:


  1. def siteUrl = 'https://github.com/kanglongba/MagicRedDot'   // 项目的主页
  2. def gitUrl = 'https://github.com/kanglongba/MagicRedDot.git'   // Git仓库的url
  3. Properties properties = new Properties()
  4. properties.load(project.rootProject.file('local.properties').newDataInputStream())
  5. bintray {
  6.     user = properties.getProperty("bintray.user")
  7.     key = properties.getProperty("bintray.apikey")
  8.     configurations = ['archives']
  9.     pkg {
  10.         repo = "maven"
  11.         name = "magicreddot"    //发布到JCenter上的项目名字
  12.         websiteUrl = siteUrl
  13.         vcsUrl = gitUrl
  14.         licenses = ["Apache-2.0"]
  15.         publish = true
  16.         version {
  17.             desc = 'a powerful red dot widget for android'
  18.             gpg {
  19.                 sign = true //Determines whether to GPG sign the files. The default is false
  20.                 passphrase = properties.getProperty("bintray.gpg.password")
  21.                 //Optional. The passphrase for GPG signing'
  22.             }
  23.         }
  24.     }
  25. }
复制代码


配置Gradle Android Maven plugin插件

Gradle Bintray Plugin插件用来使Android Studio可以自动接入你在bintray中的指定仓库,Gradle Android Maven plugin的插件用来执行具体的打包、上传工作。它们合力将library发布到bintray仓库中。

对Gradle Android Maven plugin插件的配置全部都在library的build.gradle文件中进行,具体可以参考它的文档
我参考了其他人的配置,觉得主要可分为两个:

  • 对package的配置
    配置groupId和version


  1. group = 'com.bupt.edison.magicreddot'
  2. version = '1.0.0'
复制代码

命名groupId时,一般由host和library name组成。com.bupt.edison就是我的host,magicreddot就是我的library name。通常情况下,artifactId也以library name命名。

artifactId也可以在这配置,在project的settings.gradle中添加:


  1. rootProject.name = 'magicreddot'
复制代码
  • 但是,更常见的是在Gradle Bintray Plugin插件中配置。
  • 对任务的配置
    较长,直接贴代码


  1. install {
  2.     repositories.mavenInstaller {
  3.         // This generates POM.xml with proper parameters
  4.         pom {
  5.             project {
  6.                 packaging 'aar'
  7.                 // Add your description here
  8.                 name 'Android Magic Dot'
  9.                 description 'a powerful red dot widget for android'
  10.                 url siteUrl
  11.                 // Set your license
  12.                 licenses {
  13.                     license {
  14.                         name 'The Apache Software License, Version 2.0'
  15.                         url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
  16.                     }
  17.                 }
  18.                 developers {
  19.                     developer {
  20.                         id 'kanglongba'        //填写bintray或者github的用户名
  21.                         name 'edison'         //姓名,可以是中文
  22.                         email 'kanglongba@gmail.com'
  23.                     }
  24.                 }
  25.                 scm {
  26.                     connection gitUrl
  27.                     developerConnection gitUrl
  28.                     url siteUrl
  29.                 }
  30.             }
  31.         }
  32.     }
  33. }
  34. task sourcesJar(type: Jar) {
  35.     from android.sourceSets.main.java.srcDirs
  36.     classifier = 'sources'
  37. }
  38. task javadoc(type: Javadoc) {
  39.     source = android.sourceSets.main.java.srcDirs
  40.     classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
  41. }
  42. task javadocJar(type: Jar, dependsOn: javadoc) {
  43.     classifier = 'javadoc'
  44.     from javadoc.destinationDir
  45. }
  46. artifacts {
  47.     archives javadocJar
  48.     archives sourcesJar
  49. }
复制代码


上传到bintray中的仓库

上面已经把相关的配置都做好了,接下来就可以将library上传到bintray中的仓库了。
两种方式:


在project目录下执行


  1. ./gradlew install
  2. ./gradlew bintrayUpload
复制代码


  • 在project的Android Studio的Gradle面板中,找到名为 bintrayUpload 的task,然后执行。

同步到jCenter中

如果只是上传到自己的bintray仓库中,那么别人想使用的话,必须在project的build.gradle中添加你的仓库地址:


  1. repositories {
  2.     ...
  3.     maven {
  4.         url 'https://dl.bintray.com/kanglongba/maven'
  5.     }
  6. }
复制代码
因此,为了更加开源,还需要把library同步到jCener中。jCenter是bintray维护的一个公共仓库。
操作很简单,在library的bintray主页直接点击Add to JCenter按钮,比如MagicRedDot:


  1. MagicRedDot的bintray主页 -> Linked To -> Add to JCenter
复制代码


接下来会弹出一个页面,什么也不用填,直接 send。
然后等待管理员审核,大概四个小时左右,library就被添加到了jCenter仓库中。这时可以访问jCenter的仓库地址,根据library的groupId和artifactId看看是否添加成功。

至此,就可以在项目中通过添加依赖的方式使用我们的库了:


  1. dependencies {
  2.     ...
  3.     compile 'com.bupt.edison.magicreddot:magicreddot:1.0.0'
  4. }
复制代码


从jCenter同步到Maven Central

虽然jCenter是Android默认的中央仓库,但是Maven Central仍有很多使用者,因次最好也将library传到Maven Central仓库中。
由于已经将library上传到了jCenter中,所以可以直接从jCenter同步到Maven Central。幸运的是,同步操作非常简单,比直接上传到Maven Central简单很多。

同步操作可以分为以下四步,其中第二步和第三步只需要操作一次:


1. 获取上传资格
2. 生成签名
3. 关联bintray账号
4. 同步到Maven Central

由于这部分步骤较多,请参考这篇文章的图文部分


Reference

  1. 原文地址:https://www.zybuluo.com/kanglongba/note/449727
复制代码




捡代码论坛-最全的游戏源码下载技术网站! - 论坛版权郑重声明:
1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与捡代码论坛-最全的游戏源码下载技术网站!享有帖子相关版权
3、捡代码论坛版权,详细了解请点击。
4、本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。
5、若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。 我们不承担任何技术及版权问题,且不对任何资源负法律责任。
6、如无法链接失效或侵犯版权,请给我们来信:jiandaima@foxmail.com

回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立 即 注 册

本版积分规则

技术支持
在线咨询
QQ咨询
3351529868

QQ|手机版|小黑屋|捡代码论坛-专业源码分享下载 ( 陕ICP备15015195号-1|网站地图

GMT+8, 2024-4-25 17:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表