Gradle学习

简介

Gradle 是以 Groovy 语言为基础,面向 Java 应用为主,基于 DSL 语法的自动化构建工具。

如何自动化打包(含签名的)

步骤

1、将准备好的keystore签名文件放在根目录下;(目的是待会儿配置 build.gradle 文件时,可以直接通过指定路径引用)
2、在 module 级别的 build.gradle 中添加如下配置代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
android {
// ...
signingConfigs {
myConfig {
storeFile file("lyloou.keystore")
storePassword "lyloou"
keyAlias "lyloou"
keyPassword "lyloou"
}
}

buildTypes {
release {
signingConfig signingConfigs.myConfig
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}

3、执行gradle clean清理之前的自动生成文件;
4、执行gradle build开始生成文件;
5、在build/outputs/apk/文件夹中可以看到生成成功的 apk 文件;

注意事项

通过执行gradle build自动生成的文件包含:

  • [项目名]-debug-unaligned.apk:指的是调试模式,没有优化的 apk(可直接安装)
  • [项目名]-release-unsigned.apk:指的是没有签名的 apk(不可直接安装)
  • [项目名]-debug.apk:指的是已经签名过的调试版 apk;
  • [项目名]-release.apk:指的是已经签名过的发布版 apk;

扩展技巧

参考资料

如何根据环境自动选择 key 或其他配置信息

动态替换AndroidManifest.xml中的 key 信息

  1. AndroidManifest中添加占位符
1
<data android:scheme="${WECHATAPPID}" />
  1. build.gradle中的defaultConfig标签或者buildTypes的 debug 和 release 标签下定义具体 value
1
2
3
defaultConfig {
manifestPlaceholders = [WECHATAPPID: "wxea2xxxxxxxxxxxxxxx"]
}

或者

1
2
3
4
5
6
7
debug {
manifestPlaceholders = [WECHATAPPID: "wxea2xxxxxxxxxxxxxxx1"]
}

release {
manifestPlaceholders = [WECHATAPPID: "wxea2xxxxxxxxxxxxxxx2"]
}

通过BuildConfig定义值

在不同的环境中设置不同的值,这样在打包(测试环境或正式环境)的时候就会有不同的值。注意定义完成后,要重新编译下环境,这样才能在 BuildConfig.java 中生效;

1
2
3
4
5
6
7
debug {
buildConfigField "boolean", "TEST_ENV", "true"
}

release {
buildConfigField "boolean", "TEST_ENV", "false"
}

在代码中引用

1
public static final boolean TEST_ENV = BuildConfig.TEST_ENV;

在编译之前执行脚本

1
2
3
4
5
6
7
8
9
10
// 在 settings.gradle 最上方添加
def updateDependencies(){
def command = "sh install.sh"
exec {
executable "bash"
args "-c", command
}
}

updateDependencies()