发布 Android Library 到 JCenter 从入门到放弃 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jpush
V2EX    Android

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

  •  
  •   jpush 2017-05-25 14:43:33 +08:00 10071 次点击
    这是一个创建于 3065 天前的主题,其中的信息可能已经有所发展或是发生改变。

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


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

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

    知乎专栏:极光日报

    3 条回复    2017-06-07 10:54:49 +08:00
    xiaoshenke
        1
    xiaoshenke  
       2017-05-26 11:56:46 +08:00
    码 一直没成功的路过。。
    theworldsong
        2
    theworldsong  
       2017-05-27 10:26:54 +08:00
    曾经也折腾了很久

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

    看英文教程就好多了。
    lrannn
        3
    lrannn  
       2017-06-07 10:54:48 +08:00
    前几天在折腾来着,不过还好已经 OK 了遗憾就是 artifactId 不知道为啥是默认的"library"
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5308 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 05:59 PVG 13:59 LAX 22:59 JFK 01:59
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86