buildConfigField,resValue和manifestPlaceholders之间有什么区别?

Jav*_*ean 9 android build.gradle android-gradle-plugin

我理解它们是如何使用的,但是想知道它们何时被使用.对于在不同环境中使用单独的KEY的情况,我们可以使用上面提到的所有三个.所以,我很想知道为什么有三件事要做同样的事情,如果它们是针对不同的用法.谢谢!

在此输入图像描述

kco*_*ock 20

使用buildConfigField将在应用程序生成的BuildConfig类中生成实际的Java常量.所以对于你的例子,你会有这样的东西:

public static class BuildConfig {
    public static final String BASE_URL = "xxxxxxxxxx";
}
Run Code Online (Sandbox Code Playgroud)

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

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

<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" />
Run Code Online (Sandbox Code Playgroud)

对于记录,applicationId会自动添加为清单占位符,因此不需要自己定义,但这只是一个示例.

基本上,它取决于您需要它的位置.如果需要XML资源(布局,菜单等),resValue那就是你想要的.如果需要直接从Java代码访问它,那就可以buildConfigField了.对于清单中的替换,manifestPlaceholders是你想要的.