Android Studio--gradle,jCenter

一、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按钮加入你的包发布(可能你的包名会搜索不出来,我就遇到了,但也还是成功的)好啦,现在已经大功告成啦。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章