我了解“如何”使用它们,但想知道“何时”使用它们。
对于在不同环境中使用单独的KEY的情况,我们可以使用上述所有三个。因此,我很想知道为什么有三件事要做同一件事,以及它们是否有不同的用途。谢谢!

android - buildConfigField,resValue和manifestPlaceholders有什么区别?-LMLPHP

最佳答案

使用buildConfigField将在您应用的生成的BuildConfig类中生成实际的Java常量。因此,对于您的示例,您将获得以下内容:

public static class BuildConfig {
    public static final String BASE_URL = "xxxxxxxxxx";
}

使用resValue将生成您在应用程序的res(资源)目录中指定的类型的资源。因此,对于字符串,您可以使用@string/base_urlgetResources().getString(R.string.base_url)通过XML引用它。

使用manifestPlaceholders允许您在AndroidManifest.xml中添加替换项。因此,例如,GCM要求您具有名称设置为<uses-permission>X.permission.C2D_MESSAGE标记,其中X是您的应用程序ID。因此,如果您具有使用不同应用程序ID的多个构建版本,则可以使用manifestPlaceholders标记,然后在AndroidManifest.xml中使用它,并用正确的值替换它,例如:
<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" />

作为记录,applicationId会自动添加为 list 占位符,因此无需自己定义它,但这仅是示例。

基本上,这取决于您需要的位置。如果XML资源(布局,菜单等)需要它,则resValue是您想要的。如果需要直接从Java代码访问它,buildConfigField将解决问题。对于 list 中的替换,manifestPlaceholders是您想要的。

关于android - buildConfigField,resValue和manifestPlaceholders有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42725299/

10-10 08:24