use*_*348 1 android intellij-idea gradle
无论如何都要检测我正在运行我的项目的环境.
像这样的东西:
的build.gradle
def usingIntelliJ = ...
def usingAndroidStudio = ...
if (usingIntelliJ) {
buildConfigField "String", "IDE_ENV", "IDEA"
} else if (usingAndroidStudio) {
buildConfigField "String", "IDE_ENV", "AndroidStudio"
}
Run Code Online (Sandbox Code Playgroud)
要确定您的构建是否由IDE触发,Android构建链将设置特定属性:
def isIdeBuild() {
return project.properties['android.injected.invoked.from.ide'] == 'true'
}
Run Code Online (Sandbox Code Playgroud)
在我们的构建中,我们使用此方法versionCode为IDE构建设置静态,但保持所需的行为以在构建服务器上自动增加它:
def getNumberOfGitCommits() {
def text = 'git rev-list --count HEAD'.execute().text.trim()
return text == '' ? 0 : text.toInteger()
}
def calculateVersionCode() {
return isIdeBuild() ? 123456789 : getNumberOfGitCommits()
}
android {
defaultConfig {
// ...
versionCode calculateVersionCode()
}
}
Run Code Online (Sandbox Code Playgroud)
这解决了我们遇到的两个问题:
versionCode已自动更新,因此Manifest已更改 - 这会在Instant Run中触发完全重建.versionCode经常更改为较小的分支(降级),因此我们不得不重新安装应用程序.现在我们为所有IDE构建提供了相同的versionCode.在构建脚本中,您可以评估 IDE 添加的以下属性:
idea.active当您从 IDE 运行 Gradle 任务时 IDE 设置的属性;
idea.sync.active当 IDE从 Gradle 构建脚本重新加载项目时,IDE 添加的属性。
例如:System.getProperty('idea.active')。
| 归档时间: |
|
| 查看次数: |
668 次 |
| 最近记录: |