构建配置文件

参考链接:google官方文档

创建自定义构建配置需要您对一个或多个构建配置文件(或build.gradle文件)进行更改。这些纯文本文件使用域特定语言(DSL)以Groovy语言描述和操作构建逻辑,后者是一种适用于Java虚拟机的动态语言。您无需了解Groovy便可开始配置构建,因为Android Plugin for Gradle引入了您需要的大多数DSL元素。

有几个Gradle构建配置文件是Android应用标准项目结构的组成部分。您必须料及其中每一个文件的范围和用途及其应定义的基本DSL元素,才能着手配置构建。

1_Gradle设置文件

settings.gradle文件位于项目根目录,用于指示Gradle在构建应用时应将哪些模块包括在内。对大多数项目而言,该文件很简单,只包括以下内容:

include ':app'

不过,多模块项目需要制定应包括在最终构建之中的每个模块。

2_顶级构建文件

顶级build.gradle文件位于项目根目录,用于定义适用于项目中所有模块的构建配置。默认情况下,这个顶级构建文件使用buildscriot()代码块来定义项目中所有模块共用的Gradle存储区和依赖项。

以下代码示例描述的默认设置和DSL元素可在新建项目后的顶级build.gradle文件中找到。

    /**
     * buildscript {}块是您为Gradle本身配置存储库和依赖项的地方 - 这意味着,您不应在此处包含模块的依赖项。
     * 例如,此块包含Gradle的Android插件作为依赖项,
     * 因为它提供了Gradle构建Android应用程序模块所需的其他指令。
     */
    buildscript {
        /**
         * 存储库{}块配置Gradle用于搜索或下载依赖项的存储库。
         * Gradle预配置对JCenter,Maven Central和Ivy等远程存储库的支持。
         * 您还可以使用本地存储库或定义自己的远程存储库。
         * 下面的代码将JCenter定义为Gradle应该用来查找其依赖项的存储库。
         */
        repositories {
            google()
            jcenter()
        }
    
        /**
         * dependencies {}块配置Gradle需要用于构建项目的依赖项。
         * 以下行将Gradle版本3.1.2的Android插件添加为类路径依赖项。
         */
        dependencies {
            classpath 'com.android.tools.build:gradle:3.1.2'
            classpath 'com.jakewharton:butterknife-gradle-plugin:8.8.1'
    
            // NOTE: Do not place your application dependencies here; they belong
            // in the individual module build.gradle files
        }
    }
    
    /**
     * allprojects {}块是您配置项目中所有模块使用的存储库和依赖项的位置,例如第三方插件或库。
     * 应在模块级build.gradle文件中配置项目中所有模块不需要的依赖项。
     * 对于新项目,Android Studio将JCenter配置为默认存储库,但它不配置任何依赖项。
     */
    allprojects {
        repositories {
            google()
            jcenter()
        }
    }
    
    task clean(type: Delete) {
        delete rootProject.buildDir
    }

3_模块级构建文件

模块级 build.gradle 文件位于每个 <project>/<module>/ 目录,用于配置适用于其所在模块的构建设置。我们可以通过配置这些构建设置来提供自定义打包选项,以及替换main/应用清单或顶级build.gradle文件中的设置。

以下这个示例 Android 应用模块 build.gradle 文件概述了您应该了解的部分基本 DSL 元素和设置。

    /**
     * 构建配置中的第一行将Gradle的Android插件应用于此构建,并使android {}块可用于指定特定于Android的构建选项。
     */
    apply plugin: 'com.android.application'
    
    /**
     * android {}块是您配置所有Android特定构建选项的地方。
     */
    android {
    
        /**
         * compileSdkVersion指定Gradle用于编译应用程序的Android API级别。
         * 这意味着您的应用可以使用此API级别中包含的API功能。
         *
         * buildToolsVersion指定Gradle用于构建应用程序的SDK构建工具,命令行实用程序和编译器的版本。
         * 您需要使用SDK Manager下载构建工具。
         * 在文件夹build-tools里面
         */
        compileSdkVersion 27
        buildToolsVersion '27.0.3'
    
        /**
         * defaultConfig {}块封装了所有构建变体的默认设置和条目,并且可以从构建系统动态覆盖main / AndroidManifest.xml中的某些属性。
         * 您可以配置产品风格以覆盖应用程序的不同版本的这些值。
         */
        defaultConfig {
            // applicationId唯一标识要发布的包。 但是,您的源代码仍应引用main / AndroidManifest.xml文件中package属性定义的包名称。
            applicationId "com.example.app_network"
    
            // 定义运行应用程序所需的最低API级别。
            minSdkVersion 21
    
            // 指定用于测试应用程序的API级别。
            targetSdkVersion 27
    
            // 定义应用的版本号。
            versionCode 1
    
            // 为您的应用定义用户友好的版本名称。
            versionName "1.0"
    
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    
        }
    
        /**
         * 您可以在buildTypes {}块中配置多个构建类型。
         * 默认情况下,构建系统定义了两种构建类型:debug和release。
         * 调试构建类型未在默认构建配置中显式显示,但它包含调试工具并使用调试密钥进行签名。
         * 发布版本类型应用Proguard设置,默认情况下不签名。
         */
        buildTypes {
    
            debug {
    
            }
    
            // 默认情况下,Android Studio使用minifyEnabled配置发布版本类型以启用代码收缩,并指定Proguard设置文件。
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    
        /**
         * productFlavors {}块是您可以配置多种产品风格的地方。
         * 这允许您创建可以使用自己的设置覆盖defaultConfig {}的应用程序的不同版本。
         * 产品flavor是可选的,默认情况下构建系统不会创建它们。
         * 此示例创建免费且付费的产品风格。
         * 然后,每种产品风格都指定自己的应用程序ID,以便它们可以同时存在于Google Play商店或Android设备上。
         */
        productFlavors {
            free {
                applicationId 'com.example.app-network.free'
            }
            paid {
                applicationId 'com.example.app-network.paid'
            }
        }
    
        /**
         * splits {}块是您可以配置不同APK构建的地方,每个APK构建仅包含支持的屏幕密度或ABI的代码和资源。
         * 您还需要配置构建,以便每个APK具有不同的versionCode。
         */
        splits {
            // 屏幕密度分割设置
            density {
                // 启用或禁用密度分割机制
                enable false
                // 从分裂中排除这些密度
                // exclude "ldpi","tvdpi","xxxhdpi","400dpi","560dpi"
            }
        }
    }
    
    /**
     * 模块级构建配置文件中的依赖项{}块仅指定构建模块本身所需的依赖项。
     */
    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
    
        implementation 'com.android.support:appcompat-v7:27.1.1'
        implementation 'com.android.support.constraint:constraint-layout:1.1.3'
        testImplementation 'junit:junit:4.12'
        androidTestImplementation 'com.android.support.test:runner:1.0.2'
        androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    }

4_Gradle属性文件

Gradle 还包括两个属性文件,位于项目根目录,可用于指定适用于Gradle 构件工具包本身的设置:

  • gradle.properties 您可以在其中配置项目范围Gradle设置,例如 Gradle 后台进程的最大堆大小。
  • local.properties 为构建系统配置本地环境属性,例如 SDK 安装路径。由于该文件的内容由 Android Studio 自动生成并且专用于本地开发者环境,因此您不应手动修改该文件,或将其纳入您的版本控制系统。

5_将项目与Gradle文件同步

当您在项目中对构建配置文件进行更改时,Android Studio 会要求您同步项目文件,以便其导入您的构建配置更改并执行一些检查来确保您的配置不会造成构建错误。

要同步项目文件,您可以点击做出更改后出现的通知栏中的 Sync Now,或者点击菜单栏中的 Sync Project。如果 Android Studio 通知配置出现错误,例如:您的源代码使用了只有在 compileSdkVersion 以上的 API 级别中才会提供的 API 功能,会显示 Messages 窗口,具体描述该问题。

6_源集

Android Studio 按逻辑关系将每个模块的源代码和资源分组为源集。模块的 main/ 源集包括其所有构建变体共用的代码和资源。其他源集目录为可选项,在您配置新的构建变体时,Android Studio 不会自动为您创建这些目录。不过,创建类似于 main/ 的源集有助于让 Gradle 只应在构建特定应用版本时使用的文件和资源井然有序:

  • src/main/
    此源集包括所有构建变体共用的代码和资源。
  • src/<buildType>/
    创建此源集可加入特定构建类型专用的代码和资源。
  • src/<productFlavor>/
    创建此源集可加入特定产品风味专用的代码和资源。
  • src/<productFlavorBuildType>/
    创建此源集可加入特定构建变体专用的代码和资源。

例如,要生成应用的“完整调试”版本,构建系统需要合并来自以下源集的代码、设置和资源:

  • src/fullDebug/(构建变体源集)
  • src/debug/(构建类型源集)
  • src/full/(产品风味源集)
  • src/main/(主源集)

如果不同源集包含同一文件的不同版本,Gradle 将按以下优先顺序决定使用哪一个文件(左侧源集替换右侧源集的文件和设置):
构建变体 > 构建类型 > 产品风味 > 主源集 > 库依赖项
这样一来,Gradle 便可使用专用于您试图构建的构建变体的文件,同时对与其他应用版本共用的 Activity、应用逻辑和资源加以重复利用。在合并多个清单时,Gradle 使用同一优先顺序,这样每个构建变体都能在最终清单中定义不同的组件或权限。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,263评论 25 707
  • 文章来源:Google 此页面以配置构建概览为基础,向您介绍如何配置构建变体,以便从同一个项目中创建应用的不同版本...
    文文太远了阅读 753评论 0 1
  • 文章来源:Google Android 构建系统编译应用资源和源代码,然后将它们打包成可供您测试、部署、签署和分发...
    文文太远了阅读 245评论 0 0
  • 文章摘要1、 Gradle 构建流程2、自定义构建配置3、构建配置文件4、Gradle 设置文件5、顶级构建文件6...
    Android那些事儿阅读 1,274评论 0 51
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,563评论 18 139