【开源】一步一步教你在bintray上分享自己的开源库
阅读数:
之前在Github上引入别人的开源库,有一种非常简单的方法,如果你是用Gradle打包,那么直接在你的工程build.gradle中添加入下面的内容就可以实现了:
1 | dependencies { |
那其实这样格式的开源库都是上传到了bintray上面,然后在分享给大家的。正好最近想着把自己写的一个下拉刷新WebView给开源了,于是就研究了下如何共享。
这篇博文就详细记录下从建立开源库到最终分享到bintray网站上的全过程。
首先感谢这篇博文:手把手图文并茂教你发布Android开源库,绝大多数步骤都是按照这篇文章来的,不过我自己完善了一下步骤,同时有几个地方需要特别注意下,一起来看吧。
开发环境
下面是我的开发环境,和原博文中的部分版本不一样,可能有部分命令也需要适当的修改,具体我们在后面会看到。
- AndroidStudio 2.2
- compileSdkVersion 23
- buildToolsVersion “23.0.3”
- gradle 2.14
新建并调试自己的库
这里先澄清一个误解:你的开源库不需要上传Github也可以分享到bintray网站上进而让大家使用。
只不过把你的项目上传到Github之后,你的库才叫“开源”对不对;其次你可以把自己的Demo也一并上传,同时可以在页面上进行一些说明,相当于Github的页面就成为你的开源库的主页面,大家可以通过这个页面了解你的开源库如何使用,版本说明,最新更新等等。
例如我刚刚开源的库托管在Github上的页面为https://github.com/lipeng1667/PullToRefreshWebView
好了,那知道这个大前提了,我们的第一步就是先在本地建好并调试自己准备开源的库。我这里仅列出来关键的几个步骤,如果对如何新建library还不熟悉的同学,可以参见这篇博文:写自己的开源库,发布到 JitPack.io的前半部分,后半部分如果想发布到JitPack可以参考。我们要发布到bintray,而不是JitPack.io。
修改你的文件结构
我们新建一个工程默认的module名称是app
,我们可以在这个工程下引入其他库来完成自己的功能,那其实这个module可以作为我们的实例工程。我们可以看到很多Github上的开源库都有一个文件夹,命名为Sample
或者Demo
的字样,其实就是这个module。那我们也修改一下,让你的工程上传到Github上以后,更容易被大家看懂。
图中是我已经修改过的名称,红框中的文件夹应该是app
,如果你没有修改的话。我们右键它,然后选择Refact -> Rename
在弹出的对话框中选择Rename module
。
接下来就可以把它改成诸如Sample
或者Demo
了,从图中可以看出,我是改成了SimpleDemo
。
新建Library
接下来我们就开始创建我们的目标: 开源库。
当你点击next之后,你的目录中就会多出来一个文件夹,以你刚建好的Module name
命名。接下来,就在你的module中完成自己想要的功能吧。
本地调试
当你的module开发中,如何进行本地的调试呢?很简单,只需要在你的主工程的build.gradle
中添加进入下面的代码:
1 | compile project[':你刚建立好的module名称'] |
以我的代码为例:
接着就可以在你的工程中import你自己的库名称了,接下来在本地把自己的开源库调试完整吧~
上传到Github
虽然开篇的时候我说了其实Github并不是我们建立开源库的必要条件,但是做为全球最大的开源库平台,把自己的项目委托在Github上方便更多的人使用,同时,我们后面的步骤也要用到Github上的项目地址,所以这里最好能把项目上传到Github上。
关于如何上传Github网上有很多文章,这里就不做过多的叙述了。
准备上传到bintray
当你认为你的开源库已经调试完成并托管到Github,就可以进入正式开源库的阶段了,也就是今天我们这篇博文的主题。
注册并新建自己的仓库
第一步当然就是去bintray官网(https://bintray.com)上注册账号了。
- 在主页上点击
Get Started For Free
,然后点击Sign up
进入注册流程
- 记好自己的用户名(不是第2行中的full name),这个用户名在后面还会被用到
- 因为是全新的账号,所以我们要开始创建Repository,就是Git中的仓库的概念。点击左上角的
Add
按钮
填写仓库的相关信息
还记得在开头的时候提到过,别人的开源库的地址一般是
xxx:xxx:1.0.x
这样的格式么?其中用:
把开源库的地址分成了3部分,第一部分是仓库的名称,也就是我们这一步要完成的工作;第2部分是package的名称,我们会在下一步看到;最后一部分是版本号。
我们来看第1步:- name字段就是仓库的名称,就是显示在你的开源库地址的第1部分
- type字段我们一般选取Maven
- Default License字段一般也选用的Apache的开源协议。当然你也可以填入你自己的License
- Description字段是可选的,就是对你的仓库的一个描述
完成之后点击Create
,我们的仓库就建好了。
然后我们点击右下角的Add New Package
按钮
新建Package
标
*
号的是必填的项目:- Name是package的名称
- Licenses是默认和我们的repository保持一致
- Version control建议填入我们在github上的页面URL
完成之后,点击Create Package
按钮,在下面的界面就可以看到我们成功建立好的package。可以在顶部看到包含repository和package的名称,在下面的Details中可以看到我们上一步填写进去的内容。
在AndroidStudio中上传库文件
准备工作已经完成,下面就进入到上传你的库的实际过程了。
修改build.gradle文件
注意:
这里一共需要修改两个地方的Build.gradle文件
整个工程全局的build.gradle文件
在dependencies
中添加进下面的两条内容
1 | classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.2' |
最终的文件类似这样:
你新建的Module中的build.gradle文件
Module中需要添加的内容比较多:
添加两个插件
1 | apply plugin: 'com.jfrog.bintray' |
group和版本号
这里需要把我们的bintray账号中新建的group(也就是repository)以及当前要上传的库的版本号写进去:
1 | group = 'com.microwu.ptrwebviewlibray' |
这里以我首次上传下拉刷新webview时的group和version号做为示例。
编译类库
1 | task generateSourcesJar(type: Jar) { |
将上面的代码直接拷贝进去,关于这些代码的意义参见原博文。
同时还需要添加artifacts
:
1 | archives generateJavaDocsJar |
添加bintray中的package信息
接下来就需要把我们在bintray中申请的package相关信息填写进来
1 | Properties properties = new Properties() |
到这里,所有的Buidle文件都修改完成了,最终的成品大家可以参考下我的buidle文件,其中红框标出的是需要我们新添加进去的内容,黄色框标出的是要按照你们自己的内容替换的。
修改local.properties文件
我们注意到在向buidle.gradle文件中添加package信息时,有两行代码:
1 | user = properties.getProperty("bintray.user") |
其中是获取bintray的user和apikey,那这两个是存储在proerties文件中的,所以我们需要填写这两个信息
那user就是我们注册bintray时填写的用户名,还记得我之前在注册时提醒大家要留意的么,就是那个用户名(不是full name);apikey从哪里取呢??看下面的步骤:
在右上角点击你的名称,然后下拉菜单中选择
Manage Orgnizations
接下来选择左侧最下面一栏中的
apikey
然后填入自己的密码,就可以提取出来了。
最后,local.properties
文件所在的位置和全局的Build.gradle在同样的级别,最终的示例如下:
在终端中进行上传
这里你既可以在系统自带的Terminal中上传,也可以用AndroidStudio自带的终端进行上传,其实AndroidStudio中的Terminal就是你系统中的Terminal,只不过自动帮你CD到了项目所在的根目录下面而已。
所以,如果你使用系统自带的Terminal,最好先CD到项目所在的目录下面。
首先执行下面的命令:
1 | .\gradlew install |
这里为什么是.\gradlew
如果你仔细看项目的根目录下面,其实是有一个可执行的gradlew文件的,我们其实就是使用的这个文件,而.\
就表示使用的是当前的目录。
执行成功之后,会看到这样的提示:
而且可以看到在我们的module文件夹中,多出来了这么多的文件,这些文件就是要上传到bintray网站上的内容。
接下来执行下面的命令:
1 | gradlew bintrayUpload |
注意如果你看到和我一样的类似的错误提示,那一定是你之前修改build.gradle文件中的某些内容没有填写正确:
图里面的错误就是根据文件中配置的内容,没有发现名为maven的repo,所以repo要写成自己创建的名称。
如果你最终上传成功了,到bintray网站上自己的repo中查看下,就能看到已经有一个新的package了,里面的内容和我们在AndroidStudio中配置的内容是完全一致的。
点击右下角的Add to jCenter
图标,就上传到jCenter中进行审核。
注意:
- 勾选上
Host my snapshot ...
选项,然后在弹出的框中填入自己的唯一的标识 - 点击Send之后,界面顶端会弹出一个颜色很浅的提示,表示你已经上传成功了。但是这个提示框时间很短,而且颜色也很浅,所以我第一次都没有发现已经传成功了。
最后就和上传APP Store中需要等待审核一样,不过这个审核时间比较快,一般12个小时之内就能收到答复,会向你注册bintray时的邮箱中发送审核通过或失败的邮件。
到这里,一个完成的从0到1的分享自己的开源库的过程就完成了。
如何update
下面的步骤我还没有尝试,不过原理上讲应该是没有问题的。
就是我们最开始上传的都是1.0.0版本的开源库,如果你的库进行了升级,到了1.0.1版本,怎么做呢?
就是在本地的build.gradle文件中修改一下版本号名称,然后进行同样的 gradlew install
、 gradlew bintrayUpload
,然后在Bintray页面上重新上传到jCenter中就ok了!
有任何问题,欢迎大家留言讨论~