android - 使用 Gradle 检测 IDE 环境

标签 android intellij-idea gradle

有没有办法检测我运行项目的环境。

像这样:

构建.gradle

def usingIntelliJ = ...
def usingAndroidStudio = ...
if (usingIntelliJ) {
    buildConfigField "String", "IDE_ENV", "IDEA"
} else if (usingAndroidStudio) {
    buildConfigField "String", "IDE_ENV", "AndroidStudio"
}

最佳答案

为了确定您的构建是否由 IDE 触发,Android 构建链将设置一个特定的属性:

def isIdeBuild() {
    return project.properties['android.injected.invoked.from.ide'] == 'true'
}

在我们的构建中,我们使用此方法为我们的 IDE build设置静态 versionCode,但保持所需的行为以在我们的构建服务器上自动增加它:

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()
    }
}

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

  1. 以前,新提交会有效地禁用 Instant Run。由于 versionCode 已自动更新,Manifest 已更改 – 这会触发 Instant Run 中的完整重建。
  2. 以前,当我们切换 Git 分支时,versionCode 经常变小(降级),所以我们不得不重新安装应用程序。现在我们所有的 IDE 构建都有相同的版本代码。

关于android - 使用 Gradle 检测 IDE 环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25324880/

相关文章:

android - 如何为我的图库设置默认选定项目?

android - 谷歌地图与集群管理器 : onCameraChangeListener deprecated

java - System.getenv() 仅在调试 IntelliJ 插件时才能正常工作

android - Android Studio + Gradle错误

android - 在 Android 中将模型从 BLE 切换到蓝牙经典

java - 如何让 IntellijIDEA 忽略正在进行的类文件?

java - 在 IDEA 中解决工作区项目的依赖关系

android - Gradle 构建非常慢

java - 从Libs文件夹更改Gradle Compile .jar路径

c# - 安装时将文件从 Resources/StreamingAssets 复制到 Application.persistentDataPath