Android Gradle 学习 一

Android Gradle 学习 一

Gradle 介绍

Gradle 支持很多语言,其中支持Android,在开发Android过程中,我们可以使用Gradle构建我们的程序,包括构建类型,风格,签名配置等
个性化可以自定义的一些功能。

默认(Project)视图中的项目布局如图

可以看见有多个Gradle文件,其中,在外部app外面一层的build.gradle文件是整个项目的gradle文件,app里面的属于app这个项目的gradle配置,相当于子类和父类的关系,比如一些公共的属性可以定义在外层的Gradle文件也可以定义在app路径下的gradle都是可以的。只是在外层定义如果有多个子项目,子项目同样可以引用gradle定义的资源属性。

Project build.gradle配置如下

buildscript {
repositories {
    jcenter()
}
dependencies {
    classpath 'com.android.tools.build:gradle:2.3.2'

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

buildscript顶级构建文件中的块告诉Gradle在哪里下载该插件。

默认情况下,该插件是从jcenterBintray JCenter Artifactory存储库中下载的。支持其他存储库(特别mavenCentral()是默认的Maven存储库),但JCenter现在是默认的。来自JCenter的所有内容都通过具有安全HTTPS连接的CDN提供。它也往往更快。

该 allprojects 表示顶级项目和任何子项目都默认使用jcenter()存储库来解析任何Java库依赖关系。

setting.gradle

include ':app'

表示引用app这个模块,如果你还有其他model被引用,这里也会显示其他model的名称。

app.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23 //运行的sdk大小
    buildToolsVersion "23.0.3" //构建工具版本

    defaultConfig {
        applicationId "com.kousenit.myandroidapp" //包名
        minSdkVersion 19 //最小sdk
        targetSdkVersion 23 //目标sdk
        versionCode 1 //版本号
        versionName "1.0" //版本名称
    }
    buildTypes { //构建类型
        release { //release版本   默认debu版本 这里没有写出
            minifyEnabled false //是否开启混淆
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.3.0'
}

apply plugin

这里引入的是 com.android.application 表示将android插件添加到构建系统中,从而实现android DSL, 如果这是一个model或者一个libary 引入的就会是一个

apply plugin: 'com.android.library'

一个程序中可以引入多个library 但是只有一个application。

dependencies

这里的dependencies块由三行组成,第一行表示 fileTree中 libs目录中包含.jar的文件,引入到编译类路径中;第二行告诉Gradle下载Junit 4.12版本,并且只参加测试编译,正式签名环境不会参与编译;第三行表示告诉gradle 下载com.android.support:appcompat-v7这个包,并且是23.3.0版本,然后编译。如果有其他需要下载的也可以通过此方式引入。

其他属性上面已经注释给出了。

注意:您必须指定使用的编译目标compileSdkVersion和通过构建工具版本buildToolsVersion。这两个值都应该分配给最新的可用版本,因为它们是向后兼容的,并包括所有当前的错误修复。 (尽量保持最新的)

gradle命令行构建程序

可以使用gradle build 或者 gradlew build 那么gradle和gradlew有什么区别呢,
//gradlew:您不需要安装Gradle才能构建Android项目。Android Studio附带了一个Gradle发行版(以插件的形式),并且包含专门的功能来支持它。该 术语“Gradle wrapper”是指Android应用程序的根目录中的gradlew.bat脚本和脚本,其中结尾的“w”表示“包装器”。Gradle包装器的目的是允许客户端运行Gradle,而不必先安装它

#Mon Dec 28 10:00:20 PST 2015
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https://services.gradle.org/distributions/gradle-2.10-all.zip

该 distributionUrl 属性表示包装器将下载并安装Gradle版本2.10。1第一次运行后,Gradle分发将缓存在zipStorePath目录下的文件夹中zipStoreBase,然后可用于随后执行Gradle任务。

该 初始下载可能需要几分钟,具体取决于您的Internet连接速度。然而,它只需要完成一次。之后,随后的版本将使用缓存的版本。

Gradlew 是包装器,自动下载包装里定义好的gradle 版本,保证编译环境统一,gradle 是用本地的gradle(可以自己下载gradle配置 通过本地配置的方式构建)

使用Gradle执行任务

例如 gradle clean build ,在需要执行的任务名称前面加上gradle即可,想要找到需要执行的task可以通过查看android studio右侧gradle工具栏查看

也可以通过双击的方式运行。

gradle依赖关系

gradle支持几种不同的列出依赖方式。最常见的是使用冒号分隔的组,名称和版本值的引号。
例如:
compile ‘com.android.support:appcompat-v7:23.3.0’

组是 ‘com.android.support’ 名称是: appcompat-v7 版本号是:23.3.0;

注意

gradle 文件使用Groovy,它支持单引号和双引号字符串。双引号允许插值或可变替换,但是否则相同。见附录A的细节。

依赖关系与配置相关联。Android的项目包括compile, runtime,testCompile,和testRuntime配置。插件可以添加其他配置,您还可以定义自己的配置

依赖关系的完整语法

`testCompile group: 'junit', name: 'junit', version: '4.12'`

快捷语法

`testCompile 'junit:junit:4.12'`

用合适的方式指定具有加号的版本号

`testCompile 'junit:junit:4.+'`

不推荐用这样的方式,这样的方式,这告诉Gradle,编译项目的测试需要大于或等于4.0的任何版本的JUnit。虽然这样做,它使得构建更少的确定性,因此较不可重现。显式版本号也可以防止特定API的更新版本中的更改

gradle 项目同步

当你添加一个依赖项以后需要同步项目 这时应该怎么做呢,可以通过提示来重新构建 例如右上角sync now

在这种情况下,retrofit依赖关系也会将库okhttp和okio库添加为传递依赖关系,如图1-12所示。

如果您错过了单击该Sync Now链接的机会,Android Studio将为工具栏提供一个特殊图标,用于相同的目的以及一个菜单项。

传递依赖

有的引入的包可能包含其他的包,也可能需要其他包的支持,这个时候可以自行查找对应文档看是否需要添加其他包,也可以查看该包下面是否已经存在了你想要添加的包,

例如:

可以发现com.android.support:appcompat-v7包下面包含了com.android.support:support-v4 因此我们也不必在单独的引入v4

猜你喜欢

转载自blog.csdn.net/xiaxiayige/article/details/76407499