如何在 Retrofit for Android 中外部化 Base URL

ipo*_*fly 3 android retrofit

我们现在有一个使用 Retrofit 运行良好的 Android 应用程序。我们正在尝试自动化构建以进行测试和生产发布,以减少人为错误的机会(即开发人员在为生产构建时忘记将基本 URL 指向生产......等)

我注意到 Retrofit 的 Base URL 是在类文件中定义的。有没有什么方法可以让我们将其配置在属性文件或 xml 中,以便我们可以使用 Gradle 脚本来选择要包含在构建中的正确文件?

谢谢

jep*_*bio 10

您可以在 buildTypes 中定义一个常量:

buildTypes {
    debug {
        buildConfigField "String", "API_URL", "\"https://url/pre/\""
    }
    release {
        buildConfigField "String", "API_URL", "\"https://url/pro/\""
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在改造构建器中使用它:

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl(BuildConfig.API_URL)
    .build();
Run Code Online (Sandbox Code Playgroud)

请注意,如果您有不同的模块,则在每个模块中都定义了 BuildConfig。对于这种情况,我在 app 模块中定义了 buildTypes,并将 BuildConfig.API_URL 作为参数传递给具有改造构建器的模块。