AndroidStudio上传 Library 至 Jcenter 生成依赖的两种方式

之前感觉Studio中直接使用 compile ‘xxxxxxx’ 感觉挺方(装)便(逼)的。之前感觉Studio中直接使用 compile ‘xxxxxxx’ 感觉挺方(装)便(逼)的。

注册
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 false        
                abortOnError 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 24    
        buildToolsVersion '25.0.0'    
        defaultConfig {        
                minSdkVersion 14        
                targetSdkVersion 22        
                version 1        
                versionName "1.0"    
        }    
        buildTypes {        
                release {            
                        minifyEnabled false            
                        proguardFiles 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   // 项目主页。                
                                }            
                        }        
               }    
        }
}
//上传到JCenterProperties
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.apikey    
        configurations = ['archives']    
        pkg {        
                //这里的repo值必须要和你创建Maven仓库的时候的名字一样        
                repo = "custom"        //发布到JCenter上的项目名字        
                name = libName        
                websiteUrl = siteUrl        
                vcsUrl = gitUrl        
                licenses = ["Apache-2.0"]        
                publish = true   //是否是公开项目。    
        }
}
// 生成jar包的task,不需要修改。
task sourcesJar(type: Jar) {    
        from android.sourceSets.main.java.srcDirs    classifier = 'sources'
}
// 生成jarDoc的task,不需要修改。
task javadoc(type: Javadoc) {    
        source = android.sourceSets.main.java.srcDirs    
        classpath += 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 javadocJar    
        archives 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名称是单独配置的。

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

推荐阅读更多精彩内容