发布 Android Library 到 JCenter 从入门到放弃

2017-05-25 14:43:33 +08:00
 jpush

最近想倒腾一个小小的 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。

然后在从下面的列表中选择一个版本,然后点击 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。


作者:KenChoi - 极光( JPush 为极光开发者团队账号,欢迎关注)

原文:发布 Android Library 到 JCenter 从入门到放弃

知乎专栏:极光日报

3078 次点击
所在节点    Android
3 条回复
xiaoshenke
2017-05-26 11:56:46 +08:00
码 一直没成功的路过。。
theworldsong
2017-05-27 10:26:54 +08:00
曾经也折腾了很久————

根本问题在于,中文教程 90%以上是相互抄袭。

看英文教程就好多了。
lrannn
2017-06-07 10:54:48 +08:00
前几天在折腾来着,不过还好已经 OK 了🤓遗憾就是 artifactId 不知道为啥是默认的"library"

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/363747

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX