如果是 Android 本地开发,如何指定?

how to specify in case of an Android local development?

有没有办法告诉 Android 我们正在本地开发和测试应用程序?所以我可以在代码中编写类似的东西来执行在本地开发的情况下必须执行的特定代码,而不是在打算部署应用程序和获取正确的远程数据时执行的代码:

if (LOCALLY) {
  MyLocalTools.xdebugIntegration();
  ...
}
...

当应用程序被共享时,我只需要打开一个全局选项来静音所有本地代码?

您可以使用构建风格和构建变体。

在您的 build.gradle 中,您可以定义如下一些口味:

productFlavors {

        dev {
            buildConfigField "String", "SERVICE_URL_BASE", "\"dev.example/rest\""
            applicationId "development.example.app"
        }

        prod {
            buildConfigField "String", "SERVICE_URL_BASE", "\"prod.example/rest\""
            applicationId "com.example.app"
        }

    }

如您所见,我们定义了 2 种口味,使用不同的变量。在我的例子中,我为休息服务和不同的应用程序 ID 定义了两个不同的端点。

然后在 Android Studio 的左下角,您可以 select 使用哪个构建变体来启动您的应用程序。构建变体是构建风格和构建类型的结合(默认构建类型是调试和发布)。

在您的代码中,您可以访问 build.gradle 文件中定义的变量,如下所示:

BuildConfig.SERVICE_URL_BASE

并且您可以使用类似这样的方式访问您的构建类型:

BuildConfig.FLAVOR
BuildConfig.BUILD_TYPE

使用这些变量你可以实现你想要的所有开关

如果"local development"是指debug次构建,"intended to be deployed"是指release次构建,可以用BuildConfig.BUILD_TYPE来区分build types, or use BuildConfig.DEBUG to distinguish between builds that are debuggable versus those that are not. Or, if you need a particular constant, use buildConfigField 将该自定义字段添加到 BuildConfig

另一个答案中引用的产品风格专为需要两个单独发布版本的情况而设计(例如,一个带有 Google 的 in-app 采购 API,一个带有亚马逊的 in-app 购买 API)。