将项目通过Android Studio发布到Jcenter仓库

什么是Jcenter仓库?

  • 个人认为Jcenter类似于git/svn,是一个项目管理工具,我们可以用它存储一些公共的组件,类库,插件等实现共享功能,同时我们可以对其版本进行控制。那我们在项目的开发过程,当需要某个组件或类库,直接依赖即可,无需复制代码,或依赖一个module了,基本是一句代码可以搞定。

如何将我们的项目发布到JCenter进行共享了?

  • 使用Bintray将项目发布到JCenter

如何配置?

  • 将项目上传到Jcenter,我们需要配置一些插件,常用的有两种

    • gradle-bintray-plugin(配置麻烦)

    • bintray-release(推荐 配置简单,但是现在支持5.0以下的gradle,好像不太支持gradle5.0以上,会出现错误 )

如何使用bintray-release来将项目发布到Jcenter?

  • 1.注册开发者账号,在这里要注意账号体系分为企业账号和普通开发者账号的,企业账号有一个月的试用期限,在刚注册的一个月内,是不能将项目发布到Jcenter的(不提供add to Jcenter按钮),所以我们在注册的时候需要注意了。

    • 官网链接: https://bintray.com/

将项目通过Android Studio发布到Jcenter仓库_第1张图片

  • 2.到github获取bintray-release的版本

    • github地址:https://github.com/novoda/bintray-release
  • 3.在Android Studio进行配置

    • 在项目的build.gradle进行配置

      dependencies {
           classpath 'com.novoda:bintray-release:0.9.1'
      }
      
    • 在开发过程中,我们会写一些注释,而在发布编译时需要生成对应JavaDoc文档,这时可能会有编码问题,所以我们需要设置编码问题,不然会有编码警告

          buildscript {
      
            dependencies {
      
              classpath 'com.novoda:bintray-release:0.9.1'
      
             }
             //注释中有汉字,需要这里处理
             tasks.withType(Javadoc) {
                 options.encoding = "UTF-8"
             }
          
           }
      
    • 在我们要发布的module的build.gradle文件最后中进行如下配置

         	apply plugin: 'com.novoda.bintray-release'
         	
         	tasks.withType(Javadoc) {
         	    options.encoding = "UTF-8"
         	}
         	publish {
         	    userOrg = 'askedevelop' //bintray账户下某个组织id
         	    repoName = 'keepLive' //远程仓库名 可以自定义 如不设置 默认名为maven
         	    groupId = 'com.project.keeplivelibrary' //maven仓库下库的包名,一般为模块包名
         	    artifactId = 'keepLiveLib' //项目名称
         	    publishVersion = '1.0.0' //版本号
         	    desc = 'keep live for android' //项目介绍,可以不写
         	    website = '' //项目主页,可以不写
         	    licences = ['Apache-2.0']
         	}
      

将项目通过Android Studio发布到Jcenter仓库_第2张图片

  • 在Android Studio的Terminal面板中执行下面命令,其中BINTRAY_USERNAME替换为你的binatray用户名,BINTRAY_KEY替换为上面获取的API Key,-PdryRun=false会上传到仓库中,如果为true,只会执行gradle任务,但不会上传。替换完成后回车执行

        gradlew clean build bintrayUpload -PbintrayUser=BINTRAY_USERNAME -PbintrayKey=BINTRAY_KEY -PdryRun=false
    

将项目通过Android Studio发布到Jcenter仓库_第3张图片

  • 成功之后最终结果

将项目通过Android Studio发布到Jcenter仓库_第4张图片

将项目通过Android Studio发布到Jcenter仓库_第5张图片

  • 这时候其实我们并没有将项目完全发布到Jcenter,需要进过审核才可以,但是我们已经可以使Maven实现远程依赖了。

      //1.在整个项目的build.gradle配置Maven
        allprojects {
           repositories {
               google()
               jcenter()
               maven { url 'https://www.jitpack.io' }
              //添加我们的maven 地址
               maven { url 'https://dl.bintray.com/askedevelop/keepLive' }
           }
       }
    
       //2.在需要添加依赖库的module中添加依赖
       implementation 'com.project.keeplivelibrary:keepLiveLib:1.0.0'
    
  • 当我们的依赖库被Jcenter审核通过后,我们可以去掉 maven { url ‘https://dl.bintray.com/askedevelop/keepLive’ },因为Android Studio默认以Jcenter作为默认的中央仓库,所以我们需要点击Add To Jcenter提交Jcetner审核即可

将项目通过Android Studio发布到Jcenter仓库_第6张图片

会出现那些坑

  • 问题1

    当前Android Studio的版本已经到了 3.5,gradle的版本达到了5.4.1, 编译上传的时候会报如下错误

      					WARNING: API 'variantOutput.getPackageLibrary()' is obsolete and has been replaced with 'variant.getPackageLibraryProvider()'.
      					It will be removed at the end of 2019.
      					For more information, see https://d.android.com/r/tools/task-configuration-avoidance.
    

    解决方案:将gradle的版本降低至4+
    将项目通过Android Studio发布到Jcenter仓库_第7张图片

    • 问题2

    . 将项目上传到Jcenter时会上传失败,报如下的错

        HTTP/1.1 404 Not Found [message:Repo 'maven' was not found]
    

    解决方案:因为bintrary默认会为项目设置远程仓库名为maven,但是我们在创建项目时其远程仓库名不是maven,所以我们需要根据实际情况设置

将项目通过Android Studio发布到Jcenter仓库_第8张图片

  1. 问题3
  • 注册账号时注册成为企业账号,将项目上传到bintrary时,发现没有Add To Jcenter按钮

  • 解决方案:使用正常的注册登入方式,若已经被注册为企业账号,可以取消掉企业账号,转为普通账号,但是创建的项目可能会被清掉

  • 问题4

    GBK编码问题,javadoc编码问题

在这里插入图片描述
解决方案:在项目的build.gradle下设置编码,或者在module下build.gradle中添加该注释

  //1.在项目的build.gradle下
	buildscript {
	  .....
	    //注释中有汉字,需要这里处理
	    tasks.withType(Javadoc) {
	        options.encoding = "UTF-8"
	    }
	 
	}

     //2.在项目的build.gradle下,与Android 以及dependencies平级
  tasks.withType(Javadoc) {
   options.encoding = "UTF-8"
 }

你可能感兴趣的:(Android)