美文网首页
装逼必备-发布开源库

装逼必备-发布开源库

作者: 晨鸣code | 来源:发表于2017-08-28 10:21 被阅读74次

    相信大家在使用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



    相关文章

      网友评论

          本文标题:装逼必备-发布开源库

          本文链接:https://www.haomeiwen.com/subject/xbpwdxtx.html