Android 发布开源库到 JitPack、jCenter

2,000 阅读4分钟
原文链接: www.jianshu.com

JitPack、jCenter是我们常用的发布Android开源库的网站,发布成功后就可以在Android Studio中通过Gradle方便的引用到项目中了,相比Eclipse时代要方便的多,对于使用者确实简单了,但对于发布者来说可能还略有坎坷,这里记录下发布的过程,以及遇到的坑。

发布到JitPack

一、

准备好项目以及要发布的开源库,并先将其上传到github。



有一点需要注意,上传到JitPack的开源库默认使用项目的名称,而不是要发布的开源库的名称,所以尽量给项目起一个比较优雅的名字(这里我们使用同名)。

二、

这里我们要用到一个的插件android-maven-gradle-plugin

1、、在项目的build.gradle添加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.username'

其中username需要替换为你在github上的用户名
如下图所示:



记得将修改后的代码提交到github哦。

三、

打开项目的github主页,创建一个Release或Tag,可按如下步骤:
1、



2、



3、



4、


四、

1、将项目的仓库提交到JitPack:jitpack.io/



2、版本提交完成后,JitPack会自动生成引用该library的配置信息:


最后就可以愉快的在项目中使用了。

发布到jCenter

一、

准备好要发布的library:


二、

1、jCenter属于bintray旗下的一个仓库,所以先要注册账号哦,bintray.com
2、按照如下步骤得到API Key,在上传library的时候需要用到。



3、创建一个名字为maven的Repository



4、在maven仓库中创建一个package,注意package的名字和要发布的library的名字相同


三、

关于上传可以使用gradle-bintray-plugin插件,但是略复杂,所以我们采用bintray-release
1、在项目的build.gradle添加bintray-release的classpath:classpath 'com.novoda:bintray-release:0.3.4',如下图:



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

apply plugin: 'com.android.library'
//新添加
apply plugin: 'com.novoda.bintray-release'

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.3"

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:24.2.1'
    testCompile 'junit:junit:4.12'
    compile 'com.squareup.okhttp3:okhttp:3.5.0'
}

//新添加
publish {
    userOrg = 'othershe' //在https://bintray.com上注册的用户名
    groupId = 'com.othershe' //jCenter上的路径
    artifactId = 'dutil' //要上传的library名称(和二、4中的package相同)
    publishVersion = '1.0.0' //library的版本号
    desc = 'A download library,that is based on okhttp' //library的简单描述
    website = 'https://github.com/Othershe/DUtil' //library的开源地址,例如在github上的地址
}

到这里必须的代码配置就完了,主要的注释都有了,按照上边的编写即可。

四、

1、可以在AndroidStudio的Terminal中执行命令:gradlew clean build bintrayUpload -PbintrayUser=BINTRAY_USERNAME -PbintrayKey=BINTRAY_KEY -PdryRun=false
其中PbintrayUser代表注册的用户名,PbintrayKey就是上边得到的API Key,PdryRun是一个配置参数,当为true的时候,会运行所有的环节,但是不会上传,如下图:



2、不出意外的话等待2到3分钟即可上传成功。但是呢这一步往往有许多的坑呀,这里简单的记录下:

  • 坑1:


    这个好处理,主要是因为lint检查时报错,因此中断了整个编译过程,在要上传的library的build.gralde文件的android标签里添加如下代码即可。
    android {
      lintOptions {
          abortOnError false
      }
    }
  • 坑2:


    网上大部分办法都说在项目的build.gradle文件的allprojects 标签里添加如下代码:
    allprojects {
      tasks.withType(Javadoc) {
          options {
              encoding "UTF-8"
              charSet 'UTF-8'
              links "http://docs.oracle.com/javase/7/docs/api"
          }
      }
    }
    之前上传另外一个项目确实可行,但这次确无效了,最后找到了如下方案,在项目的build.gradle文件的allprojects 标签里添加如下代码:
    allprojects {
      tasks.withType(Javadoc) {
          options.addStringOption('Xdoclint:none', '-quiet')
          options.addStringOption('encoding', 'UTF-8')
      }
    }
    解决了遇到的问题,再执行上传命令,终于成功了:

五、

上传成功后就可以在maven仓库中看到我们的library:



点进去则可以看到详情:



此时我们还不能在项目中引用该库,要将其添加到jCenter,点击上图右下角的按钮:



填写一些对library的描述,然后发送。等待数小时审核通过后会邮件通知你的,之后就可以在项目中引用了:


到这里两种发布方式就介绍完了,布到jCenter的步骤虽然也不算复杂,但很少能一次发布成功,总会被一些问题折腾半天。相比之下发布到JitPack要简单的多,最重要的是省时省力,没有那么多的问题困扰,真是给力呀!如果你也有发布开源库的需求,选择哪种方式相信你也有答案了。