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

Android Studio--gradle,jCenter

2016-04-24 22:26 429 查看

一、gradle简介

gradle是一个基于jvm的项目构建工具,使用groovy语言编写,主要面向java应用。集成了Maven和ant的功能。

二、主要文件

以我的SortContact工程为例,自己可以看文件目录细节:app和library是两个module,app是application型的,library是library型。

1. SortContact/gradle/gradle-wrapper.properties

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.8-all.zip


gradle下载地址为:http://www.gradle.org/downloads。这个as在项目构建成功时会自动下载好。

默认存储地址:C:\User.gradle\wrapper\dists

以上这些默认路径一般不会更改,gradle-2.8-all.zip是gradle版本,很多导包不成功的原因就是因为它的版本问题,会有提示。

2. 列表内容SortContact/setting.gradle

include ':app', ':library'


项目里需要加入的module,若还有其它模块都需按此种格式加进去,不然就使用不了这些模块的方法。

3. 列表内容SortContact/build.gradle

此文件是整个项目的gradle基础配置文件

buildscript {
repositories {
jcenter()
}
dependencies {
//声明android gradle plugin的版本,这个我当时的as版本是1.3的所以gradle plugin 1.3的版本,现在是1.5正式版,2.0正式版也快出来了,到时as版本升级,下面这个版本号也得相应改变。
classpath 'com.android.tools.build:gradle:1.3.0'
}
}
allprojects {
repositories {
jcenter()//jcenter是一个由 bintray.com维护的Maven仓库
//以前版本是mavenCentral(),由sonatype.org维护的Maven仓库
//jcenter和Maven Central 都是标准的 android library仓库,但是它们维护在完全不同的服务器上,两者之间毫无关系。
// 在jcenter上有的可能 Maven Central 上没有,反之亦然。
}
}


Maven Central最大问题是上传library非常困难,同时也有安全方面等原因,as团队就把他换为jCenter,我们的库也就是从这里得到的。jCenter是全世界最大的java仓库,所以相对Maven Central来说有的东西更多一点。然后他上传library到仓库也很简单,若想把library上传到 Maven Central 也可以在bintray网站上实现。

4. SortContact/app/build.gradle

app这个module的gradle配置文件(library的就不讲了,因为同为module)

apply plugin: 'com.android.application'  //声明为android程序,其他module比如我的项目里library就得为com.android.library
android {
compileSdkVersion 23        //编译版本
buildToolsVersion "23.0.2"  //build工具版本,在SDK Manager下载相应版本,也是导包不成功原因之一,与eclipse一样的道理
defaultConfig { //默认配置
applicationId "com.xiong.sortcontact"  //包名
minSdkVersion 14
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes { //创建类型
release {
minifyEnabled false  //是否进行混淆
// 前一部分android默认的混淆文件,包含了基本的混淆声明,目录在 /tools/proguard/proguard-android.txt?
// 后一部分是我们项目里的自定义的混淆文件,声明一些第三方依赖的一些混淆规则,目录在 /app/proguard-rules.txt
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions{
abortOnError false
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar']) //编译libs目录下所有jar包
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
compile project(':library') //编译这个项目除了app的其他模块,此处只要一个library
}


三、Gradle获取library

知道了大概的gradle构建文件,那他是如何compile就能获取library的呢

一般library字符串形式有三部分:

groupID(该library的具体包名):artifactID(library的真实名字):version

添加了依赖gradle就会询问maven仓库的服务器,查看此library是否存在,若有就按着询问的网址下载与我们项目一起编译,这就不用我们自己去手动下载了。仓库里的library有两种:jar包和arr文件。

arr文件就比jar包多了一些什么mainifest、资源等这类东西,其实就是在jar包基础上植入一些android特性,为android开发设计。

四、上传我们的library到jCenter

前面也大概介绍了jCenter,既然as能直接compile下载bintray服务器里的代码,那我们何不把自己的library放到仓库里开源出去,以后就不用移植了也compile下来就是了,而且也可以让别人也使用。然后google了很多这方面的资料,好多既麻烦还不成功,然后在我老大那弄到一种最简单的办法,那就是借助bintray-release插件来将类库上传至binary,具体步骤如下:

1.先进入bintray官网注册帐号,然后点击maven,然后在

add package,注意这个package name就是你在第二步里要填的artifactId

2.还是以原先这个项目为例,我的library模块就是需要上传的,也就是我刚上面省略没讲的,我干脆直接复制过来,然后在旁边有注释就代表是我们需要手动加上的。

apply plugin: 'com.android.library'
apply plugin: 'com.novoda.bintray-release'//插件bintray-release
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
minSdkVersion 14
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions{
abortOnError false
}
}
//下载插件路径,我是这么理解的
buildscript {
repositories {
jcenter {
url "http://jcenter.bintray.com/"
}
}
dependencies {
classpath 'com.novoda:bintray-release:0.3.4'
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:recyclerview-v7:23.1.1'
}
//配置bintray的信息
publish {
userOrg = 'xiong-hui-hui'//bintray里的用户名
//我以后需要compile'com.xiong.sortcontact.library:sort:1.0'所以后面三项自己看着填吧
groupId = 'com.xiong.sortcontact.library'//方法所在包名
artifactId = 'sort' //bintray里你建的包名
publishVersion = '1.0' //版本号
desc = 'for some data to sort'//描述:随便写别用中文就行,反正我是出错了的
website = 'https://github.com/xiong-hui-hui/SortContact' //指明github里该项目的位置
}


3.然后就是构建命令

gradlew clean build bintrayUpload -PbintrayUser=xiong-hui-hui -PbintrayKey=你的API key -PdryRun=false 用户名也改为自己的

4.Linked to jcenter

这个需要审核,可能需要一天,审核通过后会出现!这个图标,点击它进入jCenter页面,再点击最后一步发布也是在这里完成,点击Include My Package按钮加入你的包发布(可能你的包名会搜索不出来,我就遇到了,但也还是成功的)好啦,现在已经大功告成啦。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: