gpt4 book ai didi

android - 使用 CSV/TXT 文件中的名称列表(带有属性)动态生成 productFlavors 和 sourceSets

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:08:11 33 4
gpt4 key购买 nike

这个问题是my other question 的延续,我想进一步改进。

我可以使用以下代码在 sourceSets 下对风格(具有通用配置)进行分组:

(从上面链接问题中的天才那里得到的)

import com.android.build.gradle.api.AndroidSourceSet
android {
sourceSets {
[flavor2, flavor4].each { AndroidSourceSet ss ->
ss.assets.srcDirs = ['repo-assets/flavor2']
ss.res.srcDirs = ['repo-res/flavor2']
}
}
}

现在,我想知道列表 [flavor2, flavor4] 是否可以从以下任何一个中提取:

  • 一个 XML 文件,我可以对其进行迭代以获得所有口味(我会把它放在那里)
  • 我可以迭代和获取值的 CSV 文件。
  • 一个自定义类,我可以将其写入单独的文件并从类中的静态成员获取数据。

除了 flavor 名称外,我还打算将以下内容存储在外部源(以上之一)中:

  • 应用程序 ID(我将其提取到 productFlavors)
  • 广告单元 ID(每种口味两个)
  • 一些其他自定义值,如类别等。

目的:我想编写一段通用代码来迭代和动态创建 productFlavorssourceSets。我已将 sourceSets 概括为将近 90%,现在一个 block 就足以满足所有口味。

现在看起来像这样:

sourceSets {
[flavor1, flavor2, flavor3 ...].each { AndroidSourceSet ss ->
ss.assets.srcDirs = ['repo-assets/' + ss.name.split('_')[0]]
ss.res.srcDirs = ['repo-mipmap/' + ss.name.split('_')[0] , 'repo-strings/' + ss.name]
}
}

还想对 productFlavors 做同样的事情,如上所示。

STUCK AT:从外部源获取上面代码中的列表 [flavor2, flavor4](以及上面列出的每个 flavor 的一些额外字段)。

我看到类似的方法

productFlavors.add()
productFlavors.addAll()

但我不太确定如何使用这些。由于方法可用,我确信可以做我想做的事。

有没有人做过这个并且有一些指示?

最佳答案

我终于让它以这种方式工作了:

build.gradle 中创建了一个自定义类 MyFlavor 并将 csv 文件中的每种口味添加到 MyFlavor< 的 ArrayList/

class MyFlavor {
public String flavorname;
public String basename;
public String appid;
public String bannerid;
public String interstitialid;
public String category;
}

def ArrayList<MyFlavor> myFlavors = new ArrayList<>();

new File('app/flavors.csv').eachLine {
String[] values = "$it".split(',');
MyFlavor f = new MyFlavor();
f.flavorname = values[0];
f.basename = values[0].split('_')[0];
f.appid = values[1];
f.bannerid = values[2];
f.interstitialid = values[3];
if(values[0].contains('_')) f.category= "state"
else f.category = "country";
myFlavors.add(f);
}

然后遍历 ArrayList 以动态创建 productFlavorssourceSets,如下所示:

productFlavors {
myFlavors.each { MyFlavor f ->
"$f.flavorname" {
applicationId = "$f.appid"
buildConfigField 'String', 'BANNER_ID', "\"" + "$f.bannerid" + "\""
buildConfigField 'String', 'INTERSTITIAL_ID', "\"" + "$f.interstitialid" + "\""
buildConfigField 'String', 'CATEGORY', "\"" + "$f.category" + "\""
}
}
}
sourceSets {
myFlavors.each { MyFlavor f ->
"$f.flavorname" {
assets.srcDirs = ['repo-assets/' + "$f.basename"]
res.srcDirs = ['repo-mipmap/' + "$f.basename" , 'repo-strings/' + "$f.flavorname"]
}

}
}

希望这对某人有帮助。我成功地摆脱了 1000 行代码(因为我有很多风格)并将其减少到您在此处看到的这 10 行代码。

关于android - 使用 CSV/TXT 文件中的名称列表(带有属性)动态生成 productFlavors 和 sourceSets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36291362/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com