Android Studio 上传 Library 至 Jcenter 生成依赖的两种方式(菜鸟级教程)

本文主要是介绍Android Studio 上传 Library 至 Jcenter 生成依赖的两种方式(菜鸟级教程),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

注册

Bintray官网首页默认注册是组织 , 个人的正确注册地址是:https://bintray.com/signup/oss

这里注意一点 不能使用国内的邮箱注册。 也可以使用 Google账号,Github账号 关联登录。

获取 Key

图片出处

这里写图片描述

这里写图片描述

创建个人Maven 仓库

这里写图片描述

注意:这里创建的maven仓库名字如果是 maven 那么可以使用以下两种配置方式的任意一种 ,如果自定义仓库名字非 maven 需要通过第二种配置进行上传,否则存在 404。

这里写图片描述

上传之前的配置

配置方式一仓库名必须为 maven):

项目根目录 build.gradle 中完整配置代码:


buildscript {repositories {jcenter()}dependencies {classpath 'com.android.tools.build:gradle:2.3.1'classpath 'com.novoda:bintray-release:0.3.4'// NOTE: Do not place your application dependencies here; they belong// in the individual module build.gradle files}
}allprojects {repositories {jcenter()}// 解决 Execution failed for task':[YourLibraryName]:mavenAndroidJavadocs'.tasks.withType(Javadoc) {options.addStringOption('Xdoclint:none', '-quiet')options.addStringOption('encoding', 'UTF-8')}
}

在app 和 library 的 build.gradle 文件中加入以下代码解决 Execution failed for task ‘:core:lint’ :

android{......lintOptions {checkReleaseBuilds falseabortOnError false}
}

在 library 的 build.gradle 加入一些配置 :

apply plugin: 'com.novoda.bintray-release'  // 新增
...
android{......lintOptions... 省略
}
publish {userOrg = 'xxx'//bintray.com注册的用户名groupId = 'com.lfq'//jcenter上的路径artifactId = 'customrepo'//上传到 Jcenter 的项目名称publishVersion = '1.0.1'//版本号desc = ''//选填website = 'https://github.com/xxx'//这里是必填;可以填写你 Github 上的当前项目地址。注意格式必须是 github地址(地址可以不存在)。
}

此配置的最终生成结果格式为:

compile 'com.lfq:customrepo:1.0.1'

这里调整一下,这种配置方式生成的依赖的组成格式:

  依赖组成格式:'groupId : artifactId:版本号' 依赖组成格式:'groupId : artifactId:版本号' 依赖组成格式:'groupId : artifactId:版本号' 

这里和下面的配置方式生成的依赖还是有点区别的。

配置方式二自定义仓库名):

在Project 的 build.gradle 中添加 Maven 和 Jfrog Bintray 的依赖

buildscript {repositories {jcenter()}dependencies {classpath 'com.android.tools.build:gradle:2.3.0'// NOTE: Do not place your application dependencies here; they belong// in the individual module build.gradle files//添加下面两行classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'}
}allprojects {repositories {jcenter()}
}task clean(type: Delete) {delete rootProject.buildDir
}

版本号这里目前是最新的,后续如果有更新,可以去查看 Maven 和 Jfrog Bintray 的最新版本。

在 module 的 builde.gradle 中进行配置

apply plugin: 'com.android.library'
//添加这两行
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'android {compileSdkVersion 24buildToolsVersion '25.0.0'defaultConfig {minSdkVersion 14targetSdkVersion 22version 1versionName "1.0"}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}}//添加配置lintOptions {
//        checkReleaseBuilds false// Or, if you prefer, you `can continue to check for errors in release builds,// but continue the build even when errors are found:abortOnError false}}dependencies {compile fileTree(include: ['*.jar'], dir: 'libs')compile 'com.android.support:appcompat-v7:24.2.1'provided 'com.github.bumptech.glide:glide:3.7.0'
}//项目主页
def siteUrl = 'https://github.com/lvfaqiang/Multi-Image-Selector'
//项目的git地址
def gitUrl = 'git@github.com:lvfaqiang/Multi-Image-Selector.git'def libName = "MultiImageSelector"; // 上传到 Bintray 的 package 名称。
group = "me.lfq";
version = "1.0.1"
// 这两个参数配置是为了最终生成 compile 'me.lfq:依赖库的名称:1.0.0'  group  version 是关键字,自动识别的。只需配置好就行。install {repositories.mavenInstaller {// 生成pom.xml和参数pom {project {packaging 'aar'// 项目描述,复制我的话,这里需要修改。name 'MultiImageSelector'// 可选,项目名称。description ''// 可选,项目描述。url siteUrl // 项目主页,这里是引用上面定义好。// 软件开源协议,现在一般都是Apache License2.0吧,复制我的,这里不需要修改。licenses {license {name 'The Apache Software License, Version 2.0'url 'http://www.apache.org/licenses/LICENSE-2.0.txt'}}//填写开发者基本信息,复制我的,这里需要修改。developers {developer {id 'lvfaqiang' // 开发者的id。name 'lvfaqiang' // 开发者名字。email 'lvfaqiang@gmail.com' // 开发者邮箱。}}// SCM,复制我的,这里不需要修改。scm {connection gitUrl // Git仓库地址。developerConnection gitUrl // Git仓库地址。url siteUrl // 项目主页。}}}}
}//上传到JCenter
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())bintray {user = properties.getProperty("bintray.username")    //读取 local.properties 文件里面的 bintray.user 登录用户名。key = properties.getProperty("bintray.apikey")   //读取 local.properties 文件里面的 bintray.apikeyconfigurations = ['archives']pkg {//这里的repo值必须要和你创建Maven仓库的时候的名字一样repo = "custom"//发布到JCenter上的项目名字name = libNamewebsiteUrl = siteUrlvcsUrl = gitUrllicenses = ["Apache-2.0"]publish = true //是否是公开项目。}
}// 生成jar包的task,不需要修改。
task sourcesJar(type: Jar) {from android.sourceSets.main.java.srcDirsclassifier = 'sources'
}
// 生成jarDoc的task,不需要修改。
task javadoc(type: Javadoc) {source = android.sourceSets.main.java.srcDirsclasspath += project.files(android.getBootClasspath().join(File.pathSeparator))// destinationDir = file("../javadoc/")failOnError false // 忽略注释语法错误,如果用jdk1.8你的注释写的不规范就编译不过。
}
// 生成javaDoc的jar,不需要修改。
task javadocJar(type: Jar, dependsOn: javadoc) {classifier = 'javadoc'from javadoc.destinationDir
}
artifacts {archives javadocJararchives sourcesJar
}

以上需要修改的地方也就配置的几个项目主页地址,项目描述,以及开发者个人信息。仓库名这里要对应你在 Bintray上创建的自定义仓库名。

在 app 的 build.gradle 中需要添加的配置

android{......lintOptions {checkReleaseBuilds false// Or, if you prefer, you can continue to check for errors in release builds,// but continue the build even when errors are found:abortOnError false}
}

在 local.properties 中添加个人的参数值:

bintray.username= bintray注册的用户名
bintray.apikey= 文章开头获取的 apikey

配置基本上也就这些了。

上传

基本就是以上所描述的这些配置,接下来我们打开 Studio 的控制台 Terminal .
windows 环境下输入:

gradlew clean build bintrayUpload -PbintrayUser=BINTRAY_USERNAME -PbintrayKey=BINTRAY_KEY -PdryRun=false

Mac OS 环境下输入:
如果出现拒绝该命令./gradlew: Permission denied,可以先运行 chmod +x gradlew再运行该命令;

./gradlew clean build bintrayUpload -PbintrayUser=BINTRAY_USERNAME -PbintrayKey=BINTRAY_KEY -PdryRun=false

上面命令中 BINTRAY_USERNAME 是你在 bintray 上注册的用户名。BINTRAY_KEY 是上面注册的时候所获取的 key.
替换了用户名和 API key 回车执行,等到控制台最终输出 BUILD SUCCESSFUL 就表明项目上传成功。

发布到 Jcenter

这个时候回到 bintray 我们的 maven 仓库中,进入我们刚上传成功的 packge 。
这里写图片描述
点击左下角红框区域,进入下一页 直接点击 send 等待审核,耐心等待审核通过之后,就可以直接通过 compile 引入项目使用。

在审核通过之前,我们可以通过配置上图右上角红框区域链接来使用,在根目录中添加:

allprojects {repositories {jcenter()maven {url '右上角的链接'}}
}

项目中加入依赖:

compile 'com.lfq:module名称:1.0.1'    // 模拟类型

注意:如果这里依赖不成功,可以再后边加上@arr

compile 'com.lfq:module名称:1.0.1@arr'

以上两种配置方式,我都亲测过,如果还有什么问题,还望各位指出。我也好做出调整。谢谢!

补充一下两种上传配置的区别
第一种配置简单,但是仓库名必须是 maven , 依赖组成格式:’groupId : artifactId:版本号’ , 并且 artifactId 也是上传到仓库的 package 名称。
第二种配置,相对复杂一点(无非也就是多复制一些代码)。仓库名可自定义,生成依赖组成格式是:’groupId: module名称:版本号’ 。 这里的 module名称也就是你本地依赖库的名称。上传仓库的package名称是单独配置的。

参考博客:
http://blog.csdn.net/wzgiceman/article/details/53707042
http://blog.csdn.net/xingshen58/article/details/51644599
http://blog.csdn.net/yanzhenjie1003/article/details/51672530

这篇关于Android Studio 上传 Library 至 Jcenter 生成依赖的两种方式(菜鸟级教程)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/267198

相关文章

Jsoncpp的安装与使用方式

《Jsoncpp的安装与使用方式》JsonCpp是一个用于解析和生成JSON数据的C++库,它支持解析JSON文件或字符串到C++对象,以及将C++对象序列化回JSON格式,安装JsonCpp可以通过... 目录安装jsoncppJsoncpp的使用Value类构造函数检测保存的数据类型提取数据对json数

Redis事务与数据持久化方式

《Redis事务与数据持久化方式》该文档主要介绍了Redis事务和持久化机制,事务通过将多个命令打包执行,而持久化则通过快照(RDB)和追加式文件(AOF)两种方式将内存数据保存到磁盘,以防止数据丢失... 目录一、Redis 事务1.1 事务本质1.2 数据库事务与redis事务1.2.1 数据库事务1.

Linux磁盘分区、格式化和挂载方式

《Linux磁盘分区、格式化和挂载方式》本文详细介绍了Linux系统中磁盘分区、格式化和挂载的基本操作步骤和命令,包括MBR和GPT分区表的区别、fdisk和gdisk命令的使用、常见的文件系统格式以... 目录一、磁盘分区表分类二、fdisk命令创建分区1、交互式的命令2、分区主分区3、创建扩展分区,然后

Linux中chmod权限设置方式

《Linux中chmod权限设置方式》本文介绍了Linux系统中文件和目录权限的设置方法,包括chmod、chown和chgrp命令的使用,以及权限模式和符号模式的详细说明,通过这些命令,用户可以灵活... 目录设置基本权限命令:chmod1、权限介绍2、chmod命令常见用法和示例3、文件权限详解4、ch

Java中的密码加密方式

《Java中的密码加密方式》文章介绍了Java中使用MD5算法对密码进行加密的方法,以及如何通过加盐和多重加密来提高密码的安全性,MD5是一种不可逆的哈希算法,适合用于存储密码,因为其输出的摘要长度固... 目录Java的密码加密方式密码加密一般的应用方式是总结Java的密码加密方式密码加密【这里采用的

Java中ArrayList的8种浅拷贝方式示例代码

《Java中ArrayList的8种浅拷贝方式示例代码》:本文主要介绍Java中ArrayList的8种浅拷贝方式的相关资料,讲解了Java中ArrayList的浅拷贝概念,并详细分享了八种实现浅... 目录引言什么是浅拷贝?ArrayList 浅拷贝的重要性方法一:使用构造函数方法二:使用 addAll(

使用Nginx来共享文件的详细教程

《使用Nginx来共享文件的详细教程》有时我们想共享电脑上的某些文件,一个比较方便的做法是,开一个HTTP服务,指向文件所在的目录,这次我们用nginx来实现这个需求,本文将通过代码示例一步步教你使用... 在本教程中,我们将向您展示如何使用开源 Web 服务器 Nginx 设置文件共享服务器步骤 0 —

Golang使用minio替代文件系统的实战教程

《Golang使用minio替代文件系统的实战教程》本文讨论项目开发中直接文件系统的限制或不足,接着介绍Minio对象存储的优势,同时给出Golang的实际示例代码,包括初始化客户端、读取minio对... 目录文件系统 vs Minio文件系统不足:对象存储:miniogolang连接Minio配置Min

使用Python实现大文件切片上传及断点续传的方法

《使用Python实现大文件切片上传及断点续传的方法》本文介绍了使用Python实现大文件切片上传及断点续传的方法,包括功能模块划分(获取上传文件接口状态、临时文件夹状态信息、切片上传、切片合并)、整... 目录概要整体架构流程技术细节获取上传文件状态接口获取临时文件夹状态信息接口切片上传功能文件合并功能小

Mycat搭建分库分表方式

《Mycat搭建分库分表方式》文章介绍了如何使用分库分表架构来解决单表数据量过大带来的性能和存储容量限制的问题,通过在一对主从复制节点上配置数据源,并使用分片算法将数据分配到不同的数据库表中,可以有效... 目录分库分表解决的问题分库分表架构添加数据验证结果 总结分库分表解决的问题单表数据量过大带来的性能