繁体   English   中英

如何在 build.gradle 中获取资源值?

[英]How to get a resource value in build.gradle?

resValue方法(或任何被调用的方法)允许您在buildTypesproductFlavors设置资源值。 是否有相应的方法来获取resValue设置的资源值?

看起来productFlavorsbuildTypes之前被评估,所以在resValue设置的buildTypes优先。 我想在调试版本中将“Debug”附加到应用程序名称,但我需要获取在产品风格中设置的值才能附加到它。

编辑:我尝试了 Marcin Koziński 的使用变量的建议,但在任何构建类型之前评估所有产品风味。 因此,这不起作用:

android {
    String appName = ""

    productFlavors {
        Foo {
            appName = "Foo"
        }

        Bar {
            appName = "Bar"
        }
    }

    buildTypes {
        release {
            resValue "string", "app_name", appName 
        }

        debug {
            resValue "string", "app_name", appName + " Debug"
        }
    }
}

buildTypesappName始终具有最后一个产品风味的值。 因此,在此示例中,所有构建都接收名称"Bar""Bar Debug"

基本上,我需要一个类似于applicationIdSuffixresValueSuffix 显然不存在这样的动物。 com.android.application插件是否公开了我可以用来实现这一目标的任何内容?

如果您只是想设置 App Label(或其他清单值),您可以使用manifest placeholders解决这个问题。

android {

    productFlavors {
        Foo {
             applicationId "com.myexample.foo"
             manifestPlaceholders.appName = "Foo"
        }

        Bar {
             applicationId "com.myexample.bar"
             manifestPlaceholders.appName = "Bar"
        }
    }

    buildTypes {
        release {
            manifestPlaceholders.appNameSuffix =""
        }

        debug {
            manifestPlaceholders.appNameSuffix =".Debug"
            applicationIdSuffix ".debug"
        }
    }
}

然后在您的 Android 清单中,您只需使用两个占位符作为您的应用程序名称(或其他值)

 <application
        android:label="${appName}${appNameSuffix}"
        ...
 </application>

这允许您在单个设备上并排安装所有 4 个变体,并在应用程序抽屉/启动器中为它们指定不同的名称。

编辑11/22/2019

根据@javaxian 的反馈更新了占位符值的设置方式

您可以像这样检查构建变体

在 gradle 中定义值

buildTypes {
    debug{
        buildConfigField "String", "Your_string_key", '"yourkeyvalue"'
        buildConfigField "String", "SOCKET_URL", '"some text"'
        buildConfigField "Boolean", "LOG", 'true'
    }
    release {
        buildConfigField "String", "Your_string_key", '"release text"'
        buildConfigField "String", "SOCKET_URL", '"release text"'
        buildConfigField "Boolean", "LOG", 'false'

    }
}

并使用构建变体访问这些值:

 if(!BuildConfig.LOG)
      // do something with the boolean value

或者

view.setText(BuildConfig.yourkeyvalue);

要在调试版本中拥有资源的替代版本,您可以使用调试源集。

strings.xml可以在以下路径src/main/res/values ,这意味着它在主源集中。 如果您创建一个新目录src/debug/res/values您可以在其中放置一个新的strings.xml文件,其中包含应在调试版本中覆盖的值。 例如:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">My Application Debug</string>
</resources>

这将替换主文件中app_name任何值。 您不必复制此处的所有字符串 - 此处未包含的字符串只是从主文件中获取的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM