扫盲Android Studio 仓库jCenter并发布自己的开源库

2023-05-16

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. 在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这里写图片描述

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

扫盲Android Studio 仓库jCenter并发布自己的开源库 的相关文章

随机推荐

  • 回溯算法(BackTracking)--八皇后问题

    0 xff09 回溯算法 xff1a 回溯算法也算是遍历算法的一种 xff0c 回溯算法是对Brute Force算法的一种改进算法 xff0c 一个典型的应用是走迷宫问题 xff0c 当我们走一个迷宫时 xff0c 如果无路可走了 xff
  • 第十九篇:USB Audio/Video Class设备协议

    转发请注明出处 随着项目的不断进行 我想在网上查找了一下USB Audio Video的最新资料 看看有没有业内人士的更新 由于我们的项目一直在技术的最前延 而且这个USB IF官方发布的协议 也非常非常新 结果找了半天 都是我这篇文章的转
  • 第三十二篇:Windbg中USB2.0调试环境的搭建

    2011年的时候 xff0c 为了开发USB Mass storage UASP USB attached SCSI Protocol 的设备驱动程序 xff0c 从米国买了两个USB2 0的调试小设备 xff08 如下图 xff0c 每个
  • 理解SerDes 之一

    理解SerDes FPGA发展到今天 xff0c SerDes Serializer Deserializer 基本上是标配了 从PCI到PCI Express 从ATA到SATA xff0c 从并行ADC接口到JESD204 从RIO到S
  • 理解SerDes 之二

    理解SerDes 之二 2012 11 11 21 17 12 转载 标签 xff1a dfe serdes it 2 3 接收端均衡器 Rx Equalizer 2 3 1 线形均衡器 Linear Equalizer 接收端均衡器的目标
  • USB3.0的物理层测试探讨

    USB简介 USB Universal Serial Bus 即通用串行总线 xff0c 用于把键盘 鼠标 打印机 扫描仪 数码相机 MP3 U盘等外围设备连接到计算机 xff0c 它使计算机与周边设备的接口标准化 在USB1 1版本中支持
  • ARM SoC漫谈

    作者 xff1a 重走此间路 链接 xff1a https zhuanlan zhihu com p 24878742 来源 xff1a 知乎 著作权归作者所有 商业转载请联系作者获得授权 xff0c 非商业转载请注明出处 芯片厂商向客户介
  • linux下实现生产者消费者问题

    生产者 xff08 producer xff09 和消费者 xff08 consumer xff09 问题是并发处理中最常见的一类问题 xff0c 是一个多线程同步问题的经典案例 可以这样描述这个问题 xff0c 有一个或者多个生产者产生某
  • 解决Ubuntu下每隔几分钟自动锁屏,需要重新输入密码的问题

    看到这篇文章 xff0c 很实用 xff0c mark xff01 http www cnblogs com lanxuezaipiao p 3617436 html
  • Android NFC详解

    1 NFC概览 NFC xff0c 全称是Near Field Communication xff0c 中为近场通信 xff0c 也叫做近距离无线通信技术 使用了NFC技术的设备 xff08 例如移动电话 xff09 可以在彼此靠近的情况下
  • Microsoft VBScript 运行时错误 错误 '800a01a8' 缺少对象: ''

    Microsoft VBScript 运行时错误 错误 39 800a01a8 39 缺少对象 39 39 通常是这个对象已经关闭了 xff0c 你现在又关闭一次 xff01 xff01
  • 0/1背包问题之穷举解法

    0 1背包问题 有一个背包 xff0c 背包容量是M 61 150kg 有7个物品 xff0c 物品不可以分割成任意大小 xff08 这句很重要 xff09 要求尽可能让装入背包中的物品总价值最大 xff0c 但不能超过总容量 物品 A B
  • 把数据转换成json格式的字符串

    最近写程序遇到一个问题 xff0c 把一些数据转换成json格式的字符串保存起来 xff0c 这些数据有普通的键值对 xff0c 还有列表类型的 xff0c 下面写了一个小例子 xff0c 列表数据以复选框CheckBox形式来展示 xff
  • 解决Ubuntu12.04循环登录的问题

    今天用VMvare登录Ubuntu xff0c 发现用户名密码正确的情况下 xff0c 登录不进去 xff0c 循环出现登录界面 xff0c 但是guset可以登录 xff0c 在网上查找资料 xff0c 找到了解决的办法 xff1a 1
  • 美团2018春招笔试题

    任意一个正整数可以用字符 0 9 表示出来 但是当这些字符每种字符数量有限时 xff0c 可能有些正整数表示不出来 比如有两个 1 xff0c 一个 2 xff0c 能表示出11 12 112等等 xff0c 但是无法表示出10 122 2
  • GooglePlay - 排行榜及支付接入

    前言 Google Play应用商店在国外Android市场中地位基本与AppStore在IOS中的地位一致 xff0c 为此考虑国外的应用时 xff0c Android首要考虑的是接入GooglePlay的排行榜等支持 同样的由于Goog
  • 极光推送-点击通知栏跳到指定页面

    在MyReceiver接收器里面 xff0c 添加以下代码 xff1a if JPushInterface ACTION NOTIFICATION OPENED equals intent getAction Log d TAG 34 My
  • Android 5.0以上Button去掉阴影

    1 xff0c 在Button标签中直接添加以下属性 style 61 android attr borderlessButtonStyle 2 xff0c 有的Button的属性已经抽成style 此时直接在style时添加上parent
  • Tinker接入小白教程

    在这里先给大家拜个晚年 xff0c 虽然说新已经过了 本文是今天第一篇文章 xff0c 已经有好长时间没总结了 xff0c 算了给2017开个好头吧 之前一直搞不懂什么是热修复 xff1f 其实热修复就是在应用不用重新安装的情况下更新应用
  • 扫盲Android Studio 仓库jCenter并发布自己的开源库

    AS从哪里获取到开源库 首先我们在使用第三方开源库时 xff0c 直接在项目的 gradle 文件中添加这样一行代码 xff1a compile 39 com jakewharton butterknife 7 0 1 39 添加完之后 x