Android 快速发布开源项目到jcenter

wh95278341 8年前
   <p>大家在很多时候都希望让自己的开源项目可以更方便的让用户去使用,那么对于Android平台,一个很好的方式就是上传到jcenter,然后使用时通过添加 compile 引用即可。</p>    <p>对于上传到jcenter,也不算技术类的文章,而且已经有很多较好的文章可以参考,写之前我也大致百度了一下。</p>    <p>目前很多文章都是以 gradle-bintray-plugin 这个插件做上传,多数文章的介绍都是针对普通的开源项目的(即不包含编译时注解相关)。那么对于用到编译时注解,因为涉及到多个 module ,上传可能会比较麻烦。</p>    <p>本文准备采用 bintray-release 这个插件,个人感觉比 gradle-bintray-plugin 要方便很多。</p>    <p>对于使用 gradle-bintray-plugin 的,我百度了下,可以参考这篇 <a href="/misc/goto?guid=4959670715039882844" rel="nofollow,noindex">http://www.cnblogs.com/qianxudetianxia/p/4322331.html</a></p>    <p>So,本文的主要内容是:</p>    <ol>     <li>使用 bintray-release 发布一般项目到jcenter</li>     <li>使用 bintray-release 发布编译时注解项目到jcenter</li>    </ol>    <h2>一、普通项目上传到jcenter</h2>    <p>ok,首先你应该有一个待上传的项目。</p>    <p>那么我们这里模拟一个简单的项目。</p>    <p><img src="https://simg.open-open.com/show/754d471d2bc3396cf7d53bc4865d9612.jpg"></p>    <p>可以看到我们的basetools是个Android library,主要用来存放一些工具,我们现在要将其上传到jcenter。</p>    <p>那么,对于你,应该已经有了这样一个Android library,处于待上传的状态。</p>    <h3>(1)注册bintray.com账号</h3>    <p>为什么要注册这个账号呢,因为 jcenter() 属于bintray旗下的一个仓库。</p>    <p>我们的上传流程其实就是,从你的Androd Studio,到你的bintray 仓库,最后同步到jcenter仓库。</p>    <ol>     <li>进入 <a href="/misc/goto?guid=4958860112497972326" rel="nofollow,noindex">https://bintray.com/</a> ,注册账号。</li>     <li>注册完成后,需要邮箱激活;也可以选择第三方登录。</li>    </ol>    <p>注册完成后,登录,这两步属于非职业玩家都能搞定的。</p>    <p>登录后:</p>    <p><img src="https://simg.open-open.com/show/00d60778cc34af2fd24c4bdffeca0ba9.jpg"></p>    <p>登陆后,你可以点击 Your Profile -> Edit 然后就能看到上图的界面。</p>    <p>点击API Key,就可以看到你一段key字符串,把这个copy下放一边,一会上传要用。</p>    <h3>(2)引入bintray-release</h3>    <p>项目的build.gralde</p>    <p>在你的项目的build.gradle添加 bintray-release 的classpath,注意是项目的build.gradle,不是module的,针对文章开始的图即 UploadJcenterTest/build.gradle 。</p>    <pre>  <code class="language-java">buildscript { repositories { jcenter() }      dependencies { classpath 'com.android.tools.build:gradle:1.2.3' classpath 'com.novoda:bintray-release:0.3.4' }  }  </code></pre>    <p>待上传moudle的build.gralde</p>    <p>来到你想要上传的module,针对文章开始的图即 UploadJcenterTest/basetools/build.gradle 。</p>    <pre>  <code class="language-java">apply plugin: 'com.android.library'  apply plugin: 'com.novoda.bintray-release'//添加    android {    //保持不变  }    dependencies {      //保持不变  }    //添加  publish {      userOrg = 'hyman'//bintray.com用户名      groupId = 'com.hyman'//jcenter上的路径      artifactId = 'basetools'//项目名称      publishVersion = '1.0.0'//版本号      desc = 'Oh hi, this is a nice description for a project, right?'//描述,不重要      website = 'https://github.com/hyman/basetools'//网站,不重要  }  </code></pre>    <p>按照上面编写即可,细节有标识注释了,假设按照上述的编写,最终引入的方式为:</p>    <p>compile 'com.hyman:basetools:1.0.0</p>    <p>完成上面的配置后,就准备上传了。</p>    <p>上传</p>    <p>上传很简单,执行下面的代码即可</p>    <pre>  <code class="language-java"> ./gradlew clean build bintrayUpload    -PbintrayUser=hyman  -PbintrayKey=xxxxxxxxxxxxxxxxxxxxxx  -PdryRun=false</code></pre>    <p>user就是用户名,key就是我们刚才的让你保存的key,dryRun是一个配置参数,当为true的时候,会运行所有的环节,但是不会上传。</p>    <p>ok,下面整理好上面的这段代码,运行即可。关于运行,你可以选择在Android Studio的Terminal面板进行,如下图。</p>    <p><img src="https://simg.open-open.com/show/85295a965557205df3d67a2de4d361aa.jpg"></p>    <p>点击底部的Terminal即可,注意下你当前的路径是当前项目下,然后enter运行。</p>    <p>然后就是等待,当运行完成,看到 BUILD SUCCESSFUL 就没问题了,如果有什么问题呢,根据log排查下。</p>    <p>到此就上传完成了~~~</p>    <p>你可以访问 https://bintray.com/你的用户名/maven ,即可看到:</p>    <p><img src="https://simg.open-open.com/show/a2934533807876e26b1e38e29f46598b.jpg"></p>    <p>看到我们上传的项目了,你可以点击进去看该库的一些信息,但是注意此时还不能够直接被引用。</p>    <p>点击进去该库,按照下图,点击 Add To jcenter</p>    <p><img src="https://simg.open-open.com/show/ef9920e9409c35768ba5dcc800c32616.jpg"></p>    <p>然后随便写一下对你该库的描述,然后点击发送就可以了。</p>    <p><img src="https://simg.open-open.com/show/94da37f3150df42d6db91655969b0d0e.jpg"></p>    <p>ok,到此就结束了,不过目前还是不能直接引用的,你需要等待bintray的工作人员审核,审核通过会给你发送站内Message,并且 Add to Jcenter 那个按钮就小时了,此外你还可以根据你上传的groupId,访问该网站 https://jcenter.bintray.com/你的groupId 例如 <a href="/misc/goto?guid=4959670715154811164" rel="nofollow,noindex">https://jcenter.bintray.com/com/hyman/</a></p>    <p>如果可以引用,则能看到如下:</p>    <p><img src="https://simg.open-open.com/show/23a35dc95ccb025bcf8cb682cd9a2668.jpg"></p>    <p>最后总结下整个过程,其实非常简单:</p>    <ol>     <li>申请账号</li>     <li>引入bintray-release,在需要上传的module里面填写相关publish的信息</li>     <li>调用上传的命令</li>     <li>Add to Jcenter 提交审核</li>    </ol>    <p>基本都是步骤化的东西,真正需要我们填写的也就publish里面几个信息。</p>    <p>ok,接下来看上传编译时注解的项目。</p>    <h2>二、编译时注解项目上传到jcenter</h2>    <p>如果你暂时不需要这个需求,其实没必要往下看,因为并不属于技术类文章,了解这里有写,可以收藏下,遇到需求再回来看就好了。</p>    <p>其实也很简单,按照步骤做就好。</p>    <p>我们这里找一个项目作为演示。</p>    <p><img src="https://simg.open-open.com/show/19fe3959080926d4831b9fcf2b96d05d.jpg"></p>    <p>为什么说编译时注解的项目特殊呢?</p>    <p>因为它一般会涉及到多个moudle,比如上图,涉及到 compilter 、 permission-annotation 、 permission-lib 。</p>    <p>我们在上传时,这3个module都要进行上传,这里暂不涉及为啥会这么分module相关知识。</p>    <p>其实利用 bintray-release 上传的过程也很简单。</p>    <h3>项目的build.gradle</h3>    <p>首先针对项目的build.gradle,即图中 MPermissions/build.gradle</p>    <pre>  <code class="language-java">buildscript {      repositories {          jcenter()      }      dependencies {          classpath 'com.android.tools.build:gradle:1.2.3'          classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'          classpath 'com.novoda:bintray-release:0.3.4'//添加      }  }    allprojects {      repositories {          jcenter()      }  }    //添加  ext {      userOrg = 'hongyangandroid'      groupId = 'com.zhy'      uploadName = 'MPermission'      publishVersion = '1.0.1'      desc = 'a easy API to use runtime permission for Android M '      website = 'https://github.com/hongyangAndroid/MPermissions'      licences = ['Apache-2.0']  }  </code></pre>    <p>只要关注添加的部分,底部的ext主要是为了上传多个module统一管理的。</p>    <h3>module的build.gradle</h3>    <p>剩下就是 compilter 、 permission-annotation 、 permission-lib 这三个module,这三个模块的处理其实是一致的:</p>    <ol>     <li>apply插件</li>     <li>填写publish信息</li>    </ol>    <pre>  <code class="language-java">apply plugin: 'com.android.library'  apply plugin: 'bintray-release'//添加    android {  }    dependencies {    }    //添加  publish {      artifactId = 'mpermission-api'      userOrg = rootProject.userOrg      groupId = rootProject.groupId      uploadName = rootProject.uploadName      publishVersion = rootProject.publishVersion      desc = rootProject.description      website = rootProject.website      licences = rootProject.licences  }  </code></pre>    <p>3个模块的配置是一样的,唯一不同的就是publish中的 artifactId ,不同的module应该有它不同的名字。</p>    <p>对所有需要上传的module配置完成后,和上面一样,运行上传的命令即可。</p>    <pre>  <code class="language-java"> ./gradlew clean build bintrayUpload    -PbintrayUser=hyman  -PbintrayKey=xxxxxxxxxxxxxxxxxxxxxx  -PdryRun=false</code></pre>    <p>你可以选择在Android Studio的Terminal面板进行,如下图。</p>    <p><img src="https://simg.open-open.com/show/d2c00355eb8a1a3211cf3b559ff4268e.jpg" alt="Android 快速发布开源项目到jcenter" width="550" height="113"></p>    <p>ok,然后就和上面普通项目的步骤一致了,去 Add to Jcenter ,之后等待。</p>    <p>如果审核成功,你会发现3个module都会被同步到jcenter上,比如访问 http://jcenter.bintray.com/com/zhy/ :</p>    <p><img src="https://simg.open-open.com/show/f3d1a13c9cd91fdee9b74a17c6dd0ec9.jpg"></p>    <p>在使用时,对于compiler需要引入apt的插件,大致类似如下用法:</p>    <p>apply plugin: ‘com.neenbedankt.android-apt’</p>    <p>dependencies {</p>    <p>apt ‘com.zhy:mpermission-compiler:1.0.0’</p>    <p>compile ‘com.zhy:mpermission-api:1.0.0’</p>    <p>}</p>    <p>ok,当然本文的重点在于上传,其他方面细节就不赘述了。</p>    <p>那么如何利用 bintray-release 上传开源项目到jcenter就介绍完毕了,希望能够节省你的时间~</p>    <p>来自: <a href="/misc/goto?guid=4959670715237536785" rel="nofollow">http://blog.csdn.net/lmj623565791/article/details/51148825</a></p>