手把手图文并茂教你发布Android开源库
ybla5169
8年前
<p>经常逛github,总看到别人的readme中写着compile ‘com.xxx:1.0.xxx’,这个已经越来越普及,个人,团人,公司都在用,虽然做android这么长时间了,但是发现自己好像不会,走了好多弯路,几经折腾,这没什么技术含量的玩意,还挺费时的,所以,下定决心,发布一个开源库出来,也就是前面文章中介绍的SuperIndicator类库之实现 <a href="/misc/goto?guid=4959714657583705307" rel="nofollow,noindex">《仿爱奇艺视频,腾讯视频,搜狐视频首页推荐位轮播图介绍》</a> 。Github: <a href="/misc/goto?guid=4959714657682663264" rel="nofollow,noindex">https://github.com/hejunlin2013/SuperIndicator</a></p> <p>今天的Agenda如下:</p> <ul> <li>主工程下的的build.gradle配置Maven,jcenter服务 <ul> <li>创建一个类module</li> <li>上传类库到jcenter仓库 注册/bintray账号</li> <li>添加package</li> <li>添加bintray插件</li> <li>编译类库</li> <li>配置local.properties添加Bintray认证</li> </ul> </li> <li>Android Studio终端使用命令上传</li> <li>Bintray中同步到Jcenter,发送打包请求</li> <li>升级类库,再打包过程</li> </ul> <h2><strong>背景</strong></h2> <p>AndroidStudio是从Maven Repository 下载类库的。基本上有jcenter和Maven Central这两个服务器用于下载Android的类库。 在工程(注意是主工程下的)中的build.gradle有一段脚本如下:</p> <p><img src="https://simg.open-open.com/show/a166e8fb8815bcd7e24fe97b472d73b4.png"></p> <p style="text-align: center;">1.png</p> <p>了解到Google studio团队最先使用MavenCentral作为远程仓库下载我们用的编译类库的。 MavenCentral有一些问题。首先是对于开发者体验不好,种种原因Google studio团队远程仓库换成jcenter。 jcenter有一个打包工厂,每天特别多的类库从此诞生,用于github上各种项目中。 像我们平时在app目录下build.gradle中的dependencies中经常看到的:</p> <p><img src="https://simg.open-open.com/show/7dc106be107a455ed3c5d9bbe6e990c7.png"></p> <p style="text-align: center;">2.png</p> <p>这是什么意思呢?它实际上相当于</p> <p><img src="https://simg.open-open.com/show/76e9b9e56d22c7052d0d7338861513aa.png"></p> <p style="text-align: center;">3.png</p> <p>在这句代码里面的GROUP_ID是com.hejunlin.superindicatorlibray,ARTIFACT_ID是superindicatorlibray(类库名),VERSION是1.0.3。</p> <ul> <li style="text-align: center;"> <p>创建一个类module</p> <p>首先在Android Studio中点击File菜单,选择New->New Module,然后在弹出视图中选择Android Library,点击Next后填写库的名称。</p> <img src="https://simg.open-open.com/show/a68cfc7ed6b358b74b1a9df38094b56b.png"> <p style="text-align: center;">这里写图片描述</p> <p>创建完新的library后就可以写公用部分的类代码了,我这里是写superindicatorlibray,写好后,肯定还得有一个sample之类的测试这个类库,我用的是默认app工程,里面有Activity之类的,接下来就在app工程引用这个类库,在app下的build.gradle中添加依赖:</p> <img src="https://simg.open-open.com/show/db3ca7dc513910366ababdfdb95169cc.png"> <p>这里写图片描述</p> <p style="text-align: left;">compile project(‘:superindicatorlibray’) //冒号后是你的类库的名字 本地充分测试好后,接着你就上要开始上传jcenter仓库了。</p> <p>本文出自逆流的鱼,文章链接: <a href="/misc/goto?guid=4959714657765911944" rel="nofollow,noindex">http://blog.csdn.net/hejjunlin/article/details/52452220</a></p> </li> <li style="text-align: center;"> <p style="text-align: left;">上传类库到jcenter仓库</p> <p style="text-align: left;">那么如何上传你的类库到jcenter仓库?</p> <img src="https://simg.open-open.com/show/85a870efe235b51ab774c98ebe693240.png"> <p style="text-align: center;">这里写图片描述</p> <p style="text-align: left;">注册Bintray用户,Bintray是一个可以托管Android库的平台,JCenter则由Bintray进行维护的。打开 <a href="/misc/goto?guid=4958860112497972326" rel="nofollow,noindex">https://bintray.com/</a> ,进行注册,然后登录。</p> </li> </ul> <p><img src="https://simg.open-open.com/show/4d3e082363333e3fdc8b2bccfde5462e.png"></p> <p style="text-align: center;">这里写图片描述</p> <p>点击add,然后如图填写:</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/6d095cead5d14c796e8292460bb6c70d.png"></p> <p style="text-align: center;">这里写图片描述</p> <p>填完后,如出现前面图中那样,有一个maven的仓库,接下来要在这里添加package,</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/c586f4b6f63ef864e50f9b0785772a82.png"></p> <p style="text-align: center;">这里写图片描述</p> <p>点击Add New Package,如图:</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/d5b8bb054639cbdf608e8940e7ff3995.png"></p> <p style="text-align: center;">这里写图片描述</p> <p>现在一个空仓库和一个package已经创建好了,接下来要在studio,写脚本配置,上传类库</p> <ul> <li> <h3><sub>添加bintray插件</sub></h3> </li> </ul> <p>在module中类库下build.gradle中添加如下脚本</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/40349b24add237d15fde53f7bd9ef067.png"></p> <p style="text-align: center;">4.png</p> <p>Bintray在上传库时需要一个pom文件,而这个文件可以让Maven插件自动生成,但你还是需要给出groupId和version的值,将下面这两行代码添加到库module的build.gradle中。</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/d88b4146128ce2f4dbdd76cd184cc831.png"></p> <p style="text-align: center;">5.png</p> <p>编译类库 写过ant脚本的话,知道,ant中都是一个个target,而gadle中是task,所以接下来写几个task,对应分别分别生成Jar,Javadoc和JavadocsJar,将下面三个task代码添加到库module的build.gradle文件即可。</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/f8518d33976fae2ea495e1b55f6436df.png"></p> <p style="text-align: center;">6.png</p> <p>将本地编译过的类库及源码及doc文件上传到Maven仓库中package中,需要将task添加到一个archive中,只需要向库module下的build.gradle中添加如下代码:</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/c16104d88dd39ecfab8c03c5893fad1a.png"></p> <p style="text-align: center;">7.png</p> <p>本文出自逆流的鱼,文章链接: <a href="/misc/goto?guid=4959714657765911944" rel="nofollow,noindex">http://blog.csdn.net/hejjunlin/article/details/52452220</a></p> <ul> <li style="text-align: center;"> <p style="text-align: left;">配置local.properties添加Bintray认证</p> <p style="text-align: left;">接下来还要配置local.properties添加Bintray认证,git提交时,也会让你填用户名和密码,那jcenter,如何配置呢? 我们须要本地local.properties文件下配置,如果没有没有就创建一个,放在主工程目录下:</p> <img src="https://simg.open-open.com/show/14b630eeeaaf00f42313a730a959e6f9.png"> <p>这里写图片描述</p> <p style="text-align: left;">内容如下:</p> </li> </ul> <p style="text-align: center;"><img src="https://simg.open-open.com/show/22c5bcb3f8cd58175f482c60e4f86379.png"></p> <p style="text-align: center;">8.png</p> <p>接下来说下这个apikey在哪?</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/a1541f14efb20fecc397df77ebeedf8a.png"></p> <p style="text-align: center;">这里写图片描述</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/31790fff1629e6edf0efe0bd988846fe.png"></p> <p style="text-align: center;">这里写图片描述</p> <p>输入密码,就可以得到这个key。接下来回到库module下的build.gradle中添加如下脚本:</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/0192983896be234755b400f4756e5e88.png"></p> <p style="text-align: center;">10.png</p> <h2><strong>Android Studio终端使用命令上传</strong></h2> <p>最后我们在Android studio中Terminal命令行中,执行:</p> <p><img src="https://simg.open-open.com/show/3d9144c0acddc37704af4a0002bfb451.png"></p> <p style="text-align: center;">这里写图片描述</p> <p>gradlew install</p> <p>如果顺利的话,过几分钟就会出现</p> <p><img src="https://simg.open-open.com/show/6412d21cf3300701aecd1aa0bb5d4354.png"></p> <p style="text-align: center;">这里写图片描述</p> <p>恭喜你,编译成功了,去类module看,多了个build的目录,这里东西一会要上传jcenter:</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/52eea8d7ceec009a2acf3104a30bcfa3.png"></p> <p style="text-align: center;">这里写图片描述</p> <p>接下来需要把build成功的文件upload到bintray上,同样在Terminal命令行,执行如下命令:</p> <p>gradlew bintrayUpload</p> <p>顺利的话,也会出现,和上面的图一样的BUILD SUCCESSFUL</p> <h2><strong>Bintray中同步到Jcenter,发送打包请求</strong></h2> <p>这时检查你在bintray创建的package,你会看到对应的版本号</p> <p><img src="https://simg.open-open.com/show/088b9e413cef0eb4239d7f5e0f7ba080.png"></p> <p style="text-align: center;">这里写图片描述</p> <p>点击进去,如图,首次没有打包时,这里是一个add to jcenter的字样,我这里是打了包的。就变成了下图:</p> <p><img src="https://simg.open-open.com/show/5b4d84542149a99b244c61dcfc3a42e9.png"></p> <p style="text-align: center;">这里写图片描述</p> <p>点击那个箭头的“add to jcenter”,接下来会跳到一个Request to include package GradientUI in jcenter的页面,</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/9871b8bda3b153ccb1503e0737422d6f.png"></p> <p style="text-align: center;">这里写图片描述</p> <p>填下你的groupId,直接send,就会发起一个打包版本的请求, 过几个小时,通过jcenter那边的审核就会在bintray上收到jcenter那边的同意消息提醒。 恭喜你,你的类库上传到jcenter成功了!大家都可以用你的类库了。</p> <h2><strong>升级类库,再打包过程</strong></h2> <p>我们上传完成后,如发现类库中的一个bug,这就涉及到更新问题,那么怎么更新呢? 一句话,修改代码后,改本地build.gradle的版本号,按上面的操作,执行gradlew install,gradlew bintrayUpload,到bintray上点击“ Stage snapshots on oss.jfrog.org”同样发送一个请求,不用几分钟,就可以用了,升级,不像首次提交那样,非常快。马上就你可以更新github上的引用版本号,瞬间心情爽爽哒。</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/613f73ceb495ac8f7e8f375e3d580c6d.png"></p> <p style="text-align: center;">这里写图片描述</p> <p> </p> <p> </p> <p> </p> <p>来自:http://www.jianshu.com/p/f4ee4dc56b41</p> <p> </p>