Android Studio Jcenter及发布自己的开源库

转载:https://blog.csdn.net/u013231041/article/details/70174354

AS从哪里获取到开源库

首先我们在使用第三方开源库时,直接在项目的 gradle 文件中添加这样一行代码: 
compile 'com.jakewharton:butterknife:7.0.1' 
添加完之后,你会发现依懒库中确实出现了这个库文件,那么 AS 具体是去哪里下载这个库的呢?

jcenter

细心的话会发现项目根目录的 gradle 文件里面有这样的配置

allprojects {
    repositories {
        jcenter()
    }
}

这代码的作用就是告诉 AS 使用 jcenter 作为代码仓库! 
jcenter 就是 Android library 文件服务器中的其中一个,另外一个就是 Maven Central,这两个都是Maven 仓库。 jcenter 由 bintray.com 维护 , Maven Central 则是由 sonatype.org 维护,它们分别存储在不同的服务器,两者没有任何关系。在 http://jcenter.bintray.com/ 可以看到 jcenter 整个仓库的内容。 
那么既然有了两个选择,为什么最终会选择使用 jcenter ? 
起初,Android Studio 选择 Maven Central 作为默认仓库。如果你使用老版本的 Android Studio 创建一个新项目, mavenCentral() 会自动的定义在 build.gradle 中。 
但是 Maven Central 的最大问题是对开发者不够友好。上传 library 异常困难。上传上去的开发者都是某种程度的极客。同时还因为诸如安全方面的其他原因, Android Studio 团队决定把默认的仓库替换成jcenter。正如你看到的,一旦使用最新版本的 Android Studio 创建一个项目,jcenter() 自动被定义,而不是 mavenCentral()。 
有许多将 Maven Central 替换成 jcenter 的理由,下面是几个主要的原因。

  1. jcenter通过CDN发送library,开发者可以享受到更快的下载体验;
  2. jcenter是全世界最大的Java仓库,因此在Maven Central 上有的,在jcenter上也极有可能有。换句话说jcenter是Maven Central的超集;
  3. 上传library到仓库很简单,不需要像在Maven Central上做很多复杂的事情;
  4. 友好的用户界面;
  5. 如果你想把library上传到Maven Central,你可以在bintray网站上直接点击一个按钮就能实现;

如何获得特定的库

在文章开头,我们是这位引入开源库的:compile 'com.jakewharton:butterknife:7.0.1' 
单引号里面的内容对应的格式是这样的:GROUP_ID:ARTIFACT_ID:VERSION 
GROUP_ID:定义了library的group,通常我们使用包名来命名; 
ARTIFACT_ID:library真实名字; 
VERSION:版本号; 
当我们 Sync project with gradle file 时,AS 就会去请求这个地址 http://jcenter.bintray.com/com/jakewharton/butterknife/7.0.1/ 去下载相关的文件。然后再编译使用。


上传library到jcenter

  1. 新建一个项目 
    一个是主项目:app,一个是依懒库:mylibrary。如图: 
    项目结构
  2. 注册帐号 
    到该网址https://bintray.com/signup/oss 个人免费账号。注意注册邮箱最好用Gmail。 
    注册完成之后,保存API Key。获取方式如下: 
    选择Edit Profile 
    选择API Key
  3. 引入bintray-release 
    在项目的根目录的build.gradle添加bintray-release的classpath:classpath 'com.novoda:bintray-release:0.3.4' 如图: 
  4. 配置待上传moudle的build.gralde 
    添加以下代码:
apply plugin: 'com.novoda.bintray-release'

publish {
    userOrg = 'xxx'//bintray.com用户名
    groupId = 'com.helloandroid'//jcenter上的路径
    artifactId = 'mylibrary'//项目名称
    publishVersion = '1.0.0'//版本号
    desc = 'this is for test'//描述,不重要
    website = 'https://github.com/kuyue'//网站,最好有,不重要
}


5. 上传代码到库 
在Android Studio的Terminal面板进行,执行下面的命令即可: 
windows系统: 
gradlew clean build bintrayUpload -PbintrayUser=xxx -PbintrayKey=xxxxxxxxxxxxxxxxxxxxxx -PdryRun=false 
Mac系统: 
./gradlew clean build bintrayUpload -PbintrayUser=xxx -PbintrayKey=xxxxxxxxxxxxxxxxxxxxxx -PdryRun=false 
注:user就是用户名,key就是我们刚才的Api key,dryRun是一个配置参数,当为true的时候,会运行所有的环节,但是不会上传。 

最后看到这样的信息就算上传成功! 
 
这时候如果需要引用刚才上传的库,需要这样配置: 
(1)、项目根目录gradle文件中这样配置(xxx为你的用户名): 

(2)、最后还需要在需要引用的地方添加上以下依懒 
compile 'com.helloandroid:mylibrary:1.0.0 
当然这样每次要添加依懒时,都要执行步骤一,这样是很不友好的。不过只要我们完成以下步骤,就可以只需要执行步骤2就可以添加了! 
打开网址:https://bintray.com/你的用户名/maven,进入以下页面, 
 
点击库名字,跳转到 

再点击Add to JCenter 

最后填写信息提交,当审核通过时,会发站内信通知您。通过时就只需要执行步骤2就可以添加依懒! 
6. 更新版本 
更新版本很容易,只需要更改下库版本号就可以!

publish {
    userOrg = 'xxx'//bintray.com用户名
    groupId = 'com.helloandroid'//jcenter上的路径
    artifactId = 'mylibrary'//项目名称
    publishVersion = '1.0.1'//版本号
    desc = 'this is for test'//描述,不重要
    website = 'https://github.com/kuyue'//网站,最好有,不重要
}

执行发布命令后,在网站上执行以下操作即可: 
 
7. 解决bug 
执行命令行时,可能会出现以下错误信息 
(1)如图 
 
解决方法:在要上传的gradle 文件的android节点里面添加以下代码:

lintOptions {
        abortOnError false
    }

(2)如图 
 
出现Could not create package是因为插件创建不了库。 
解决方法:我们手动创建一个 
 
 
(3)有可能出现乱码问题 
解决问题:在项目根目录gradle文件中添加以下代码

allprojects {
tasks.withType(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 
https://github.com/hehonghui/android-tech-frontier/blob/master/issue-17/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8Android-Studio%E6%8A%8A%E8%87%AA%E5%B7%B1%E7%9A%84Android-library%E5%88%86%E5%8F%91%E5%88%B0jCenter%E5%92%8CMaven-Central.md 
//——————–更新———————— 
最新换了macbook pro,之前一直使用 windows系统开发。下面记录下从 windows发布开源库转移到 mac下的艰辛历程。以下为运行命令:

./gradlew clean build bintrayUpload -PbintrayUser=xxx -PbintrayKey=xxxxxxxxxxxxxxxxxxxxxx -PdryRun=false
  • 1

出现的错误:

  1. 在Terminal 运行命令时,提示无权限 Permission denied 
    解:在 Terminal 直接输入 chmod +x gradlew 回车即可
  2. jdk版本问题,因为在安装 AS 时官方建议安装jdk6.0到7.0,不建议安装8.0,所以就装了个7.0。运行命令时提示:unsupported major.minor version 52.0。意思是不支持jdk7.0,需要 jdk8.0。在这里也试过网上找不装8.0而能解决问题的方法,不过没有找到有效的方法。因此这里只能装8.0,AS 官网只说了对8.0支持不太好,目前用到现在没有发现什么问题。发现问题了再装回去吧。。。。(卸载 jdk7.0方法:http://docs.oracle.com/javase/8/docs/technotes/guides/install/mac_jdk.html#A1096903 命令行中的%用 sudo代替,因为运行该命令需要管理员权限)。
  3. ndk问题,提示信息:ndk is missing a “platforms” directory。解决方法:直接用 sdk manager去下载 ndk就可以。
  4. 提示信息如图:这里写图片描述解决方法: 
    1.添加bintrayUser、bintrayKey、dryRun 配置,如图:这里写图片描述
    2.不使用命令行运行,而直接点击操作,按顺序进行以下操作:a, clean project;b,先运行assembleRelease,再运行 publishMavenPublicationToMavenLocal,然后再运行 bintrayUpload这里写图片描述

以上就是遇到的坑爹问题,只有想不到,没有遇不到的问题。

猜你喜欢

转载自blog.csdn.net/fitaotao/article/details/82182777