这篇文章很长

如果已经对jcenter,maven有了一些概念,可以直接看我的另外一篇精简文章:

快速发布Abdroid Library到JCenter[精简]

开始之前先明白几个概念

maven

Maven是基于项目对象模型(POM project object model),可以通过一小段描述信息(配置)来管理项目的构建,报告和文档的软件项目管理工具

换句话说,Maven是通过pom.xml文件的配置获取jar包的,从而省去了手动拷贝jar包到project的麻烦。

gradle

Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的XML

翻译一下,gradle是通过Groovy语法,获取library,对Android来说不用自己拷贝jar或者aar了。

从哪里获取?

上面说的maven和gradle都是通过配置,然后自动获取,那么问题来了:从哪里获取?答案:代码仓库

就Android开发来说,目前两个比较著名的仓库是 mavenCentral和jcenter

mavenCentral和jcenter

mavenCentral被称为maven的权威中央仓库,但是上传library极其复杂繁琐,这也是被google换掉的原因之一;

其实从名字上看,mavenCentral有点让人困惑,会让人感觉这个仓库只支持maven的配置方式。

其实,无论是mavenCentral还是jcenter都支持maven和gradle的配置方式。

jcenter托管在 https://bintray.com ,也可以说是这个网站在维护管理jcenter仓库;

mavenCentral()被google默认替换成jcenter()

在Android Studio早期版本中,如果我们创建一个Project,给我们的默认repository是mavenCentral():

buildscript {

repositories {

mavenCentral() //现在已经被替换成了jcenter()

}

}

.

.

.

allprojects {

repositories {

mavenCentral() //现在已经被替换成了jcenter()

}

}

之后我们就可以用简单的配置,来使用library了:

implementation 'com.google.code.gson:gson:2.8.5'

正式开始

如果你读完上面的文字,我想你已经明白了,我们为什么选择上传到jcener了:Android Studio现在默认的配置的是jcenter,原因是mavenCentral上传过程太复杂。

注册bintray.com帐号

由于jcenter是托管在bintray.com上的,因此我们只要有bintray的帐号,就可以管理我们自己上传的library了。

注册这一步就不说了,没什么特别的,按照要求填写就行了。

1:添加一个新的Repository,当然如果你不想添加,bintray默认会有一个名字是maven的Repository(不想添加可跳过次步骤)

image.png

填写相关信息:

image.png

2:在Repository中添加一个Package

image.png

image.png

image.png

3:获取bintray.user和bintray.apikey,下面使用插件上传要用到

bintray.user 就是你注册时候填写的用户名,这没什么好说的。

下面主要说一下如何获取bintray.apikey:

image.png

image.png

image.png

image.png

到此,我们bintray上的配置就完全结束了:

4:编写要上传的Library的代码

使用Android Studio创建一个工程,这个工程其实的作用是为了上传和测试你自己要上传的Library。

image.png

图中的asyncokhttp其实就是一个module(Android Library),这个库其实就是封装了一下okhttp3,让其能在主线程直接调用网络请求。

看一下asyncokhttp的依赖:

dependencies {

implementation fileTree(dir: 'libs', include: ['*.jar'])

// 省略了一些不重要的信息

//这里依赖okhttp3

implementation 'com.squareup.okhttp3:okhttp:3.12.0'

}

5:使用插件开始上传

在编写测试完毕你的代码之后,我们就可以使用插件开始上传你的库了

这里用到的插件一共有两个:

1:maven插件,主要用来帮助生成和打包maven所需要上传的文件

apply plugin: 'com.github.dcendents.android-maven'

2:bintray插件,主要用来打包和上传库到bintray网站

apply plugin: 'com.jfrog.bintray'

在Project的build.gradle(根目录)中添加:

buildscript {

repositories {

google()

jcenter()

}

dependencies {

classpath 'com.android.tools.build:gradle:3.3.1'

// NOTE: Do not place your application dependencies here; they belong

// in the individual module build.gradle files

// 下面两行是新添加的

classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4'

classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'

}

}

在Project的的local.properties中添加上面获取到的bintray.user 和bintray.apikey

image.png

在Moudle的目录下创建3个文件:

image.png

1:android-maven-install.grdle主要是使用apply plugin: 'com.github.dcendents.android-maven'插件,完成maven相关文件的生成与打包。

内容:

apply plugin: 'com.github.dcendents.android-maven'

install {

repositories.mavenInstaller {

// This generates POM.xml with proper parameters

pom {

project {

packaging libraryPackaging

groupId publishedGroupId

artifactId artifact

// Add your description here

name libraryName

description libraryDesc

url websiteUrl

// Set your license

licenses {

license {

name licenseName

url licenseUrl

}

}

developers {

developer {

id developerId

name developerName

email developerEmail

}

}

scm {

connection websiteUrl

developerConnection websiteUrl

url websiteUrl

}

}

}

}

}

2:android-tasks.gradle主要是生成javadoc.jar和sorce.jar:

task javadoc(type: Javadoc) {

options.encoding = "utf-8"

source = android.sourceSets.main.java.srcDirs

classpath += files(android.bootClasspath)

options {

//links "http://docs.oracle.com/javase/7/docs/api/"

linksOffline "https://developer.android.com/reference","${android.sdkDirectory}/docs/reference"

encoding = "UTF-8"

}

exclude '**/BuildConfig.java'

exclude '**/R.java'

android.libraryVariants.all { variant ->

variant.javaCompileProvider.configure{

javadoc.classpath += files(it.classpath.files)

}

}

}

task sourcesJar(type: Jar) {

from android.sourceSets.main.java.srcDirs

classifier = 'sources'

}

task javadocJar(type: Jar, dependsOn: javadoc) {

classifier = 'javadoc'

from javadoc.destinationDir

}

artifacts {

archives javadocJar

archives sourcesJar

}

3:bintray.gradle主要是用apply plugin: 'com.jfrog.bintray'完成文件的打包上传到bintray.com

内容:

apply plugin: 'com.jfrog.bintray'

configurations {

optional

compile.extendsFrom optional

}

def siteUrl = project.websiteUrl

def gitUrl = project.vcsUrl

def libName = project.name

group = project.publishedGroupId

version = project.versionName

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 = project.bintrayRepo //发布到Bintray的maven库

name = libName //发布到Bintray上的项目名字

desc = project.libraryDesc

override = true

publish = true

publicDownloadNumbers = true

websiteUrl = siteUrl

issueTrackerUrl = project.issueTrackerUrl

vcsUrl = gitUrl

licenses = [project.licenseName]

publish = true

//attributes = ['gradle-plugin': 'com.use.less:com.use.less.gradle:gradle-useless-plugin']

version {

desc = project.libraryVersionDesc

released = new Date()

gpg {

sign = true //Determines whether to GPG sign the files. The default is false

passphrase = properties.getProperty("bintray.gpg.password")

//Optional. The passphrase for GPG signing'

}

}

}

}

6:配置Library的相关信息

在module的build.gradle的最后添加:

ext {

libraryPackaging = 'aar' //上传aar形式的打包文件

// jcenter

bintrayRepo = "network" // 你上传的位于bintray中的Repository名称,如果没有创建会有一个叫maven的

name = 'asyncokhttp' // 必须和library module的名字相同

libraryDesc = 'A OkHttp Library'

publishedGroupId = 'org.zarroboogs.http.asyncokhttp' // 填写groupId, 一般是包名,比如:com.android.support

versionName = '1.0.1' // 版本号,比如:22.2.1

websiteUrl = 'https://github.com/andforce/AsyncOkHttp' // 可以填写github上的库地址.

issueTrackerUrl = 'https://github.com/andforce/AsyncOkHttp/issues' // 可以填写github库的issue地址.

vcsUrl = 'https://github.com/andforce/AsyncOkHttp.git' // 可以填写github上库的地址.

licenseName = "Apache-2.0"

libraryVersionDesc = 'version descriotion'

// maven

artifact = 'asyncokhttp' // 必须和library module的名字相同

libraryName = 'asyncokhttp'

developerId = 'anforce'

developerName = 'andforce'

developerEmail = '86118@163.com'

licenseName = 'The Apache Software License, Version 2.0'

licenseUrl = 'http://www.apache.org/licenses/LICENSE-2.0.txt'

}

apply from: 'android-maven-install.gradle'

apply from: 'android-tasks.gradle'

apply from: 'bintray.gradle'

7:运行命令上传发布的你的Library

在Project的根目录:

#编译

./gradlew install

#上传

./gradlw bintrayUpload

8:手动提交到jcenter

在运行上面的命令之后,我们就可以在bintray的Repo中看到刚刚上传的Library 了。

image.png

但是这个时候,还没有正式发布到jcenter,我需要用手主动提交一下:

image.png

点击Add to JCenter之后,会有一个审核时间,大约24小时后,就可以在JCenter上看到了。

简化

从上面教程我们可以看到,每次都需要创建和引用3个文件,还是挺麻烦的。

apply from: 'android-maven-install.gradle'

apply from: 'android-tasks.gradle'

apply from: 'bintray.gradle'

为了引用方便,可以把上面三个gradle内容放到一个文件中,这样引用一行,效果和上面引用3个文件是一样的

//apply from: 'android-maven-install.gradle

//apply from: 'android-tasks.gradle'

///apply from: 'bintray.gradle'

apply from: 'jcenter.gradle'

这样每次创建一个文件就好了。

apply from: 'https://raw.githubusercontent.com/andforce/release-android-lib-to-jcenter/master/jcenter.gradle'

最后,之前编译和上传的命令,也可以合并成一个了:

#编译

#./gradlew install

#上传

#./gradlw bintrayUpload

# 上面的合并成一条

./gradlew jcenter

应用实例

android studio islibrary,通过AndroidStudio发布Android Library到Jcenter[超详细]相关推荐

  1. 极客日报:曝OPPO给离职员工补发年终奖,此前遭克扣;7 亿条领英用户数据被出售;Android Studio 4.2.2 发布

    一分钟速览新闻点! 字节跳动总裁办负责人华巍,重管人力资源团队 华为回应"诺基亚新手机搭载 HarmonyOS "消息不实 曝 OPPO 给离职员工补发年终奖,此前遭克扣 传蔚来挖 ...

  2. Android Studio 1.0RC1版发布

    Android Studio 1.0RC1 版本发布. 以下是官网该版本说明: Android Studio 1.0 Release Candidate 1 November 20th, 2014:  ...

  3. mme设备内部错误_华为拟安装“俄版安卓”;百度回应内部贪腐;Android Studio 3.5 RC2 发布 | 极客头条...

    快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有 ...

  4. 华为拟安装“俄版安卓”;百度回应内部贪腐;Android Studio 3.5 RC2 发布 | 极客头条...

    快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有 ...

  5. 百度云搜索引擎森林战士_华为拟安装“俄版安卓”;百度回应内部贪腐;Android Studio 3.5 RC2 发布 | 极客头条...

    快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有 ...

  6. android apt最新版本,解决Android studio 2.3升级到Android studio 3.0 后apt报错问题

    解决Android studio 2.3升级到Android studio 3.0 后apt报错问题 发布时间:2020-09-16 19:59:42 来源:脚本之家 阅读:62 作者:哈特中尉 1. ...

  7. 1.Android简介,Android Studio安装,创建运行Android程序

    文章目录 1.了解通信技术 2.Android简介   2.1 Android起源   2.2 Android历史版本 3.Android Studio开发环境的搭建 3.1 Android Stud ...

  8. android studio 看不到 manifest,Android Studio: Android Manifest doesn't exist

    可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I got this error on Android Studio (AS): How I ...

  9. Android Studio电脑上怎么下载-Android Studio下载和安装图文教程[超详细]

    安装 Android Studio 只需轻松点击几下,即可完成 Android Studio 的设置. 首先,请务必下载最新版本的 Android Studio. Windows 如需在 Window ...

最新文章

  1. 基于词典的前缀扫描中文分词
  2. c语言枚举变量自增报错,C_数据结构与算法(1):C语言基础
  3. 使用 Powershell 远程连接 windows server
  4. python fromhex_Python hexstring-list-str之间的转换方法
  5. Tomcat 学习过程4
  6. php mysql 空值_PHP / MySQL插入空值
  7. Kafka常用运维操作命令
  8. Codeforces Round #121 (Div. 1) A. Dynasty Puzzles DP
  9. 忽然发现自己少了很多爱好。。。。。。。。。
  10. Cocos2d-x教程-多线程与异步加载
  11. 2022新华三十大技术趋势白皮书
  12. 物联网安全有哪些关键技术?
  13. AMap(高德官方图层)
  14. PHP解析大型Excel表格的库:box/spout
  15. 从315晚会曝光网秦谈企业社会责任
  16. 详解Windows PE(Windows预安装环境)
  17. 2022考研经验分享【初试、择校、复试、调剂、校招与社招】
  18. wifi系列------初始化
  19. 【层级多标签文本分类】HFT-CNN: Learning Hierarchical Category Structure for Multi-label Short Text Categorizati
  20. 关于defer 的用法

热门文章

  1. 多视觉任务的全能: HRNet
  2. Python enumerate() 函数的使用
  3. Android layer-list 使用
  4. 微信小程序自定义组件Component的简单使用
  5. 儿子和女儿——解释器和编译器的区别与联系
  6. 2019春第二次课程设计实验报告
  7. Cannot find snapshot in models/VGGNet/VOC0712/SSD_300x300
  8. MAC和windows开发操作系统环境,解决Maven工程中报 Missing artifact jdk.tools:jdk.tools
  9. 【Spring】bean的作用域(@Scope) - singleton、prototype
  10. redis 在 php 中的应用(事务 [ Transaction ] 篇)