本文微信公众号「AndroidTraveler」首发。

背景

其实 Android 上传开源项目到 jcenter 并不是一件新鲜事,网上也有很多文章。

包括我本人在将开源项目上传到 jcenter 的时候也是参考了一些文章。

不过由于版本和环境问题,很多很早以前写的文章并不完全适用。

基于此,这边总结一下近期(2019-07-02)我上传开源项目到 jcenter 的实战踩坑之路。

上传的开源项目是 Android 6.0 动态权限申请的项目。

基于软件的单一职责原则,我这里就不展开讲了。

本篇文章主要讲上传开源项目到 jcenter 的实战踩坑之路,后续如果需要再单独另写一篇文章介绍这个开源项目。

开发环境

设备:iMac

Android Studio 版本:3.2.1

java version:1.8.0_45

实战踩坑之路

1. 让项目跑起来

由于我这个开源项目是两年半前写的,所以要先保证 pull 下来的项目可以正常跑起来。

果然,控制台输出下面信息

No toolchains found in the NDK toolchains folder for ABI with prefix: mipsel-linux-android

明明之前可以 run 起来的。看来是因为 AndroidStudio 升级版本的问题。

这边的解决方法就是升级 gradle 版本

将原本的

classpath 'com.android.tools.build:gradle:2.2.2'

升级为

classpath 'com.android.tools.build:gradle:3.2.1'

然后其他的做相应调整,项目就可以正常运行到设备上面了。

2. 将要上传的开源项目独立成一个 Module

之前开源项目是把所有代码都放在 app Module 里面。

其他小伙伴使用前需要把相关文件夹拷贝到自己的项目里面。

这里的 Module 抽取其实做的是类似的事情,就是把相关文件迁移到新建的待上传 Module。

3. 新建 bintray.com 账号

我们要上传开源项目到 jcenter,首先得要有一个账号。

你以为新建账号很简单?

这里面还是有不少坑的。容我一一道来。

网站为 https://bintray.com/

点击进去,第一个坑来了。

如图所示,个人开发者要点击右边。不要看到左边的按钮颜色鲜艳并且有个 FREE 字眼就去点了。

因为 START YOUR FREE TRIAL 的意思是开始你的免费试用,试用说明有期限,所以你懂了吧。

点击右边之后,进入注册界面。

为了方便,我用的是第三方登录。

一开始我点击 Sign up with Github

结果填写完资料之后点击完成注册,但是界面没有任何反应。

最后发现是 QQ 邮箱的关系。

后面改为点击 Sign up with Google,结果账号顺利创建了。

所以第二个坑就是注册邮箱或者使用第三方注册的邮箱需要是 Gmail 邮箱。

这边亲测的结论是 QQ 邮箱不可以,Gmail 邮箱可以。其他的邮箱就不清楚了。

这就是注册账号的第二个坑。

4. 创建 maven 仓库

登录进入主页后,点击 Add New Repository

第一个和第二个必填。Name 填 maven,Type 选择 Maven 即可。

如果这一步没有操作,在最后上传的时候会报错。

5. 引入 bintray-release

在项目的 build.gradle 文件的 dependencies 块里面增加下面语句:

classpath 'com.novoda:bintray-release:0.9.1'

在要上传的 Module 的 build.gradle 添加如下语句:

在文件顶部添加:

apply plugin: 'com.novoda.bintray-release'

在文件末尾添加:

publish {
userOrg = 'zengyuzhan' //bintray.com 账号用户名
groupId = 'com.zengyu' //唯一 id,最后依赖的库名组成部分之一
artifactId = 'permission' //仓库名
publishVersion = '1.0.0' //版本号
desc = 'for android dynamic request permission' //描述
website = 'https://github.com/nesger/PermissionManager' //开源项目网址
}

publish 书写之后,后面依赖的引入就是 implementation 'groupId:artifactId:publishVersion'

具体到上面例子就是

implementation 'com.zengyu:permission:1.0.0'

这一步骤有一些坑,比如 classpath 的引入这里,我引入版本为 0.8.1 的时候,报了如下错误:

Cause: com.novoda.gradle.release.AndroidLibrary$LibraryUsage.getDependencyConstraints()Ljava/util/Set;

引入版本为 0.6.1 时,报错:

No such property: FOR_RUNTIME for class: org.gradle.api.attributes.Usage

引入版本为 0.3.4 时,报错:

Unable to load class 'org.gradle.api.internal.component.Usage'.

修改为最新版本的 0.9.1 之后就没问题了。所以假设当你看到这篇文章按照上面引入时报错,可以到官网 GitHub 看下最新版本是否是 0.9.1。

GitHub 官网:https://github.com/novoda/bintray-release

6. 上传开源库

在项目根目录执行上传命令,直接在 Android Studio 的 Terminal 面板输入命令即可。

./gradlew clean build bintrayUpload -PbintrayUser=zengyuzhan -PbintrayKey=xxxxxx -PdryRun=false

其中 PbintrayUser 指定的是你注册的 bintray.com 账号的用户名。PbintrayKey 指定的是你 bintray.com 网站的 API Key。

按照下图获取 API Key:

点击拷贝按钮拷贝到剪贴板即可,需要使用的话再粘贴。

等到 Terminal 编译成功之后,会显示 BUILD SUCCESSFUL。

这边编译的时候出了一个错误,如下:

Execution failed for task ':permission:javadocRelease'.
> Javadoc generation failed. Generated Javadoc options file (useful for troubleshooting):

这个是 Javadoc 任务报错,我不需要这个,因此解决方法是不执行上面的 task :permission:javadocRelease

在项目的 build.gradle 文件的 allprojects 语句块中,增加下面语句:

tasks.getByPath(":permission:javadocRelease").enabled = false

可以看到小括号里面就是上面报错的 task。

如果你的 Javadoc 报错 task 跟我这个不一致(大概率不一致,跟 Module 名有关系),那么你就要进行对应修改。

添加之后 Sync 项目再上报就没这个问题了。

7. Add to JCenter

上传完成之后,我们还需要到 bintray.com 网站上面点击 Add to JCenter,然后等待审核才算大功告成。

因为上面的项目我已经发布成功并且点击了,所以我用另一个开源库来演示这个步骤。

进入首页,点击 maven:

可以看到你开源的所有包名:

点击最新上传但是还没有添加到 Jcenter 的库。

点击 Go to Old Look

可以看到 Add to JCenter 按钮。点击

简单写下对这个库的描述即可。

点击 Send 之后网页会显示一个提示。接下来就等待邮箱通知就可以了。

审核完毕之后你进来就不会看到 Add to JCenter 按钮了。

比如我之前审核通过的库:

之后你就可以像引用其他三方库一样引用到你的项目中了。

总结如下:

本文演示的仓库为:https://github.com/nesger/PermissionManager

有不清楚的可以留言或者直接查看我演示仓库的提交记录和源码。

参考链接:

https://blog.csdn.net/lmj623565791/article/details/51148825

https://www.jianshu.com/p/6f808c29e378

https://blog.csdn.net/anydrew/article/details/51286998

Android 上传开源项目到 jcenter 实战踩坑之路的更多相关文章

  1. [转]使用Gradle发布Android开源项目到JCenter

      转自:http://blog.csdn.net/maosidiaoxian/article/details/43148643 使用Gradle发布Android开源项目到JCenter 分类: G ...

  2. GitHub Android 最火开源项目Top20 GitHub 上的开源项目不胜枚举,越来越多的开源项目正在迁移到GitHub平台上。基于不要重复造轮子的原则,了解当下比较流行的Android与iOS开源项目很是必要。利用这些项目,有时能够让你达到事半功倍的效果。

    1. ActionBarSherlock(推荐) ActionBarSherlock应该算得上是GitHub上最火的Android开源项目了,它是一个独立的库,通过一个API和主题,开发者就可以很方便 ...

  3. GitHub上最著名的Android播放器开源项目大全

    GitHub上最著名的Android播放器开源项目大全                                                                          ...

  4. android开发学习 ------- 上传本地项目到gitlab

    写了一个demo,上传到gitlab 参考  https://blog.csdn.net/litianxiang_kaola/article/details/74075151 1:新建项目,填写相应的 ...

  5. 【转】android的一些开源项目

    自己一直很喜欢Android开发,就如博客副标题一样,我想做个好的App. 在摸索过程中,GitHub上搜集了很多很棒的Android第三方库,推荐给在苦苦寻找的开发者,而且我会不定期的更新这篇文章. ...

  6. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

  7. 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新

    上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...

  8. 上传IOS项目和版本更新流程图

    上传IOS项目和版本更新流程图 必备IDP证书和distribution证书(第一个证书是真机部署测试时用到的,后者证书是发布时需要用到的,缺一不可). 我就说说接下来应该做的流程.在你保证拥有以上两 ...

  9. Fragment为载体可自己主动布局的CardView(GitHub上写开源项目初体验)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 开篇废话: 前些天一直在看Android5.0 的Material Desgin,里面新增 ...

随机推荐

  1. sql service 游标和触发器的使用

    一. 定义游标 使用游标相当于C#里面的集合. ) DECLARE My_Cursor CURSOR --定义游标 FOR (select autoid from U_VoucherItems whe ...

  2. ubuntu12.04单卡server(mentohust认证)再加上交换机做路由软件共享上网

    最近成立了实验室的网络环境中,通过交换机连接的所有主机实验室.想要一个通过该server(单卡)做网关,使用mentohust认证外网,然后内网中的其它主机通过此网关来连接外网. 1.首先在serve ...

  3. C/S和B/S两种架构区别与优缺点分析

    C/S和B/S,是再普通不过的两种软件架构方式,都可以进行同样的业务处理,甚至也可以用相同的方式实现共同的逻辑.既然如此,为何还要区分彼此呢?那我们就来看看二者的区别和联系. 一.C/S 架构 1. ...

  4. 微信nodejs开发模块指南

    1.微信消息处理 node-weixin-message wechat 2.微信加密 node-weixin-crypto wechat-crypto 3.微信支付 node-weixin-pay w ...

  5. 特殊存储过程——触发器Trigger

    触发器类型 insert 触发器delete 触发器update 触发器 Inserted和Deleted两个临时表的作用 Inserted:对于插入记录操作来说,插入表里存放的是要插入的数据:对于更 ...

  6. 九款免费轻量的 AutoCAD 的开源替代品推荐

    随着各行各业的发展,CAD已经广泛应用于工业.服装.建筑以及电子产业等设计领域.AutoCAD 是一种流行的商业CAD软件,虽然很强大,但并不是免费的.因此本文推荐了几种免费重量轻的CAD工具/软件, ...

  7. JavaScript 中的12种循环遍历方法

    原文:JavaScript 中的12种循环遍历方法 题目:请介绍 JavaScript 中有哪些循环和遍历的方法,说说它们的应用场景和优缺点? 1.for 循环 let arr = [1,2,3];f ...

  8. 为什么腾讯总能做出好产品?(在互联网行业,往往仅凭一个关键产品就足以改变整个公司的格局)MSN失败在不以用户体验为中心

    投递人 itwriter 发布于 2017-07-10 11:16 评论(36) 有3401人阅读 原文链接 [收藏] « » 本文来自微信公众号“郑志昊 Peter”,作者李翔.郑志昊:博客园经授权 ...

  9. JS如何为iframe添加onclick事件

    如果页面上有iframe时,鼠标点击在iframe内时,包含iframe的document是不响应任何事件的, 例如: $("#iframe1").click(function() ...

  10. linux安装脚本

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...