使用Gradle检测IDE环境

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)

mre*_*elt 6

要确定您的构建是否由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)

这解决了我们遇到的两个问题:

  1. 之前,新提交有效地禁用了Instant Run.由于versionCode已自动更新,因此Manifest已更改 - 这会在Instant Run中触发完全重建.
  2. 之前,当我们切换Git分支时,versionCode经常更改为较小的分支(降级),因此我们不得不重新安装应用程序.现在我们为所有IDE构建提供了相同的versionCode.


And*_*rey 6

在构建脚本中,您可以评估 IDE 添加的以下属性:

例如:System.getProperty('idea.active')