美文网首页安卓开发笔记android干货Studio
Android Studio提交库至Bintray jCente

Android Studio提交库至Bintray jCente

作者: H3c | 来源:发表于2016-06-02 10:37 被阅读16322次

平常在工作中我们常常会引用到第三方开源库,比如butterknife, Gilde, RxJava等等。其中最简单方便快捷的方式就是在gradle中用compile引用,例如

compile 'io.reactivex:rxjava:1.1.3'

有没有想过自己也写一个开源库提供一个引用给别人用?本文介绍如何自己创建一个库给别人用。

首先你要得有库

创建库很简单,网上有大把的事例教程,为了节约篇幅本文只做简单介绍。
在AndroidStudio中先创建一个普通工程,再创建好的工程上右键选择->New->Module

Paste_Image.png
在弹出窗中选择'Android Library',这样创建的就是传说中的aar包了,一个类似传统jar的包。
然后取一个霸气的名字,这样就搞定了!(但是如果你想让你的主工程用到这个lib还需要在build.gradle中配置一番,网上文章很多不做介绍)

接下来是Bintray和jCenter

啥是Bintray?啥是jCenter?
首先说jCenter,是一个代码库,相当于一个公共的存储控件,简单的来讲就是你把你写好的aar文件及一些文档描述文件之类的东西打包上传到jCenter服务器上,其他人就可以通过jCenter服务器下载到你上传的包了。
那Bintray又是啥?Bintray是jCenter的提供商,他支持上传lib到多个平台,jCenter只是众多平台中的一个,形象的说jCenter是位于某地的仓库,Bintray是送货的卡车,你写的库就是货了。

因此我们要想把自己写的lib分享给其他人,就必须通过Bintray上传到jCenter。首先我们要去Bintray上注册一个账号,或者用Github帐号直接登录。
登录后,在https://bintray.com/profile/edit页面的左边菜单的最下面有API Key复制下来。

Paste_Image.png

在工程的Root gradle中加入

dependencies {
    ....
    classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.4'
    classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'
}

可参考

在library的gradle中加入:

apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'
version = "0.1.1" // 修改为你的版本号

def siteUrl = 'https://github.com/h3clikejava/ExtendImageView' // 修改为你的项目的主页
def gitUrl = 'https://github.com/h3clikejava/ExtendImageView.git' // 修改为你的Git仓库的url

group = "h3c.extendimageview" // Maven Group ID for the artifact,一般填你唯一的包名

install {

repositories.mavenInstaller {

// This generates POM.xml with proper parameters

pom {

project {

packaging 'aar'

// Add your description here

name 'auto extand ImageView for Android.' //项目描述

url siteUrl

// Set your license

licenses {

license {

name 'The Apache Software License, Version 2.0'

url 'http://www.apache.org/licenses/LICENSE-2.0.txt'

}

}

developers {

developer {

id 'H3c' //填写的一些基本信息

name 'H3c'

email 'h3clikejava@gmail.com'

}

}

scm {

connection gitUrl

developerConnection gitUrl

url siteUrl

}

}

}

}

}

task sourcesJar(type: Jar) {

from android.sourceSets.main.java.srcDirs

classifier = 'sources'

}

task javadoc(type: Javadoc) {

source = android.sourceSets.main.java.srcDirs

classpath += project.files(android.getBootClasspath().join(File.pathSeparator))

}

task javadocJar(type: Jar, dependsOn: javadoc) {

classifier = 'javadoc'

from javadoc.destinationDir

}

artifacts {

archives javadocJar

archives sourcesJar

}

Properties properties = new Properties()

properties.load(project.rootProject.file('local.properties').newDataInputStream())

bintray {

user = properties.getProperty("bintray.user")

key = properties.getProperty("bintray.apikey")

configurations = ['archives']

pkg {

repo = "maven"

name = "extend-imageview" //发布到JCenter上的项目名字

websiteUrl = siteUrl

vcsUrl = gitUrl

licenses = ["Apache-2.0"]

publish = true

}

}

代码有点乱,懒癌犯了,其实蛮简单的,复制上面这一段,修改成自己的参数就好了。具体可以参考这里

这里还需要将你的bintray用户名和apikey写到工程的local.properties文件中

// 示例值, 仅供参考
bintray.user=h3 // your bintray user name
bintray.apikey=c5434272d522d35d1a0123459981225564155753 // your bintray api key

OK,以上配置完就准备上传到Bintray。
通过gradew执行即可

gradew install
gradew bintrayUpload
Paste_Image.png

通常大家都会失败的,原因很多。这里非常坑爹的不做介绍!因为本文后续会教你放弃这个冗长又及其容易失败的方法。

如果你编译成功且正常上传到Bintray,那么恭喜你,你真是太牛了,接下来对于你来说就很容易了

在Versions看到你的版本就说明成功了,接下来点击Add to JCenter


Paste_Image.png

输入一些描述就等待审核。审核完成后即可在第三方库中引用了。

更简单的方式novoda

看完以上的内容,相信你已经知道如何写一个lib库,并通过bintray上传到jCenter了。但是有没有觉得真的好复杂...build.gradle中要配置好多东西,几乎没法自己闭着眼睛写出来,只能从网上搜索了粘贴。

接下来介绍一个更简单的方式是用novoda库,它还是使用了bintray和jCenter,但是会大大简便build.gradle的配置方法。
首先在Root gradle中加入这句话

apply plugin: 'com.novoda.bintray-release' // must be applied after your artifact generating plugin (eg. java / com.android.library)

注意,他必须写在com.android.library 的下面
其次在你的lib gradle中写上这个

publish { 
    userOrg = 'novoda' 
    groupId = 'com.novoda' 
    artifactId = 'bintray-release' 
    publishVersion = '0.3.4' 
}

在android{} 中需要加入

lintOptions {
    abortOnError false
}
Paste_Image.png

这个时候在AS的终端中运行

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

把BINTRAY_USERNAME 替换成你的bintary的名字BINTRAY_KEY 替换成你的 Bintray的key 即可

如果成功就恭喜你,如果失败....那原因就很多了,本文坑爹的不做介绍!用飘柔就是这么自信,喜欢Bintray jCenter的同学们自己折腾去吧!

文尾福利,没错我就是飘柔

jCenter应该是目前应用最广的第三方gradle仓库了,但是其申请创建编译上传等流程实在是太麻烦了,感觉是上个世纪八十年代的产物,还需要上传,自己编译,审核之类的,超级容易失败有木有???

本文决定拿出珍藏多年的82年飘柔给大家,博主先干为敬!
JitPack也是一个代码仓库,等同于jCenter,只是暂时用的人没有jCenter多,但是越来越多的开源项目开始使用JitPack了。

真的非常非常的简单,有多简单我们来看看。
比如博主写了一个自用的Android基础库,便于快速构建工程,地址是:
AFastProject(不给我打赏的童鞋记得帮我点星...),由于引用了第三方的库,所以用本文上面两种方式发布aar都出现了问题,各种各样,要么就是无法编译,要么就是丢包,反正折腾了好久。最后用JitPack一句话解决了。。。。

首先打开网址http://jitpack.io

Paste_Image.png

在输入框中输入你的Github工程地址,点击Look up
他会自动遍历出你的最近提交和发布的版本

Paste_Image.png

点击你要引用的选择Get it

Paste_Image.png

在文尾就会告诉你如何引用。
是的,你没看错,客户端什么都不用改。其他工程可以直接引用!

呵呵......用飘柔就是这样么自信

相关文章

网友评论

  • VictorChiu:没有那么麻烦
  • 574d1aec84b0:楼主你这个Bintray的地址让我注册了一个企业账户,然后就没有add to jcenter按钮了。不知道怎么转成个人账户。
  • 3674d0183b56:哈哈,最后的点睛之笔
  • 758dcd823ace:为什么叫飘柔?是因为顺吗?
  • 1d346cdd4a27:https://jitpack.io/docs 直接打不开,楼主你喝了假的飘柔吧
    引用依赖本身就很简单, jitpack也没写发布library的步骤啊
    1d346cdd4a27:https://jitpack.io/docs/
  • 1b64787d6684:楼主,问个问题,从你的角度来看,AS搞这么多的gradle jcenter maven这些的,尤其是gradle这么多千奇百怪的配置,跟eclipse简洁开发比起来,是一种退步还是进步????
    763cba3b6161:我觉得你想要的"进步": 应该是要去做个"预测未来股市的软件"... 这些繁琐的 gradle 配置,实在称不上进步....
    763cba3b6161:其实 gradle 并不比 maven 好用到那里去.... 另外比 gradle 好用的构建系统还有很多....

    只不过 Google 说用了, 你难道不用? 所谓"学习新的构建系统" 是被 Google 推着必须学的一个新工具而已. 所以没必要有学还是不学的心理负担,其实并没有所谓的核心技术...
    漫步者_170a:呵呵,IDE本身就是工具,这就跟自行车和汽车都是代步工具一样,自行车和汽车比起来,是简洁和容易上手,然后你就开始怀疑这个复杂的汽车相对自行车来说是进步还是退步?人就是这样,当熟悉某项事物后,在碰到新事物时,会进入犹豫和彷徨状态,会给自己找各种不学或者接受新事物的理由,我觉得你也是:smile: ;反正一句话,当马路能赛得下一辆车时,开车肯定比自行车快,换成AS和Eclipse是,当你的电脑配置足够时,用AS是不用怀疑的。。。觉得AS配置复杂,赶紧动手去学吧。。
  • 1b1293d04a2d:gradlew install
    gradlew bintrayUpload 命令有误 ,我最后参考了
    http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2017/0417/7837.html
  • KenChoi:如果一个库里有很多个 Library 怎么破?如果别人只要引用其中一个呢?
  • DoubleThunder:应该是
    gradlew install
    gradlew bintrayUpload
    吧。
  • 蜉杰辰蝣:还是飘柔好。
  • 一起睡个觉:国内 有类似的 仓库 托管平台吗?
  • KevinJi:您好,我想问下,我代码已经上传到bintray了,但是没有link to jcenter 的操作选项呢
    7c7c330c6f69:你打开的注册接口不对,得使用这个人注册:https://bintray.com/signup/oss
  • yszero:试着玩了下,最后还是放弃治疗了
  • 恋猫月亮:您好,请教个问题。话说现在的 bintray 是收费了吗?为什么会有 30 天试用的提示?
    Trojx:@shellever 感谢大兄弟提醒!我在这卡了好久...
    shellever:是你打开的注册接口不对,得使用这个进入注册才是对个人免费的:https://bintray.com/signup/oss
  • 卜俊文:你好,我想问下,我项目里是有带注释的,我上传到JitPack上后,拉下来用的时候,注释不见了?这有办法解决吗
  • 三季人:为什么我用JitPack提交的时候也是楼上这个错误呢,是我的提交方式不对吗
  • luck_fc:为啥引用报错 Error:(24, 0) Could not find method compile() for arguments [com.github.xxx] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.
  • 5f43fca46d3e:看了半天,原来是飘柔的广告贴。。。。

本文标题:Android Studio提交库至Bintray jCente

本文链接:https://www.haomeiwen.com/subject/llxkdttx.html