【问题标题】:Android: Use different strings for different application flavorsAndroid:为不同的应用程序使用不同的字符串
【发布时间】:2013-07-02 12:31:43
【问题描述】:

我有一个具有 2 种不同风格/变体的 android 应用程序。如何为每种风味设置不同的字符串(例如应用名称、按钮标签等)? 到目前为止,我所做的实际上是有效的,但并不完全符合我的意愿:
我使用 gradle 创建了两种风格。具体来说,我创建了一个 flavor1_res 和一个 flavor2_res 文件夹,并在其中放入了特定于风味的资源。
具体来说,我在每个文件夹下放了一个 strings.xml 文件。每个文件都包含相同的字符串标签,但字符串的值不同。该应用程序可以从命令行构建(例如使用 gradlew assembleFlavor1),但在 Android Studio 中,我的字符串无法识别,并且出现所有这些编译错误。
还有另一种方法吗?如何让 Android Studio 识别这两个 strings.xml 文件? (我已经添加了相应的文件夹作为源文件夹)。

谢谢, 托马斯

【问题讨论】:

    标签: android string gradle android-studio


    【解决方案1】:

    您可以像这样在 build.gradle 文件中声明资源字符串:

    productFlavors {
        devel {
            resValue 'string', 'fancy_name', 'Development App'
        }
        prod {
            resValue 'string', 'fancy_name', 'Production App'
        }
    }
    

    所以现在根据您要构建的风格,“fancy_name”字符串将是“开发应用程序”或“生产应用程序”。我一直用这个。

    【讨论】:

    • 感谢亚历克西斯的回答!我想当我发布这个问题时,这个功能不可用。再次感谢!
    • 你可以使用context.getString(R.string.fancy_name) 来获取它
    • 如何在 AndroidManifest 中使用它?
    • 那些在我们的应用中有 72 种不同语言的人呢?
    【解决方案2】:

    如果我正确理解了这个问题,Android Studio (AS) 无法识别资源文件夹的内容。如果在 build.gradle (app) 你有以下内容:

    productFlavors {
        free {
            applicationIdSuffix ".free"
            versionNameSuffix "-free"
        }
        paid {
            applicationIdSuffix ".paid"
            versionNameSuffix "-paid"
        }
    }
    

    AS 中有一个名为“Build Variants”的窗格,可以在其中选择免费或付费。所以如果你点击free,AS会识别free下的res文件夹是什么。

    【讨论】:

      【解决方案3】:

      好吧,这确实很旧,但无论如何我都会试一试。我认为您可以在定义每个字符串值的主文件夹中放置一个 strings.xml。它们可以为空:

      <string name="myAwesomeString1"></string>
      

      然后 Android Studio 知道该字符串存在,并且当您构建它时,它将从风味文件中获取值。

      【讨论】:

        猜你喜欢
        • 2014-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-13
        • 2015-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多