您的位置:首页 > 移动开发 > Android开发

AndroidStudio怎么将开源项目发布到jcenter

2015-11-29 19:24 585 查看

AndroidStudio是从哪里下载类库的?

我们在用AndroidStudio写Android程序的时候经常会看到在build.gradle文件里面添加引用的类库,只需要一行代码。

例如:

dependencies {
compile 'com.david.gradientuilib:gradientuilibrary:1.0.1'
}


有的时候我会感到好奇,为什么AndroidStudio里面引用类库就只需要一行代码,不像Eclipse里面引用类库需要实际的jar文件才可以,其实AndroidStudio的类库也是需要实际的jar,aar这样的文件的,之所以配置一行代码就能实现引用类库,就在于Gradle可以帮助我们通过相应的配置下载对应的类库文件

那么问题来了,下载下来的文件去哪里了呢?

答案就在用户目录目录下面的.gradle文件夹可以找到,Mac和Linux平台也能找到相应的路径



AndroidStudio是从Maven Repository 服务器下载类库的。基本上有jcenterMaven Central这两个服务器用于下载Android的类库。

在代码里配置如下:

jcenter仓库

allprojects {
repositories {
jcenter()
}
}


Maven Central仓库

allprojects {
repositories {
mavenCentral()
}
}


一开始AndroidStudio是使用MavenCentral作为默认的远程仓库下载类库的。

但是MavenCentral有一些问题没有解决。首先是对于开发者不友好,开发者想上传自己的类库到MavenCentral非常困难,所以后来AndroidStudio团队决定把默认远程仓库换成jcenter

jcenter上传下载速度快,而且是最大的java类库仓库,最最重要的一点是,如果你上传类库到jcenter成功了,那么如果你还想上传类库到MavenCentral,就会变得非常容易,只需要用鼠标bintray网站上点几下就可以了。

怎么从远程仓库pull一个AndroidLibrary下来?

在讲述如何上传类库到jcenter,我们需要先了解我们写的那一行gradle代码的意义。

compile 'com.david.gradientuilib:gradientuilibrary:1.0.1'


基本上我们可以从这一行代码可以了解到,引用一个library的代码需要3个部分,即:

GROUP_ID:ARTIFACT_ID:VERSION


在这句代码里面的GROUP_IDcom.david.gradientuilibARTIFACT_IDgradientuilibraryVERSION1.0.1。按照我的理解,GROUP_ID就像是我们写一个项目使用的公司包名一样,表示自己所在的团队或个人,ARTIFACT_ID我认为就是这个类库的名称,用于区分同一个GROUP下不同的类库,最后的VERSION顾名思义就是版本号。

怎么上传你的类库到jcenter仓库?

基本上大致的步骤可以慨括为,在AndroidStudio上准备好要上传的库项目,配置相关gradle代码,然后上传到bintray网站上,最后同步到jcenter仓库里。



第一步:在Bintray上创建一个package

步骤如下:

1. 在bintray.com上面注册一个账号,然后登录进去。

bintray可以通过github账号来登录,所以建议最好是有一个github账号,也方便后面的工作。

2.注册登录完成之后,点击Maven



3.点击Add New Package



4.填写必要信息,然后点击Create Package



注意这里的Version control是必填的,所以在上传类库到bintray之前最好是把项目push到github上,这样就会很方便了。

5.Create Package成功之后,就可以看到自己创建的Package了



第二步:创建好要上传的AndroidStudio项目

在这里我们将要上传的是Android Library module



然后我们需要设置bintray的username和API Key来进行bintray的加密认证,这些信息将写在local.properties文件里。写在local.properties的原因在于,bintray的username和APIKey是敏感的私人信息,自己应该保管好,而不是把它上传到github上,正好把local.properties文件写在.gitignore里面过滤掉不会影响上传的github项目。

代码如下:

bintray.user=YOUR_BINTRAY_USERNAME
bintray.apikey=YOUR_BINTRAY_API_KEY


这里的username就是你bintray账号的用户名,APIKey可以在bintray页面的Edit Profile找到



在要上传的库module的build.gradle文件里面添加如下代码:

apply plugin: 'com.android.library'

ext {
bintrayRepo = 'maven'
bintrayName = 'GradientUI'

publishedGroupId = 'com.david.gradientuilib'
libraryName = 'GradientUI'
artifact = 'gradientuilibrary'

libraryDescription = 'The gradient ui that View can change from one background to another background. (Such as the background of ImageView, the color of TextView)'

siteUrl = 'https://github.com/wangdong20/AndroidGradientUI'
gitUrl = 'https://github.com/wangdong20/AndroidGradientUI.git'

libraryVersion = '1.0.1'

developerId = 'david'
developerName = 'David Wong'
developerEmail = 'wangd1991@gmail.com'

licenseName = 'The Apache Software License, Version 2.0'
licenseUrl = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
allLicenses = ["Apache-2.0"]
}


在这里需要把bintrayName写成之前Create Pacakge所填写的package name,publishedGroupId就是我们之前提到的GROUP_IDartifact就是之前提到的ARTIFACT_IDlibraryVersion就是VERSION

如果上传成功的话,那么我们引用该类库的代码就是:

compile 'com.david.gradientuilib:gradientuilibrary:1.0.1'


最后我们还需要配置bintray upload的相关代码

apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/installv1.gradle'
apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/bintrayv1.gradle'


这两行代码添加到前面修改过的library module的build.gradle的最后面。

然后是在整个project的build.gradle里面添加最后三行代码。

dependencies {
classpath 'com.android.tools.build:gradle:1.3.0'

// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.2'
classpath "org.jfrog.buildinfo:build-info-extractor-gradle:3.1.1"
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'
}
}


最后在AndroidStudio提供的Terminal窗口执行如下命令:



gradlew install


如果顺利的话,过几分钟就会出现

BUILD SUCCESSFUL


接下来需要把build成功的文件upload到bintray上

gradlew bintrayUpload


顺利的话,也会出现

BUILD SUCCESSFUL


检查你在bintray创建的package,你会看到对应的版本号



在这里我觉得我有必要提一下,在我执行gradlew bintrayUpload命令的时候遇到的一些问题。

我遇到的问题是在build过程中,出现javadoc生成失败的问题,百度了一下,原因是编码问题,中文的注释对应的编码是GBK编码,上传的时候会出问题,没有找到太好的解决方案。最后我采用了一个简单粗暴的方法,就是把所有有中文注释的地方都换成了英文,改完后顺利地上传成功。

到目前为止,你已经成功地把类库文件上传到bintray上,接下来就是同步到jcenter上了。

第三步:同步library文件到创建的bintray仓库



这一步需要做的是最简单的,只需要在如上页面点击右下角的Add to JCenter按钮,可能是我已经上传过了,所以现在没有显示Add to JCenter按钮。

接下来会跳到一个Request to include package GradientUI in jcenter的页面,什么都不用做,直接点击Send按钮就可以了。

大概过个2,3个小时,通过jcenter那边的审核就会在bintray上收到jcenter那边的同意消息提醒。

至此就要恭喜你,你的类库上传到jcenter成功了!

到这里大家就可以用我写的类库GradientUI,仅仅只需要添加一行代码:

dependencies {
compile 'com.david.gradientuilib:gradientuilibrary:1.0.1'
}


写在最后

GradientUI的介绍GradientUI即我的上一篇博客

开源地址AndroidGradientUI

参考文章:How to distribute your own Android library through jCenter from AndroidStudio
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android jcenter