Android如何通过编程获取所有App Flavor名称及Activity中风味列表
嘿,我明白你的需求——你已经在Gradle里配置了多个Flavor,但目前只能通过
BuildConfig.FLAVOR
拿到当前编译的那个,想要获取所有定义的Flavor列表对吧?下面给你两种靠谱的实现方式:
方法1:通过Gradle生成Flavor数组到BuildConfig #
这是最直接的方式,我们可以在编译时让Gradle把所有Flavor名称注入到
BuildConfig
类中,这样在Activity里就能直接调用。
在你的app模块的
build.gradle
(Groovy示例)中添加以下配置:
android { flavorDimensions "igen" productFlavors { myExamIdea {} examLeaders{} // 注入所有Flavor列表到BuildConfig applicationVariants.all { variant -> // 把所有Flavor名称转成字符串数组格式 def flavorArrayContent = productFlavors.names.collect { "\"$it\"" }.join(",") variant.buildConfigField("String[]", "ALL_FLAVORS", "new String[]{${flavorArrayContent}}")
配置完成后重新编译项目,你会发现
BuildConfig
类里多了一个
ALL_FLAVORS
静态数组。在Activity里直接使用即可:
// 获取所有Flavor列表 String[] allFlavors = BuildConfig.ALL_FLAVORS; // 遍历输出示例 for (String flavor : allFlavors) { Log.d("FlavorList", "Flavor: " + flavor);
方法2:生成字符串资源存储Flavor列表 #
如果你不想修改
BuildConfig
,也可以让Gradle生成一个字符串资源,把所有Flavor名称用逗号分隔存储起来,之后在代码中解析成数组。
同样在app模块的
build.gradle
中添加:
android {
// ... 已有的flavor配置
// 生成包含所有Flavor的字符串资源
applicationVariants.all { variant ->
def allFlavorsStr = productFlavors.names.join(",")
variant.resValue("string", "all_flavors", allFlavorsStr)