在 Android 构建中访问 Gradle 命令行 -P 变量
Access Gradle Command Line -P Variables in Android Build
首先,我是 gradle 的新手,所以这可能是一个愚蠢的问题,但我找不到解决方案。
我正在尝试在终端中构建一个签名的 Android .apk 文件,我想使用命令行来传递一些参数:
gradle assembleRelease -PkeyPw='secret123' -PstorePw='secret123' -PkeyAlias='My-Testkey' -PkeyLocation='/home/someUser/test-key.keystore'
现在我想在 build.gradle 文件中使用这些变量:
signingConfigs {
release {
storeFile $keyLocation
storePassword $storePw
keyAlias $keyAlias
keyPassword $keyPw
}
}
但它们是空的(可能是因为它根本没有任何意义,但我没有找到如何做到这一点)。
感谢您的帮助!
编辑
我 运行 gradle 使用命令 java 构建
new ProcessBuilder().inheritIO.command(cmd).start
并得到以下错误:
FAILURE: Build failed with an exception.
* Where:
Build file 'somePlace/app/build.gradle' line: 16
* What went wrong:
A problem occurred evaluating project ':app'.
> Could not find property 'keyLocation' on project ':app'.
* Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
通过 -P
开关传递的所有属性都可以通过 project
变量访问。所以它将是:
signingConfigs {
release {
storeFile project.keyLocation
storePassword project.storePw
keyAlias project.keyAlias
keyPassword project.keyPw
}
}
最好在使用前检查 project
是否指定了 属性(以避免出现问题):
signingConfigs {
release {
storeFile project.hasProperty('keyLocation') ? project.keyLocation : 'default'
storePassword project.hasProperty('storePw') ? project.storePw : 'default'
keyAlias project.hasProperty('keyAlias') ? project.keyAlias : 'default'
keyPassword project.hasProperty('keyPw') ? project.keyPw : 'default'
}
}
另一种处理方法是覆盖 build.gradle
文件中的值。
./gradlew assembleRelease -Pandroid.injected.signing.store.file='/home/someUser/test-key.keystore' -Pandroid.injected.signing.store.password='secret123' -Pandroid.injected.signing.key.alias='My-Testkey' -Pandroid.injected.signing.key.password='secret123'
这不需要您的 build.gradle
文件中的特殊代码。
首先,我是 gradle 的新手,所以这可能是一个愚蠢的问题,但我找不到解决方案。 我正在尝试在终端中构建一个签名的 Android .apk 文件,我想使用命令行来传递一些参数:
gradle assembleRelease -PkeyPw='secret123' -PstorePw='secret123' -PkeyAlias='My-Testkey' -PkeyLocation='/home/someUser/test-key.keystore'
现在我想在 build.gradle 文件中使用这些变量:
signingConfigs {
release {
storeFile $keyLocation
storePassword $storePw
keyAlias $keyAlias
keyPassword $keyPw
}
}
但它们是空的(可能是因为它根本没有任何意义,但我没有找到如何做到这一点)。
感谢您的帮助!
编辑
我 运行 gradle 使用命令 java 构建
new ProcessBuilder().inheritIO.command(cmd).start
并得到以下错误:
FAILURE: Build failed with an exception.
* Where:
Build file 'somePlace/app/build.gradle' line: 16
* What went wrong:
A problem occurred evaluating project ':app'.
> Could not find property 'keyLocation' on project ':app'.
* Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
通过 -P
开关传递的所有属性都可以通过 project
变量访问。所以它将是:
signingConfigs {
release {
storeFile project.keyLocation
storePassword project.storePw
keyAlias project.keyAlias
keyPassword project.keyPw
}
}
最好在使用前检查 project
是否指定了 属性(以避免出现问题):
signingConfigs {
release {
storeFile project.hasProperty('keyLocation') ? project.keyLocation : 'default'
storePassword project.hasProperty('storePw') ? project.storePw : 'default'
keyAlias project.hasProperty('keyAlias') ? project.keyAlias : 'default'
keyPassword project.hasProperty('keyPw') ? project.keyPw : 'default'
}
}
另一种处理方法是覆盖 build.gradle
文件中的值。
./gradlew assembleRelease -Pandroid.injected.signing.store.file='/home/someUser/test-key.keystore' -Pandroid.injected.signing.store.password='secret123' -Pandroid.injected.signing.key.alias='My-Testkey' -Pandroid.injected.signing.key.password='secret123'
这不需要您的 build.gradle
文件中的特殊代码。