如何让 Android Gradle 构建写入一个进入调试 APK 的文件

How to have Android Gradle build write a file that goes into the debug APK

GenyMotion 的本地主机 IP 地址 (10.0.3.2) 与 Android 模拟器的本地主机 IP (10.0.2.2) 不同。目前我的一个源文件中有这个:

//val LOCALHOST = "10.0.2.2"  // Android emulator
val LOCALHOST = "10.0.3.2"  // Genymotion

每当我在 Linux 框和 Mac 框之间切换并获取最新资源时,我必须在重建之前取消注释一个并注释另一个。

除非有人能想到更好的解决方案,否则我希望有一个 Gradle 任务根据主机 OS 写出这些值之一到包含在APK 以这样一种方式,我可以从我的 Android 应用程序的 运行 时间访问它,并且当我在 Android Studio 中构建时,在 assembleDebug 之前完成该任务 运行 .

我想将它放在资源中在 运行 时间端最容易访问,但即使是 Class.getResourceAsStream() 可访问的纯文本文件也可以。

我不介意它是否包含在发布 apk 中,但我更希望它直接进入调试版本。

我还希望在我的 build/ 输出目录中生成文件,这样它对版本控制是不可见的。

知道怎么做吗?

有更好的解决方案,例如使用 getNetworkInterfaces() 查找本地 IP 地址,但正如您询问如何从 gradle 传递一些信息,

android {
    productFlavors {
        flavorGenymotion {
            buildConfigField "String", "LOCALHOST", '"10.0.3.2"'
        }
        flavorEmulator {
            buildConfigField "String", "LOCALHOST", '"10.0.2.2"'
        }
    }
    ...

您可以作为 BuildConfig.LOCALHOST.

访问