Duchen's Blog

AS中的Gradle文件配置

AS中的Gradle文件配置

参考链接

总览

Android app module 的构建过程

构建过程

自定义构建配置

Build Types

  • Build types 通常用于定义开发周期中的不同阶段,例如在 debug 阶段开启debug选项, release 阶段开启代码压缩、代码混淆并使用正式的key对apk进行签名。

Product Flavors

  • Product flavors 代表app发行的不同版本,例如免费版和付费版,可以让不同的 Product flavors 使用不同的代码和资源文件,或者只是定义不同的渠道包。

  • defaultConfig 属于 Product Flavors,相当于默认的基本配置

Build Variants

  • build variant = product flavor + build type, Gradle会把 product flavor 和 build type 的配置组合在一起,形成一个 build variant 的配置,由系统自动生成。

Manifest Entries

  • build variant 的部分配置信息会直接覆盖到 manifest 文件上去,例如 applicationId、versionName、target SDK version 等。

    也可以通过 manifestPlaceholders 来配置跟不同的 build variant 相关的变量

    1
    2
    3
    defaultConfig {
    manifestPlaceholders = [NAME:"value"]
    }

    然后这样在 manifest 中使用变量

    1
    2
    3
    <meta-data
    android:name="TYPE_VALUE"
    android:value="${NAME}" />

Dependencies

  • 构建系统通过 dependencies 来管理本地依赖文件和远程仓库依赖。

Signing

  • 可以在不同的 buildTypes 中配置 signingConfig 来选择签名配置,构建系统会使用默认的key去打包 debuggable 为 true 的版本,release版本的 signingConfig 需要自己配置。

    • 一个 applicationId 唯一确定一个apk
    • 相同的 applicationId,打包的key不同的话,以最先发布的apk的key为准

ProGuard

  • 不同的 build variants 可以采用不同的 ProGuard rules file,当配置了多个时,会把它们合并到一起。

APK Splits

  • 可以使用指定的代码和资源文件来打包对应不同分辨率的apk。(当你的apk为了支持不同分辨率导致体积在100M以上时,才推荐这么做)

源代码设置

不同目录下的代码和资源文件会按照是否需要以及相应的优先级合并到一起,组合成最后的 buildVariant 所对应的代码

src/main/

  • This source set includes code and resources common to all build variants.

src/buildType/

  • only for a specific build type.

src/productFlavor/

  • only for a specific product flavor.

src/productFlavorBuildType/

  • only for a specific build variant.

当不同目录的代码有冲突时,会按照下面的优先级来选择

build variant > build type > product flavor > main source set > library dependencies