从strings.xml获取app_name以获取gradle中的当前产品风味

时间:2017-01-19 12:51:58

标签: android gradle android-gradle

在我的应用中,我有很多不同的产品口味,实际上大约有10种。 它们的完成方式如下:eng_testDebug,eng_prodDebug,eng_testRelease,eng_prodRelease e.t.c用于其他语言。

所以现在我有一个任务是在构建名称中使用test添加“ - Test”到应用程序名称。

现在我找到了一个从主sourceSet解析string.xml并使用gradle文件中的manifestPlaceHolders构建我的应用名称的解决方案。但它只适用于主要风味。 这是一个获取我正在使用的默认strings.xml app_name的代码:

@Configuration
@EnableMongoAuditing
@EnableMongoRepositories(basePackages = { BASE_PACKAGE })
public class MongoConfiguration extends AbstractMongoConfiguration {

    public static final String BASE_PACKAGE = "package.with.aggregates";

    @Value("${spring.data.mongodb.uri}")
    private String mongoUri;

    @Value("${spring.data.mongodb.database}")
    private String databaseName;

    @Override
    protected String getDatabaseName() {
        return databaseName;
    }

    @Override
    public Mongo mongo() throws Exception {
        return new MongoClient(new MongoClientURI(mongoUri));
    }

    // Here you must add converters to Joda datetypes. In my solution is ZonedDateTime
    @Override
    public CustomConversions customConversions() {
        List<Converter<?, ?>> converterList = new ArrayList<>();
        converterList.add(new DateToZonedDateTimeConverter());
        converterList.add(new ZonedDateTimeToDateConverter());
        return new CustomConversions(converterList);
    }

    @Override
    protected String getMappingBasePackage() {
        return BASE_PACKAGE;
    }
}

在这里我修改它以添加“测试”:

def getAppName() {
    def stringsFile = android.sourceSets.main.res.sourceFiles.find { it.name.equals 'strings.xml' }
    String s = new XmlParser().parse(stringsFile).string.find { it.@name.equals 'app_name' }.text();
    return s.replaceAll("\"", "");
}

getCurrentFlavor()返回一个使用的名称:汇编任务。

基本上,问题是如何根据我当前的建筑风格获取其他sourceSet文件,以便我可以解析f​​lavor的app_name?

不幸的是,为gradle文件中的每个flavor定义app_name字符串对我来说不是一个有效的选项。

2 个答案:

答案 0 :(得分:0)

对于每种风味,您可以在src文件夹中创建一个名为类似风味的文件夹。在那里你还应该看到你的主文件夹。在这些flavor文件夹中,您可以创建res文件夹并覆盖或添加其他资源文件。 在这里,您可以创建strings.xml并更改应用程序名称以及drawable等等。

http://ptrprograms.blogspot.de/2014/08/build-variations-using-gradle-and.html

根据评论进行编辑:

我有两种口味:

a

现在我为strings.xml

获得了以下结构
ab(Xs) :-
    abs(a,Xs).

这将导致使用flavorflavor

的相应strings.xml

答案 1 :(得分:0)

如果我正确理解了这个问题,您希望根据您的产品口味使用不同的应用名称。

在您的gradle文件中:

android {
     productFlavors {
          stagingone{
          }
          stagingtwo{
          }
     }
}

假设您有此样本条目,只需放置一个strings.xml文件,其中包含针对每种风格的不同app_name。

的src / stagingone / RES /值/ strings.xml中 SRC / stagingtwo / RES /值/ strings.xml中

我不认为您可以手动执行此操作(在运行时更改应用程序名称),如此Stackoverflow线程中所示。

Android : Change App Label Programatically

但是,还有另一种方式。这样做,但对于风味的应用程序启动器图标。祝好运。