Contents
  1. 1. 开发环境
  2. 2. 新建并调试自己的库
    1. 2.1. 修改你的文件结构
    2. 2.2. 新建Library
    3. 2.3. 本地调试
    4. 2.4. 上传到Github
  3. 3. 准备上传到bintray
    1. 3.1. 注册并新建自己的仓库
  4. 4. 在AndroidStudio中上传库文件
    1. 4.1. 修改build.gradle文件
      1. 4.1.1. 整个工程全局的build.gradle文件
      2. 4.1.2. 你新建的Module中的build.gradle文件
        1. 4.1.2.1. 添加两个插件
        2. 4.1.2.2. group和版本号
        3. 4.1.2.3. 编译类库
        4. 4.1.2.4. 添加bintray中的package信息
    2. 4.2. 修改local.properties文件
    3. 4.3. 在终端中进行上传
  5. 5. 如何update

之前在Github上引入别人的开源库,有一种非常简单的方法,如果你是用Gradle打包,那么直接在你的工程build.gradle中添加入下面的内容就可以实现了:

1
2
3
dependencies {
compile 'com.microwu.ptrwebviewlibray:ptrwebview:1.0.0'
}

那其实这样格式的开源库都是上传到了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
2
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.2'
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'

最终的文件类似这样:



你新建的Module中的build.gradle文件

Module中需要添加的内容比较多:

添加两个插件

1
2
apply plugin: 'com.jfrog.bintray'
apply plugin: 'com.github.dcendents.android-maven'

group和版本号

这里需要把我们的bintray账号中新建的group(也就是repository)以及当前要上传的库的版本号写进去:

1
2
group = 'com.microwu.ptrwebviewlibray'
version = '1.0.0'

这里以我首次上传下拉刷新webview时的group和version号做为示例。

编译类库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
task generateSourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier 'sources'
}

task generateJavadocs(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

task generateJavadocsJar(type: Jar, dependsOn: generateJavadocs) {
from generateJavadocs.destinationDir
classifier 'javadoc'
}

将上面的代码直接拷贝进去,关于这些代码的意义参见原博文

同时还需要添加artifacts

1
2
archives generateJavaDocsJar
archives generateSourcesJar

添加bintray中的package信息

接下来就需要把我们在bintray中申请的package相关信息填写进来

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())

bintray {
user = properties.getProperty("bintray.user")
key = properties.getProperty("bintray.apikey")

pkg {
repo = '你申请的repository名称'
name = '将会显示在页面上的package名称'

version {
name = '1.0.0-release'
desc = "package简介"
vcsTag = '1.0.0'
}

licenses = ['Apache-2.0']
vcsUrl = '你的项目github地址url + .git'
websiteUrl = '你的项目github地址'
}

configurations = ['archives']

}

到这里,所有的Buidle文件都修改完成了,最终的成品大家可以参考下我的buidle文件,其中红框标出的是需要我们新添加进去的内容,黄色框标出的是要按照你们自己的内容替换的。



修改local.properties文件

我们注意到在向buidle.gradle文件中添加package信息时,有两行代码:

1
2
user = properties.getProperty("bintray.user")
key = properties.getProperty("bintray.apikey")

其中是获取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中进行审核。



注意:

  1. 勾选上Host my snapshot ...选项,然后在弹出的框中填入自己的唯一的标识
  2. 点击Send之后,界面顶端会弹出一个颜色很浅的提示,表示你已经上传成功了。但是这个提示框时间很短,而且颜色也很浅,所以我第一次都没有发现已经传成功了。

最后就和上传APP Store中需要等待审核一样,不过这个审核时间比较快,一般12个小时之内就能收到答复,会向你注册bintray时的邮箱中发送审核通过或失败的邮件。

到这里,一个完成的从0到1的分享自己的开源库的过程就完成了。

如何update

下面的步骤我还没有尝试,不过原理上讲应该是没有问题的。
就是我们最开始上传的都是1.0.0版本的开源库,如果你的库进行了升级,到了1.0.1版本,怎么做呢?

就是在本地的build.gradle文件中修改一下版本号名称,然后进行同样的 gradlew installgradlew bintrayUpload,然后在Bintray页面上重新上传到jCenter中就ok了!

有任何问题,欢迎大家留言讨论~

Contents
  1. 1. 开发环境
  2. 2. 新建并调试自己的库
    1. 2.1. 修改你的文件结构
    2. 2.2. 新建Library
    3. 2.3. 本地调试
    4. 2.4. 上传到Github
  3. 3. 准备上传到bintray
    1. 3.1. 注册并新建自己的仓库
  4. 4. 在AndroidStudio中上传库文件
    1. 4.1. 修改build.gradle文件
      1. 4.1.1. 整个工程全局的build.gradle文件
      2. 4.1.2. 你新建的Module中的build.gradle文件
        1. 4.1.2.1. 添加两个插件
        2. 4.1.2.2. group和版本号
        3. 4.1.2.3. 编译类库
        4. 4.1.2.4. 添加bintray中的package信息
    2. 4.2. 修改local.properties文件
    3. 4.3. 在终端中进行上传
  5. 5. 如何update