为了账号安全,请及时绑定邮箱和手机立即绑定

Android将library发布至jcenter的血泪史

标签:
Android

最近接手了一个sdk的任务,虽然原有任务已经比较多了,哈哈哈。一般sdk让别人用可以打成jar包,但是如果是有资源文件的就不行了,就可能需要打成aar包让别人依赖了,但是这有个不好的地方每次自己的sdk有更新,还得让被人更换aar包,颇显麻烦啊,所以最终还是需要将其发布至一个地方让别人一行代码引用,还是很方便。

需要注意几个点,第一:到https://bintray.com/这里注册时候不要点击如下图左边的绿色按钮,因为他是企业版的,需要收费的,只让免费试用30天,应该也是没有api key的。要点击右侧的for an open source的。

android将library发布至jcenter的血泪史

第二:在自己library里面apply plugin: 'com.novoda.bintray-release'后报错Error:Exception thrown while executing model rule: PublishingPlugin.Rules#addConfiguredPublicationsToProjectPublicationRegistry(ProjectPublicationRegistry, PublishingExtension, ProjectIdentifier),是因为自己没有在该gradle文件里面添加publish,加上就好了;

第三:执行那个命令时候,一定是./gradlew开头的,不能是gradle开头的,否则是会报错如下A problem occurred configuring project ':app'.

> Could not resolve all dependencies for configuration ':app:_debugApk'.

> Exception thrown while executing model rule: PublishingPlugin.Rules#publishing(ExtensionContainer)

> org/gradle/api/internal/component/Usage;

第四:执行命令过程中报错:Execution failed for task ':wjbridge:mavenAndroidJavadocs'.

> Javadoc generation failed. Generated Javadoc options file (useful for troubleshooting): 'build/tmp/mavenAndroidJavadocs/javadoc.options' ,是因为进行了javadoc检测,则需要在project层级的gradle文件里面添加tasks.withType(Javadoc) {

options.addStringOption('Xdoclint:none', '-quiet')

options.addStringOption('encoding', 'UTF-8')

}这个任务忽略doc检测就好了;

如果以上几点做好了,另外按照大神的命令执行了,就应该在自己的bintray里面创建的仓库里面看到自己上传的项目了,如下图所示

android将library发布至jcenter的血泪史

此时需要做的也只是点击library 名称进去“add to jcenter”等待审核完毕就可以依赖了。

可能大家都会有疑惑,要是我改了代码想要再次上传,但是又不想升级版本,如上面还想是0.0.1。我试了好多种方式,都没实现我上面说的改了代码但是版本号不变的想法。我有将我上传的项目直接delete掉,但是你会发现依赖依然是在的,因为代码还是在jcenter的,同时此时会在jcenter中看到如下图所示的情况:

android将library发布至jcenter的血泪史

会看到自己已经不是这个项目的creator了,此时可能会想我再次上传一个就好了,然后再次add to jcenter就好了,其实是不行的,bintray会给自己发站内信说jcenter已经存在该库了,所以需要做的就是删除自己原来上传的,然后点击上面的I‘m the creator算是认领自己的项目了。我也试过将某个版本version删除,同样是不可以的。后来我在官方文档中发现了如下的话:“if a package of yours has been linked to someone else’s repository and you then delete the package, Bintray will automatically create a copy of this package in the repository. This means that even though you deleted the data, the data still exists in another version somewhere”大意是:“如果别的人仓库已经依赖了你的发布,那么你删除了这个package的话,Bintray会自动创建一个副本,这个就意味着 即使你删除了这个数据,但是这个数据仍然会议另外一个版本在某个地方存在”所以就是你删除也删除不掉的,反正我是没找到删除的方法,如果哪位知道,烦请告知,多谢了。所以能做的就是每次发版时候都谨慎,如果新增了功能就升级版本就好了。

然后我们会用这个sdk依赖,其实这个sdk里面也是用了很多库,也是需要将一些类去除混淆的了,一种方式是将这些去除混淆的代码写在使用sdk的项目的proguard-rules文件里面,但是样子也是很麻烦的,对于调用方不方便,所以有另外一种方式就是在sdk项目即library里面的gradle文件里面的android标签的defaultConfig标签里面添加consumerProguardFiles 'proguard-rules.pro',是的这个consumerProguardFiles作用就是当library发布的时候会将混淆文件打包进aar文件中,这样子。调用方就不用操心library的混淆情况了。

原文链接:http://www.apkbus.com/blog-873057-76578.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消