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 服务器下载类库的。基本上有jcenter和Maven 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_ID是com.david.gradientuilib,ARTIFACT_ID是gradientuilibrary,VERSION是1.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_ID,artifact就是之前提到的ARTIFACT_ID,libraryVersion就是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
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories