装逼必备-发布开源库

相信大家在使用Android Studio开发项目时,都感受到了使用Gradle来管理项目,以及添加第三方依赖的方便性。同时作为一个Android程序猿,肯定也希望有一款自己的开源库受到大家的认可,不管是出于自己的虚荣,还是为了开源的精神,我们都应该掌握掌握这个装逼神技😄。正好前段时间写了一个自定义View的开源库BezierIndicator,虽然项目简单,正好可以拿来尝试一下发布开源库的操作。

准备

首先我们要知道,Android开源库有两个常用的开源网站JitPack以及JCenter,这两个网站都可以发布我们的开源库,发布成功后都可以在项目gradle中通过一行代码引入开源库,那它们有什么区别呢?

在引入JitPack开源库的时候,我们需要在项目根目录的build.gradle中添加这行代码

allprojects {
    repositories {
        jcenter()
        maven { url 'https://jitpack.io' }
    }
}

而引入JCenter的开源库时只需要到项目build.gradle中添加依赖代码就行了。

需要准备以下内容

  1. 新建一个项目,并在项目中添加一个Library Moudle作为你要发布的开源库
  2. 一个github账号
  3. 一个bintray账号


项目结构如下

项目目录结构

发布到JitPack

1、在项目根目录build.gradle添加Maven插件

classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'

2、在要上传的library的build.gralde文件添加如下代码:

// JitPack Maven
apply plugin: 'com.github.dcendents.android-maven'
// Your Group
group=‘com.github.你的github_username'

3、项目发布到github上,在github项目主页创建一个release或者Tag:

4、将项目的仓库提交到JitPack,Jitpack可使用github账号授权登录:

5、点击Get it就可发布开源库,成功后就可在项目中直接引用

allprojects{
    repositories{
        ...
        maven { url 'https://jitpack.io' }
    }
}
compile 'com.github.linchenming0516:BezierIndicator:1.0.0'

发布到JCenter

Bintray准备

1、注册Bintray,这里注意注册邮箱不能是国内的邮箱,所以自备梯子吧。

2、获取注册完的User账号及APIKey,后面上传有用

3、进入你的Bintray主页,注册一个Maven仓库

新建仓库name最好写成maven

项目gradle配置

1、在项目根目录build.gradle中配置Bintray以及Maven的服务插件

classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'

可以去插件的github地址获取最新插件的版本号,添加完插件后,需要让 library module 依赖新的插件,在库的build.gradle中添加如下代码

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

2、Bintray在上传库时需要一个POM文件,可以通过刚引入的Maven插件自动生成,但还是需要我们给出groudId和version的值,只需在库的build.gradle中添加如下代码

//JCenter 添加
group = 'com.lcm.bezierIndicator' // 这里需要和真实包名对应,不能随便填写
version = '1.0.0' // 指定版本号

3、为了与Maven标准对应,你需要在库module的build.gradle中添加几个task,分别生成Jar、Javadoc和JavadocsJar,只需要将下面三个task代码添加到库的build.gradle文件即可。

task generateSourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs //通过from函数指定代码源,这里是默认代码源
    classifier 'sources'
}

task generateJavadocs(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs //source指定了代码源
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

//这里dependsOn意为仅当generateJavadocs完成后才开始本task
task generateJavadocsJar(type: Jar, dependsOn: generateJavadocs) {
    from generateJavadocs.destinationDir
    classifier 'javadoc'
}

为了将你生成的源代码和Javadoc Jar文件添加到Maven中,你需要将task添加到一个archive中,只需要向库module下的build.gradle中添加如下代码:

artifacts {
    archives generateJavadocsJar
    archives generateSourcesJar
}

4、将前面获取的Bintray的user以及apikey写在local.properties文件中,这个文件最好不要添加到版本控制中

bintray.user=your_username
bintray.apikey=your_apikey

5、继续在 Library module的build.gradle中添加上传必须的代码块

//需要在local.properties文件中取值
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 = 'maven'
        name = 'com.lcm.bezierIndicator'

        version {
            name = '1.0.0'
            desc = "BezierIndicator"
            released = new Date()
            vcsTag = '1.0.0'
        }



        licenses = ['Apache-2.0']
        //git管理地址
        vcsUrl = 'https://github.com/lichenming0516/BezierIndicator.git'
        //项目github地址
        websiteUrl = 'https://github.com/lichenming0516/BezierIndicator'
    }

    configurations = ['archives']
}

在选择License时,可以参考这张图,来自阮一峰老师的博文。刚才说过,选择License只是选择一种权利,选好之后可以直接添加就好。GitHub在创建Repo时可以快速添加License文件。

开始进行上传

1、选择AndroidStudio Gradle视图,菜单点击View->Tool Windows->Gradle调出,点击图标栏的Gradle图标。

2、输入install,点击OK。这时会执行Maven相关的task,完成后会在build目录下生成必要的文件

3、成功后再次点击Gradle图标,输入bintrayUpload 并点击OK

上传成功后,可以在你的Bintray的maven仓库中看见上传完成的项目

4、点击进入maven仓库中的项目,会有一个提示让你七天内公开,点击Publish

5、为了让所有开放者使用,我们需要将类库添加到JCenter中,点击 Add to JCenter 按钮提交申请

提交后几个小时后就会有邮件通知添加成功,添加成功后就会变成如下景象

<dependency>
  <groupId>com.lcm.bezierIndicator</groupId>
  <artifactId>bezierIndicator</artifactId>
  <version>1.0.0</version>
  <type>pom</type>
</dependency>

6、接下来就可以在项目中直接引用了

compile 'com.lcm.bezierIndicator:bezierIndicator:1.0.0'

小结

发布到JitPack的操作比较简单,只不过引用比Jcenter多一句代码而已,怕麻烦的可以直接发布到JitPack上。发布到JCenter操作比较繁琐点,反正多掌握一点技巧总不会有错的😄,同时也发现一种简化上传JCneter的方法-极简上传Library到JCenter,有兴趣的可以尝试尝试。




参考文章:

  1. Android 发布开源库到 JitPack、jCenter
  2. 从零到一发布Android开源库
  3. 新版Bintray-极简上传Library到JCenter




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

推荐阅读更多精彩内容