在前一阵子的某一天,我不小心撞上了JitPack的版本升级而导致的JitPack炸了,于是无法把自己的库发布成有效的开源库,无奈之下,我终于下定决心转战随缘发布的JCenter,开启了我为了发布放弃高数,放弃大物,放弃现代,放弃离散的漫长踩坑之路。。。
P.S.
- 因为之前没有发布过开源库,所以这篇文章更适合小白。。。吧,至于大佬嘛。。。(额,你懂)
-
在开启踩坑之路之前,我们要学会科(如)学(何)上(翻)网(墙)。
(不然的话GitHub和Bintray能卡死你)
踩坑一:在Bintray上注册(这个真的是血泪史啊。。。务必看完再注册)
因为在Binatry版本升级后在注册界面会有一个巨大的绿色框框,我想也没想就注册了,结果,发现自己注册出来了一个团队,但是你要是创建个人的开源库就要个人的账号,注册在右上角的sign in
!!!注册地址点这里!!!
向前迈进:
注册完了以后要生成自己的maven库,这个库用来存放你的项目(闲扯一句,就算你的项目与JCenter注定无缘,不怕,只要在gradlel的build里面加上你maven库的地址再加上你库的依赖,依然可以使用这个库)
踩坑二:maven的m的大小写
你的库的类型一定要选Maven名字一定要叫maven(因为AS上传Library时会默认上传到名叫maven类型为Maven的库)
向前迈进:
新建完maven库就要开始新建上传到Bintray的Library了,怀着无比激动的心情想着自己很快就有第一个开源库了,然而事实证明之前的都在热身,这才是开始踩坑的血泪史。。。
踩坑三:如何新建Library以及Library下面该放些什么
(唔。。。接下来我的时间轴会有点混乱)我按照网上的流程写完了gradle里面的配置后,无比憧憬的等待Bintray审核通过的邮件,等了大概两天吧,终于收到了成功加入JCenter的邮件,然后我把依赖加到项目里面,gradle的build也通过了,但是在Activity里面并找不到自己的类,后来某位大佬终于告诉了我真相:
把你想上传的东西都要加在自己新建的Library里,而不是app里面(切到project模式可以看见),包括你的想上传类,如果你的类有自己定义的属性或者用到了app/src/res/values的文件,也要一并加到library/src/res/values里面,因为开源库是不会上传你app里的内容。
那接下来我们就跳过Library里面类什么都没有的version1,以及default-pom.xml莫名无法生成的version2(中间会稍微提一下解决方法),直接到成功发布的version3好了.P.S.如果AS在每次打开时都会在右上角提醒你更新的话(老版的settings里面没有Android SDK也很不方便),先更新吧,因为我们接下来的配置都用的是最新的版本,如果更新完,又提醒你更新Plugin也一起更新吧
如果在更新时是这个报错,建议你去设置网络代理,这个网上的解决方案很多,或者看我的另一篇博客(正在更),我就不赘述了。。。
继续向前:
新建Library。右键点application,然后选New->Moudle->(在弹出来的提示框里选)Android Library就可以了。
至于Library的名字,你随意吧,但是别起和你application很像的名字,也别起和你项目没什么关系的名字,因为gradle依赖里面会有一部分是Library的名字。
这里我讲解一下Gradle依赖的每一部分的来历:
- 首先把你要传的类放在你Library->src->main->java件夹的下面(注意,我切的是Project的模式)。
- 如果你的类有自定义的属性,要把相应的attrs.xml文件移到你Library->src->res->values文件夹下面(如果你的类涉及到app中values的colors什么什么的文件,建议也一起加到你Library下面,在Library中加Values文件夹下面的文件时,最好新建,不要去把app中的拖到Library里面,因为Build的时候可能报错)
- 最后我们我们把这些都准备好后,就可以Share Project On GitHub了。当然了,至于怎么在AS上把项目推到GitHub上我就不多说了,网上搜一搜教程很多的,当你上传成功以后你就会看见你AS的右上角会有一个上传成功的提示,这个时候你就可以去你的GitHub上看你的项目了
- 至于我gradle里免得配置基本上都是参考的这篇博客的: AndroidStuio快速发布开源项目到Jcenter/Bintray.那下面我就直接贴代码喽。
- 配置项目的gradle:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.2'
// 添加下面两行代码即可。
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0'
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
//就上面的这两行
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
-
配置Library里面的gradle文件(务必仔细阅读注释,部分个人信息的修改都写在了注释里了!)
apply plugin: 'com.android.library' // 这里添加下面两行代码。 apply plugin: 'com.github.dcendents.android-maven' apply plugin: 'com.jfrog.bintray' android { compileSdkVersion 23 buildToolsVersion "23.0.3" resourcePrefix "andserver_res_" defaultConfig { // applicationId "com.yanzhenjie.andserver.sample" // 这一行要删除, 因为library不允许有applicationId。 minSdkVersion 8 targetSdkVersion 23 versionCode 1 versionName '1.0.1' } } dependencies { // 如果你的library有依赖别的jar,这里要把jar依赖进来。 compile fileTree(dir: 'libs', includes: ['*.jar']) } // 项目引用的版本号,比如compile // 'com.yanzhenjie:andserver:1.0.1'中的1.0.1就是这里配置的。 version = "1.0.1" // 定义两个链接,下面会用到。 def siteUrl = 'https://github.com/yanzhenjie/AndServer' // 项目主页。 def gitUrl = '[email protected]:yanzhenjie/AndServer.git' // Git仓库的url。 // 唯一包名,比如compile 'com.yanzhenjie:andserver:1.0.1'中的 com.yanzhenjie就是这里配置的。 group = "com.yanzhenjie" install { repositories.mavenInstaller { // 生成pom.xml和参数 pom { project { packaging 'aar' // 项目描述,复制我的话,这里需要修改。 name 'AndServer For Android'// 可选,项目名称。 description 'The Android build the framework of the Http server.'// 可选,项目描述。 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 'yanzhenjie' // 开发者的id。 name 'yanzhenjie' // 开发者名字。 email '[email protected]' // 开发者邮箱。 } } // SCM,复制我的,这里不需要修改。 scm { connection gitUrl // Git仓库地址。 developerConnection gitUrl // Git仓库地址。 url siteUrl // 项目主页。 } } } } } // 生成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 } Properties properties = new Properties() properties.load(project.rootProject.file('local.properties').newDataInputStream()) bintray { user = properties.getProperty("bintray.user") // Bintray的用户名。 key = properties.getProperty("bintray.apikey") // Bintray刚才保存的 ApiKey。 configurations = ['archives'] pkg { repo = "maven" // 上传到maven库。(这里要特别注意,如果写了maven报404错误,请在bintray创建一个仓库,这里填改成你创建的仓库的名字,如何创建请看下图。) name = "andserver" // 发布到Bintray上的项目名字,这里的名字不是compile 'com.yanzhenjie:andserver:1.0.1'中的andserver。 userOrg = 'bintray_user' // Bintray的用户名。 websiteUrl = siteUrl vcsUrl = gitUrl licenses = ["Apache-2.0"] publish = true // 是否是公开项目。 } }
说一下可能有疑问的地方:
- APIKey和user存放和读取:
因为我们上传项目到github上的时候会把gradle文件传上去,所以不要把帐号密码的信息直接写在这里,写在local.properties中,这里动态读取。
- 那么问题来了,apikey在哪里找呢还有上面的git仓库又在哪里找呢?
先说一下apikey:
-
git仓库地址:
首先打开你项目在GitHub里的页面,然后点左边的一个绿色的一个Clone or download的框框,然后把它切换到SSH,这时现实的就是你git仓库的地址
把Library上传到Bintray上
- 首先我建议把你的项目在AS上再朝GitHub那边Commit and Push一次,然后就可以准备传到Bintray
- 完成了以后,打开AS的Terminal控制台,在里面输入这两句(分开输)
gradew install //系统配置gradle的用户环境
gradew bintrayUpload //上传到Bintray
或者在AS的右边有一个Gradle,用里面的插件bintrayUpload
来上传也可以,但是要切到gradle控制台里看是否BUILD SUCCESSFUL.
(感觉命令行更好用些)
去你Bintray的maven仓库下进行确认是否上传成功
如果你到Bintray上发现你的项目存在,但是下面没有Gradle的依赖,大概就像这样:
正常的库
不正常的库(假装有图)
这个。。。由于换电脑的原因,之前留的图片全都没备份就把上一个电脑的系统重装了(啊啊啊,暴风式哭泣。。。
总之就是,上面那张图的最下面的gradle可以复制的一段代码消失了,没有可以导入的库的代码
如果有可复制的依赖代码,那么说明你的库就已经上传成功啦,要是没有的话建议去看一下Android Studio 的gradle控制台在run的时候有没有报错,比如说哪一个文件没有生成或者生成的时候出现了问题之类的。
最后一步:添加到jcenter,提交给管理员审核
最后一步最关键的审核你和管理员的缘分(哈哈哈,开玩笑的)其实我感觉我都还好,没遇到传说中审核没通过的事情,基本上提交了以后等一阵子(一般是1~3天都会有回复,如果没有通过我记得会给原因。。。吧)
提交步骤很简单,在页面左侧有一个 Linked to(0), 然后你只要点下面的Add to JCenter 按钮就可以,然后在弹出的提交界面写上对应的信息就好啦,然后就可以等管理员审核过后给你在Binary上绑定的邮箱里面发通知邮件咯
啰嗦一些可能遇见的小问题
如果报错了建议先去看gradle控制台的运行记录,看里面有没有什么异常
-
关于default-pom.xml莫名无法生成 :
这一个问题我一般是直接删掉之前放开源库相应代码的package,然后直接新建一个package,名字要和之前的package一样,但是在build.gradle 里面的version(即版本号)要改一个新的版本号,然后也是上面的步骤再重复一遍。但是在有一篇博客里提到了关于default-pom.xml无法生成的解决方法,要是嫌上面的方法麻烦的话,可以看一下解决方法(我没有试过)。
然后基本上就是这些啦,要是还有什么为问题的话可以在评论区留言呀。
这是我第一次写博客,啰里八嗦说了一大堆,措辞也要改进,而且自己也拖了好久,唉,感觉自己好菜啊,如果有什么不足之处希望大家直接说好了,我是一个耿直girl,不会介意的,最后就是蟹蟹大家能一直看到最后,又听我啰里八嗦一大堆。
哈哈(尬笑