关键词:jCenter jCenter jCenter
发布到jCenter起因:
掌握发布代码到jCenter个人感觉还是很有必要的,最大的一个作用感觉就是装逼orz...,因为在接触jCenter之前感觉只有大神会把代码发布到公共仓库上,掌握后你会发现原来自己也能发布代码上去,除了装逼还有一个重要原因就是公司这边使用的开发模式是多module方式,每个人都有自己负责的模块,一些公共的代码会封装到baselib中供大家使用,但有一个比较不方便的地方在于那个baselib只有个别人有权限提交代码,所以我把一些自己会用到的方法简单封装成了aar,在使用到的module里面集成该aar即可,想法很美好但是现实还是比较残酷的,公司这边的开发规定就是公共的代码要不放到baselib中,要不就上传到公司的私有仓库里面,各个模块不允许放置aar文件,既然这样就不妨放置到jCenter上,如果有其他人要使用只需要添加依赖就可以了。发布代码到jCenter虽然网上已经有很多类似而且不错的文章,但那些都是作者他们本身遇到的问题,不能保障我会遇到和他们一样的问题,自己博客里面的每一篇文章都是自己实践过的,“纸上得来终觉浅 绝知此事要躬行”,这里随便鄙视那些转发这类文章的某些人,我敢百分之99肯定那些人光说不练,没实际操作过
(1)注册https://bintray.com/账号
要发布代码到jCenter上就要在该网站注册账号,进入首页就能看到如下的页面

(2)获取api key
注册完成后页面就会自动跳转到个人主页,刚进来的时候里面肯定是空的,可以注意到如下信息

(3)配置lib gradle文件
在studio中创建一个lib工程,在该lib的gradle中添加如下信息
apply plugin: 'com.novoda.bintray-release'
publish {
repoName = 'test'
userOrg = 'mandy'//bintray.com用户名
groupId = 'com.mandy'//jcenter上的路径
artifactId = 'util'//项目名称
publishVersion = '1.0.0'//版本号
desc = 'lib的描述信息'//描述,不重要
website = 'http://www.baidu.com'//网站,最好有,不重要
}
首先repoName必须和网站等下要创建的仓库名必须保持一致!!,这里就直接取名test了,注意这也是一个比较坑的地方,名字必须一致如果不一致会报类似于这样的错误

,另一个需要注意的地方就是artifactId名了,这里取名util,等下也会使用到,而且也需要和网站的pacakge名一致!!!各种坑。这样lib的gralde就配置好了,是不是很简单。
(4)配置工程gradle
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
classpath 'com.novoda:bintray-release:0.8.0'//添加这句代码
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
tasks.withType(Javadoc) {//解决lib中中文乱码问题
options.addStringOption('Xdoclint:none', '-quiet')
options.addStringOption('encoding', 'UTF-8')
}
}
该注意的地方注释已经写好了,参照配置就可以了,这样studio里面的配置就完成了,在lib中自己随便增加点代码就好了,比如打印一个log “hello“,最后要做的就是把这个lib上传到jcenter上去,使用如下命令行
./gradlew clean build bintrayUpload -PbintrayUser=你自己的账号 -PbintrayKey=你自己的密码 -PdryRun=false
mac中使用./gradlew,window中应该要去掉./,PdryRun这个参数没什么好说的写成false就可以了,网上的解释都一样,看了也不知道true和false有什么区别。一阵等待后你会发现报错了,原因嘛其实也很简单因为你在网站上没有创建仓库啊,所以接下来要做的就是创建仓库
(5)创建仓库

这里需要注意的就是Name那个输入框,输入刚才studio配置的reponame才可以

(6)创建package
仓库创建成功后还需要创建package才能真正上传代码,点击add new package,

,这里需要注意的就是那个name,需要输入gralde配置的artifactId名字才行,version control关系不大输入一个网址就可以,最后点击create package就创建完成了,至此网站的所有的必要工作都完成了,回到studio再次输入刚才的命令行,一阵等待后将会出现


(7)申请添加到jcenter
进入刚才创建的package详情页中,你会看到

那这一天时间里只能干等着吗??并不是这样的,其实就算你不完成第7步的操作其实也可以立即使用了!!,只不够完成了第7步后可以少在gradle配置一个地址而已。
1 当核审未通过的时候,在需要使用到该lib的module中配置如下依赖
repositories {
maven {url "https://dl.bintray.com/mandy/test"
}
dependencies中添加 implementation 'com.mandy:util:1.0.0'
编译后你就可以顺利在代码中使用lib中的类了
2 当核审通过的时候,只需要配置好依赖即可,上述的maven就不需要了
到此关于上传代码到jcenter就讲解完毕了,学会了这个技能妈妈再也不用担心我要打aar到处去集成了😤😤😤,在实践上传代码到jcenter的过程中遇到最蛋疼的问题就是studio配置的名字和网站上创建的仓库名,package名不一致的问题,导致各种不能上传成功,这一点需要特别注意,自己就是掉到了这个坑里面摸索了半天
################################更新###############################
在gralde升级到4.5之后,使用bintray-release将会引起问题,具体会报以下错误:
com.novoda.gradle.release.AndroidLibrary$LibraryUsage.getDependencyConstraints()Ljava/util/Set
这是插件自身引起的一系列问题,好在原作者已经给出了解决方案,所以如果studio使用的gradle版本在4.5以上就不要再使用
bintray-release,具体解决方法如下,修改根gralde配置:
dependencies {
// classpath 'com.novoda:bintray-release:0.8.0'//jcenter发布使用到
classpath "guru.stefma.bintrayrelease:bintrayrelease:1.1.2"//使用以下两行配置替换bintray-release
classpath "org.jetbrains.dokka:dokka-gradle-plugin:0.9.17"
classpath 'com.android.tools.build:gradle:3.3.2'
}
修改对应模块gradle如下:
//apply plugin: 'com.novoda.bintray-release'
apply plugin: "guru.stefma.bintrayrelease"
version="1.2" //版本号
group = "xxx" //jcenter的路径
publish{
userOrg = 'xxx' //bintray用户名
repoName = 'xxx' //要传过去的库名
artifactId = 'xxx' //要传过去的项目名
desc = 'xxx' //描述
website = 'xxx' //
}
只需修改这两步即可,其他保持不变
网友评论