管理 Android 项目里的 build.gradle

背景

现如今 Android 项目都是用 build.grale 来配置的,项目中一般包含多个 module,这样就会同时存在多个 build.gradle 文件,这时候如果要升级整个项目的 api 版本就需要手动改,会很麻烦,特别是module特别多的时候。下面就是解决这个问题的一些方法。

当然每个 module 可以有自己的支持库的版本和 compileSdk 等等版本号,这篇文章只是针对想统一整个项目构建工具、编译sdk、支持库版本号对应的一些方法。

配置支持库和编译相关的版本号

在我的项目中经常会在 app module 和其他 module 中存在很多支持库,比如com.android.support:appcompat-v7 com.android.support:support-v4包等支持库,而他们的版本号经常会更新,一般新的版本会修复一些 bug 并带来一些新的特性和提升性能,所以建议更新到最新版。

  • 把所有支持库配置存在一个文件中

    在项目根目录下创建gradleScript文件夹并在此文件夹下创建dependencies.gradle文件,如下

    1
    2
    3
    4
    5
    6
    root
    |-app
    |-module1
    |-module2
    |-gradleScript
    |-dependencies.gradle

    dependencies.gradle文件内容如下(可以依据自己的项目自定义)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    ext {
    // version
    supportLibrary = '25.2.0'
    // multiDex
    multiDex = '1.0.1'
    compileSdk = 25
    buildTools = '25.0.2'
    supportDependencies = [
    appCompat : "com.android.support:appcompat-v7:${supportLibrary}",
    appSupportV4 : "com.android.support:support-v4:${supportLibrary}",
    recyclerView : "com.android.support:recyclerview-v7:${supportLibrary}",
    cardView : "com.android.support:cardview-v7:${supportLibrary}",
    supportAnnotation: "com.android.support:support-annotations:${supportLibrary}",
    appCompatV4 : "com.android.support:support-compat:${supportLibrary}",
    v4CoreUtils : "com.android.support:support-core-utils:${supportLibrary}",
    v4CoreUi : "com.android.support:support-core-ui:${supportLibrary}",
    v4Fragment : "com.android.support:support-fragment:${supportLibrary}",
    multiDex : "com.android.support:multidex:${multiDex}",
    design : "com.android.support:design:${supportLibrary}"
    ]
    }

    !注意:"com.android.support:xxx"用的是双引号

  • 配置根目录的build.gradle文件

    文件内容如下

    1
    2
    3
    4
    5
    6
    7
    allprojects {
    repositories {
    jcenter()
    }
    }
    apply from: 'gradleScript/dependencies.gradle'
  • 配置 module 下的build.gradle文件

    内容如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    android {
    compileSdkVersion compileSdk
    buildToolsVersion buildTools
    }
    dependencies {
    compile supportDependencies.appCompat
    compile supportDependencies.recyclerView
    compile supportDependencies.cardView
    compile supportDependencies.appSupportV4
    compile supportDependencies.multiDex
    }

    完成上面的配置就可以直接使用了,以后只要改dependencies.gradle里面的版本号就可以改变整个项目的依赖版本号

管理签名文件

Android 打正式包时需要签名文件,但是签名文件是私密的一般不会用版本控制工具来管理,所以就需要一个单独的文件来存放签名相关的信息,我使用的是官方培训课程中的方案。

  1. 在项目的根目录下创建一个名称为 keystore.properties 的文件。此文件应当包含你的签名文件信息,如下:
1
2
3
4
storePassword=myStorePassword
keyPassword=mykeyPassword
keyAlias=myKeyAlias
storeFile=myStoreFileLocation
  1. 在 app module 的 build.gradle 文件中,于 android {} 块的前面添加用于加载 keystore.properties 文件的代码,如下:
1
2
3
4
5
6
7
8
9
10
// 初始化根目录下的 keystore.properties 文件
def keystorePropertiesFile = rootProject.file("keystore.properties")
// 声明 keystoreProperties 变量
def keystoreProperties = new Properties()
// 把 keystore.properties 文件加载到 keystoreProperties 变量中
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
android {...}
  1. 使用
1
2
3
4
5
6
7
8
9
10
11
android {
signingConfigs {
config {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
...
}

参考
How to manage the support libraries in a multi-module projects
Secure your private key