如果我们想让自己的开源项目被别人使用,对于Android平台,一个很好的方式就是上传到jcenter,然后使用时通过添加compile引用即可。
关于上传插件
网上很多教程都采用 gradle-bintray-plugin ,根据研究,这个插件配置及其复杂,各种意想不到的错误层出不穷。于是采用另一个 bintray-release ,据说是鸿洋大神推荐的,实测也简单稳定许多。
1、注册Bintray账号
要想传到JCenter,必须经过他爸爸Bintray才可以。于是第一个坑出现了=、= 很多教程会说到https://bintray.com/注册。如果你这样做了,那么恭喜,你得重新弄了。因为Bintray政策已经改变,在首页注册的账号是企业账号,功能强大,当然也是要付费的。最简单的辨别方法就是看在网页上方靠右有没有剩余效期。
免费版请到 https://bintray.com/signup/oss 注册。
删除账号
如果误注册成企业版占用了用户名邮箱,想注销怎么办?
其实也简单,鼠标放在右上角头像出,在弹出浮层上点击 Edit Profile
,拉到最下面有个 Delete Account
,点击验证后就可以注销账号。
2、引入插件
在项目build.gradle的dependencies下添加classpath:
classpath 'com.novoda:bintray-release:0.8.0'
注意是项目的不是module的bulid文件。用希望的版本号替换 0.7.0
,建议使用最新版本,最新版本号可以在 https://github.com/novoda/bintray-release 查看(如图)。
查看插件最新版本
3、配置要上传的moudle
下面操作均在要上传的moudle的build.gradle文件进行。
添加 apply plugin: 'com.novoda.bintray-release'
。
添加
publish {
userOrg = '' //bintray注册的用户名(不是邮箱)
groupId = 'com.example' artifactId = 'demo-project' //项目名称
publishVersion = '1.0.0' //版本号
desc = '' //项目描述。可空。
website = '' //项目地址,一般填github地址。可空。
}
假如按照以上设置,那么最终项目的引用格式就是:
compile 'com.example:demo-project:1.0.0'
可以对照着修改。
4、上传
一切准备就绪,可以开始上传了。很简单,直接在Android Studio Terminal面板执行:
gradlew clean build bintrayUpload -PbintrayUser=用户名 -PbintrayKey=API Key -PdryRun=false
就ok。
API Key
在bintray.com网站上登陆后,鼠标移动到右上角头像,点 Edit Profile
,在左侧找到 API Key
点击去就可以看到了。如图。
获取API Key
经过漫长等待,如果显示BUILD SUCCESSFUL ,那么恭喜,上传完成了。事实上这几乎是不可能的,它多少会出点错。这个放在最后讲。
此时进入Bintray会发现多了个Maven库,点进去里面就有我们刚刚上传的项目。
5、提交到JCenter
到此为止项目仅仅是传到了Bintray,并没有同步到JCenter。
先点进去刚传的项目,可以看到右下方Linked to模块有个 Add to JCenter
按钮,点击后打开一个网页,在此输入这个项目的描述(最好英文),不用多长,一句话就可以。然后点击 Send
可以提交审核。
通过后会有站内消息提示,一般几小时就可以通过,很容易的。
通过后的站内提示
通过后,所有人就可以直接依赖你的库啦。在库的页面可以看到引用格式。
查看引用格式
分享踩坑经历
第一次编译上传不出错是不可能的,所以各位一定要耐心点排错哦~
Could not find com.android.tools.build:gradle:3.0.0.
大意是在JCenter仓库中找不到上面说的这个项目。因为从某一版开始,谷歌把项目搬到自己仓库了。。
解决方案:在project的builde.gradle的如图位置加上 google()
。
Lint found errors in the project; aborting build.
Lint似乎是检查代码健壮性的东西,默认情况下非常严格,难免会有几个Warning。按照提示添加代码忽略即可。
解决方案:在 所有 Module的build.gradle中的 android
块内部添加:
lintOptions {
abortOnError false
}
Execution failed for task ':xxxxxxAndroidJavadocs'.
Javadoc generation failed. Generated Javadoc options file (useful for troubleshooting):
一般是编码问题造成的。源码大概是UTF-8,而里面恰好有中文。但是windows系统是gbk的,插件默认按照系统编码处理,于是出错了。也可能因为是javadoc检查不过关造成的错误。
解决方案:在项目的build.gradle中的 allprojects
块内部添加,如图:
tasks.withType(Javadoc) {
options.addStringOption('Xdoclint:none', '-quiet') //忽略javadoc错误
options{ encoding "UTF-8" charSet 'UTF-8'
links "http://docs.oracle.com/javase/7/docs/api" } }
解决编码错误
参考
http://blog.csdn.net/zhcswlp0625/article/details/54895584
http://www.jcodecraeer.com/a/anzhuokaifa/Android_Studio/2015/0515/2873.html