如何在Android清单中连接字符串资源并构建变量

时间:2019-02-27 17:32:01

标签: android android-gradle concatenation build.gradle android-manifest

前体:我想本地化应用名称(使用字符串资源)
,同时从gradle文件中添加构建类型后缀(“ DEBUG”)。

在这里,我尝试将字符串资源“ app_name”和gradle变量“ AppNameSuffix”连接起来

  

期望的应用名称:
  用于产品风味“ 全部”-“我的应用程序调试”
  用于产品口味“ 中国”-“我的中文应用程序调试”
  以及后继的构建类型后缀为“ RELEASE”和“ CANARY”


build.gradle:

buildTypes {
    debug {
        manifestPlaceholders = [AppNameSuffix: "DEBUG"]
        ...
    }
    release{
        manifestPlaceholders = [AppNameSuffix: "RELEASE"]
        ...
    }
    canary{
        manifestPlaceholders = [AppNameSuffix: "CANARY"]
    }
}
productFlavors {
    china {
        applicationId "com.myapplication.china"
    }
    all {
        //default
        applicationId "com.myapplication.all"
    }
}

清单:

<application
    ...
    android:label="@{@string/app_name(${AppNameSuffix})}">
    ...
</application>

评估gradle变量时出现“ $”符号错误


main / res / string.xml:

<string name="app_name">My application %s</string>

china / res / string.xml:

<string name="app_name">My Chinese application %s</string>

  

参考文献:

     

1 个答案:

答案 0 :(得分:0)

在gradle文件中,使用小写字母,以便资源名称有效:

buildTypes {
    debug {
        manifestPlaceholders = [AppNameSuffix: "_debug"]
        ...
    }
    release{
        manifestPlaceholders = [AppNameSuffix: "_release"]
        ...
    }
    canary{
        manifestPlaceholders = [AppNameSuffix: "_canary"]
    }
}

修改清单:需要删除括号,如果没有的话,可以使用tools:replace替换:

<application
    ...
    android:label="@string/app_name${AppNameSuffix}"
    tools:replace="android:label"
    ...
</application>

然后您需要添加与后缀匹配的字符串资源:

<string name="app_name">My application</string>
<string name="app_name_debug">My application DEBUG</string>
<string name="app_name_release">My application RELEASE</string>
<string name="app_name_canary">My application CANARY</string>

您还可以使用口味,并将特定的strings.xml文件放入与口味匹配的文件夹中。