我理解它们是如何被使用的,但是想知道它们何时被使用。 对于在不同环境中使用单独的KEY的情况,我们可以使用上面提到的所有三个。所以,我很想知道为什么有三件事要做同样的事情,如果它们是针对不同的用法。谢谢!
答案 0 :(得分:17)
使用buildConfigField
将在应用生成的BuildConfig
课程中生成实际的Java常量。所以对于你的例子,你会有这样的东西:
public static class BuildConfig {
public static final String BASE_URL = "xxxxxxxxxx";
}
使用resValue
将生成您在应用的res
(资源)目录中指定的类型的资源。因此,对于字符串,您可以使用@string/base_url
或getResources().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
会自动添加为明字占位符,因此无需自行定义,但这仅仅是一个示例。
基本上,这取决于你需要它的位置。如果XML资源(布局,菜单等)需要,resValue
就是您想要的。如果需要直接从Java代码访问它,buildConfigField
就可以了。对于清单中的替换,manifestPlaceholders
就是您想要的。