发布 Android Library 到 JCenter 从入门到放弃
最近想倒腾一个小小的 UIKit 到 JCenter,为开源社区贡献一点绵薄之力,于是就有了一系列惨无人道的踩坑史。好,接下来,直奔主题,以下是发布流程。
发布到 JCenter
发布到 JCenter 需要以下几个步骤。
注册 Bintray 账号并创建仓库
Bintray 是 JCenter 库的运营商,首先要去这个网站注册一下账号 [https://bintray.com/signup/oss]
网上大多数教程会把你带到注册企业账号的地方,这是第一个坑。
注册完后创建一个仓库:
填写一下必填项即可:
在 Type 处选择 Maven。接下来创建一个 Package:
注意下 name 这一栏
填上你要发布的 Library 项目的名字。完成之后大概是这样的:
插件配置
网上有很多教程是用 android-maven-gradle 插件来发布 Library,甚至是官方推荐的 gradle-bintray-plugin,其实这两个配置都比较复杂。下面要推荐的是 bintray-release 插件,配置非常简单。首先在项目的 build.gradle 加上:
buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.2.3' classpath 'com.novoda:bintray-release:0.4.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } }
然后打开 Library 的 build.gradle,加入:
apply plugin: 'com.android.library' apply plugin: 'com.novoda.bintray-release' android { compileSdkVersion 25 buildToolsVersion "25.0.0" defaultConfig { minSdkVersion 16 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } lintOptions { abortOnError false } } publish { userOrg = 'KenChoi1992' // 改成你在 bintray 上注册的用户名 groupId = 'cn.jiguang.imui' // 改成你的包名(影响别人引用的第一段) artifactId = 'chatinput' // 改成你的 Library 名字(影响别人引用的第二段) publishVersion = '0.0.1' // 版本号 (影响别人引用的第三段) desc = 'im uikit' website = 'https://github.com/jpush/imui.git' }
完成了上面的配置之后,别人要引用你的 Library,就可以这样:
// 由 groupId,artifcatId,version 三段组成 compile 'cn.jiguang.imui:chatinput:0.0.1'
检查代理
在执行下一步之前,请确保 Android Studio 正确的配置了代理,因为大天朝要科学上网,你懂的。打开 Android Studio 的配置菜单:
点上面的 Check connection,在弹出的窗口输入一个墙外网站:
然后点击 OK,如果成功了,是这样的:
运行任务
最后在 Android Studio 的终端运行:
./gradlew clean build bintrayUpload -PbintrayUser=Username -PbintrayKey=ApiKey -PdryRun=false
将上面的用户名改成自己的,ApiKey 是从 bintray 网站上得到的:
点击 Edit Profile,进入编辑资料界面:
然后点击 API Key 即可查看:
如果执行完上述命令后,成功了,那么恭喜你!你顺利地发布了自己的 Library,在别人的项目中,只要用一行代码就可以引用你的库,实在是高(装)端(逼)大(必)气(备),上档次!请注意,如果失败了,前方高能!非战斗人员撤退!
如果你失败了!请不要惊讶,因为我也失败了!!失败的原因有很多,但是尝试了许多解决方案之后,终于!……我放弃了!!而且尝试了上述的三个插件都失败了!!!所以我并不是标题党……但是!尽管如此,如果轻易放弃,不是吾辈所为!所以我决定手!动!上!传!
说是手动上传,其实也用到了一个工具 release-android-library,在 Library 的 build.gradle 中配置一下:
apply plugin: 'com.android.library' ext { PUBLISH_GROUP_ID = 'cn.jiguang.imui' PUBLISH_ARTIFACT_ID = 'chatinput' PUBLISH_VERSION = '0.0.1' } android { compileSdkVersion 25 buildToolsVersion "25.0.0" defaultConfig { minSdkVersion 16 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } lintOptions { abortOnError false } } dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:25.1.1' compile 'com.android.support:design:25.1.1' compile 'com.google.android:flexbox:0.2.5' compile 'com.github.bumptech.glide:glide:3.7.0' compile 'com.android.support:support-v4:25.1.1' testCompile 'junit:junit:4.12' } apply from: 'https://raw.githubusercontent.com/blundell/release-android-library/master/android-release-aar.gradle'
主要是加入 ext 和 apply from 这两个相关内容即可。然后在终端中执行命令:
./gradlew clean build generateRelease
完成后,在 build 文件夹下就会生成一个压缩文件:
回到 bintray 的 package 下,点击 New Version:
然后创建一个 version,名字和你要发布的版本号一致,然后点击确定,接着点击上传文件按钮:
在页面中上传刚才的压缩文件:
请注意上面红色方框,一!定!要!勾选这个 Checkbox,否则会发生奇妙的错误,别问我怎么知道的!
然后点击 Save Changes,接着点击页面中的 Publish 按钮,这样就发布了!
接着回到 Package,将 Library 发布到 JCenter。
点击 Add to JCenter,点击后输入一下评论,然后点击 OK 即可,等待几个小时后的审核就可以了。到此为止,我们已经完成了发布!但是!你以为这就完了?接下来介绍一个快捷,简单到令人发指的开源仓库:JitPack
发布到 JitPack
打开 JitPack 网站,使用 GitHub 账号登录即可,很方便,只需要简单的两步即可发布到 JitPack。
在 GitHub 上发布一个版本
把 GitHub 的仓库地址粘贴到 JitPack,然后点击 Look up 按钮:
然后在从下面的列表中选择一个版本,然后点击 Get it 即可!接下来,别人只需要在项目的 build.gradle 中加入:
allprojects { repositories { ... maven { url 'https://jitpack.io' } } }
然后在 Module 的 build.gradle 中引用即可:
dependencies { compile 'com.github.User:Repo:Tag' }
就是这样,so easy !
总结
目前来说 JCenter 虽然是 Android 的默认仓库,但是发布的流程还是比较麻烦,而且发布的过程是一个闻者伤心,见者流泪的辛酸血泪填坑史。JitPack 更加简单快捷,使用的方式也相差无几。顺便一提,文中的 chatinput 是一个 IM UIKit,可以方便地为聊天界面集成文字,录音、发图片、视频消息。另外我们也发布了 imui,可以方便地集成聊天界面功能,使用方式:
compile 'cn.jiguang.imui:imui:0.0.1'
更多信息请登录我们的 GitHub 地址:https://github.com/jpush/imui
后续我们也会不断地完善和维护,欢迎大家提 PR。