如何向可以从 java 代码中读取的 productFlavors 添加内容

How can I add something to the productFlavors which I can read from java code

我试图构建多个具有不同频道名称的 apk,我需要在我的 java 代码中读取频道名称。所以我正在尝试使用 productFlavors,目前我正在尝试做的是将以下代码添加到我的 build.gradle

 productFlavors {
    GooglePlay {
    }

    Amazon {
    }
}

sourceSets {
    GooglePlay {
        assets.srcDirs = ['assets-GooglePlay', 'assets']
    }

    Amazon {
        assets.srcDirs = ['assets-Amazon', 'assets']
    }
}

我还为两个资产文件夹 assets-GooglePlayassets-Amazon 添加了一个文件名 channelName。我希望生成的 apk 将包含此 channelName 文件,但事实是它不存在。那么我该如何处理这个问题呢?谢谢

我目前正在使用 Gradle 2.2.1

您想要实现的目标可以通过拥有 2 个单独的字符串文件来实现,每个文件对应一种口味。

所以目前您可能在 src/main/res/values 中有一个名为 strings.xml 的文件。假设此文件包含您想要用于 GooglePlay 的字符串,那么您需要做的是在 src/Amazon/res/values 中创建另一个文件,它将包含用于 Amazon 的字符串。

完成此操作后,您可以通过从 activity.

内部调用 getResources().getString(R.string.STRING_NAME) 从代码访问该字符串

在你每个productFlavor中添加resValue也是一个巧妙的方法

找到更简单的解决方案

productFlavors {
    GooglePlay {
        buildConfigField "String", "ChannelName", "\"GooglePlay\""
    }
    Amazon {
        buildConfigField "String", "ChannelName", "\"Amazon \""
    }
}

然后通过BuildConfig.ChannelName

访问频道名称