android 基础

Android Gradle 项目结构简介

2017-09-27  本文已影响0人  GloryObject

Gradle

首先介绍一下 Gradle
Gradle 是一个基于JVM的构建工具,这种工具使用的语言是 Groovy,即 build.gradle 里使用的语言。Gradle 能够配置一些编译的选项,也能添加一些开源库的引用。

扔一段维基的介绍:

Gradle 是一个基于 Apache AntApache Maven 概念的项目自动化建构工具。它使用一种基于 Groovy特定领域语言来声明项目设置,而不是传统的XML。
当前其支持的语言限于JavaGroovyScala,计划未来将支持更多的语言。

Gradle Files 分析

当我们要创建一个android项目时,我们会打开Android Studio,新建一个 Project,然后会看到如下的目录结构:

项目结构图

黄色框住的区域是gradle相关的配置文件,本文就简单介绍一下剩下的 Gradle 相关的内容。

Gradle 有几个重要的文件,顶层的setting.gradlebuild.gradle文件、每个 Module 自己的build.gradle文件,gradle.properties文件,local.properties文件,gradle目录。

为了以后的和谐相处,下面依次认识一下这几位 Gradle 家族成员:

1. setting.gradle:

include ':app'

这个 setting 文件定义了哪些 module 应该被加入到编译过程,对于 multi module 的项目我们需要这个文件,它告诉 gradle 要加载哪些 module。
对于一个新建的纯净项目,里面只定义了默认的 appmodule,后续有新的 module 的话都会自动在此处添加,当然也可以手动删掉。

* setting.gradle里也可以用 Groovy 语言写一些方法,这些方法在初始化项目时就被执行,做一些编译前的处理。

2. 顶层的build.gradle:

buildscript {
    repositories {
        jcenter()
        maven { url 'https://dl.google.com/dl/android/maven2/' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

3. module里的的build.gradle:

apply plugin: 'com.android.application'
#apply plugin: 'com.android.library'
android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"
    defaultConfig {
        applicationId "com.morning.android.glory"
        minSdkVersion 21
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:26.+'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
}

4. gradle.properties:

org.gradle.parallel=true
org.gradle.daemon=true
org.gradle.configureondemand=true
org.gradle.jvmargs=-Xmx4608m -XX:MaxPermSize=1g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 -XX:-UseParNewGC -XX:-UseConcMarkSweepGC -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC

COMPILE_SDK_VERSION=26
BUILD_TOOLS_VERSION=26.0.1
SUPPORT_LIBS_VERSION=26.0.1

这个里面可以配置参数,然后在其他build.gradle中引用

5. local.properties:

sdk.dir=/Users/zhouying/Library/Android/sdk

这里主要定义了sdk和ndk的路径,这个文件一般不会提交到公共仓库中,可以保留一些本地的配置。

6. gradle 目录

在讲 gradle 目录之前,我们需要先了解一下 Gradle Wrapper 的概念。如下。

Gradle Wrapper

Gradle 可以在没有安装 Gradle 的情况下使用,这时候就需要 Gradle Wrapper 了。Gradle Wrapper 其实就是一个脚本文件,它会在没有安装 Gradle 的情况下为我们下载Gradle,之后我们就可以使用 gradlew 命令了。

创建 Gradle Wrapper 文件

使用 gradle wrapper 来创建一组 Wrapper 文件。Gradle 官方建议我们在所有 Gradle 项目中都创建 Wrapper 文件,方便没有安装 Gradle 的用户使用。创建完毕之后,会发现我们的项目中多了如下一些文件:

gradlew (Unix Shell 脚本)
gradlew.bat (Windows批处理文件)
gradle/wrapper/gradle-wrapper.jar (Wrapper JAR文件)
gradle/wrapper/gradle-wrapper.properties (Wrapper属性文件)
然后,我们就可以像使用 gradle 命令一样使用 gradlew 了。Gradle Wrapper会自动为我们下载合适的 Gradle 版本。

Andorid Studio 创建项目时,已经替我们做了这一步,即生成了最上图黄色框中的 6. gradle 目录,所以我们不需要自己运行命令来创建 graldle wrapper 文件。

设置 Wrapper版本

使用 gradle wrapper --gradle-version 3.2.1 来设置Wrapper的版本。或者也可以直接编辑 gradle/wrapper/gradle-wrapper.properties 文件来修改版本。

文件内容如下,可以修改最后面的 "gradle-3.5-bin.zip" 来配置版本。

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

小结

Gradle 的存在就是为了构建。我们知道 java 代码需要经过编译生成 ·class 文件,然后打包成 dex,最后得到一个可以安装的 apk 包。Gradle 就是执行这一过程的构建工具。
除了构建,Gradle 还有一些其他“副业”,比如对于项目各种打包选项的配置,是生成 debug 包还是 release 包,对于各 Module 的管理,使用一些 jcentermaven 的开源项目等。这些功能都使 Gradle 变得更加丰富,也为开发者提供了更多便利。

上一篇 下一篇

猜你喜欢

热点阅读