最近为了制作 Android 应用打包脚本,学习了一下 gradle。Gradle 构建系统语法简洁、功能强大、配置灵活,笔者只是把它当作一个构建工具来使用,基于它所提供的便利制作可以修改版本号、编译号、id 及导入证书的脚本。
对于一个项目或者一个工程,Gradle 可以定义多个构建任务,debug 和 release 是常见的两个构建任务,用户还可以根据需要自定义自己的构建任务,如测试构建任务和预发布构建任务,甚至是针对不同发布渠道的构建任务。这里只用到 debug 任务。
gradle 命令行支持传入自定义参数,并在编译过程注入这些参数。
修改 appid 及 版本号
修改 build.gradle 文件
1
2
3
4
5
6
7
8
9
10
11
| android {
compileSdkVersion 21
buildToolsVersion '26.0.2'
defaultConfig {
applicationId project.hasProperty('applicationId') ? applicationId : "com.domain.myApp"
minSdkVersion 14
targetSdkVersion 21
versionCode project.hasProperty('versionCode') ? versionCode.toInteger() : 100
versionName project.hasProperty('versionName') ? versionName : "1.0.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
|
命令行中传入对应 key 的参数
1
| gradle assembleDebug -PversionCode="200" -PversionName="2.0.0" -PapplicationId="com.domain.myApp.debug"
|
修改应用 id 的最好同时修改包名,不然会有包名冲突,修改包名需要修改 AndroidManifest.xml
文件,先在 build.gradle
文件中使用 manifestPlaceholders
属性定义一个键:
1
2
3
4
5
6
7
8
9
| // 获取应用 id
def getApplicationId = { ->
def appId = project.hasProperty('applicationId') ? applicationId : "com.domain.myApp"
return appId
}
manifestPlaceholders = [
PACKAGE_NAME: "${getApplicationId()}"
]
|
然后在 AndroidManifest.xml
文件中以 ${PACKAGE_NAME}
的方式引用,gradle 会在构建过程中把这个值给替换掉。应用名称的修改同理。
导入 keystore 文件及密码
也可以使用类似上面的方式导入签名文件及密码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| signingConfigs {
debug {
storeFile file('keystores/debug.keystore')
}
release {
keyAlias project.hasProperty('keyAlias') ? keyAlias : 'mykey'
keyPassword project.hasProperty('keyPassword') ? keyPassword : '123456'
storeFile file(project.hasProperty('storeFilePath') ? storeFilePath : 'keystores/debug.keystore')
storePassword project.hasProperty('storePassword') ? storePassword : '123456'
}
}
buildTypes {
debug {
signingConfig signingConfigs.debug
minifyEnabled false
}
release {
signingConfig signingConfigs.release
}
}
}
|
命令行输入:
1
| gradle assembleDebug -PkeyAlias="mykey" -PkeyPassword="123456" -PstoreFilePath="Users/hack/Documents/keys/mykey.keystore" -PstorePassword="654321"
|
导入 keystore
文件,还可以使用官方提供的其它属性:
1
2
3
4
| android.injected.signing.store.file
android.injected.signing.store.password
android.injected.signing.key.alias
android.injected.signing.key.password
|
然后命令行输入:
1
| gradle assembleDebug -Pandroid.injected.signing.store.file=$KEYFILE -Pandroid.injected.signing.store.password=$STORE_PASSWORD -Pandroid.injected.signing.key.alias=$KEY_ALIAS -Pandroid.injected.signing.key.password=$KEY_PASSWORD
|
参考:
Inject build variables into the manifest