2017-01-19 24 views
1

在我的应用程序中,我有很多不同的产品风味,实际上大约有10种风味。 它们的做法是这样的:eng_testDebug,eng_prodDebug,eng_testRelease,eng_prodRelease e.t.c其他语言。从strings.xml获取app_name以获取gradle中的当前产品风格

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

现在我发现了一个解决方案来解析主sourceSet中的string.xml,并在gradle文件中使用manifestPlaceHolders构建我的应用程序名称。但它只适用于主要风味。 这里是获得默认的strings.xml APP_NAME我用的是代码:)

def getEditedAppName() { 
    if (getCurrentFlavor().contains("test")) { 
     return getAppName() + "(Test)"; 
    } else { 
     return getAppName(); 
    } 
} 

getCurrentFlavor(返回我使用的香精名称:

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

在这里,我修改,添加“测试” in:汇编任务。

基本上,问题是我如何获得其他sourceSet文件取决于我目前的建筑风格,所以我可以分析风味的app_name?

不幸的是,在gradle文件中为每种风味挑战app_name字符串对我来说不是一个有效的选项。

回答

0

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

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

编辑基于评论:

我得到了这两个口味:

productFlavors { 
    appFlavorA{ 
     applicationId "de.test.appaA" 
    } 
    appFlavorB{ 
     applicationId "de.test.appaB" 
    } 
} 

现在我得到了以下结构的strings.xml

ProjctRoot/app/src/main/res/values/strings.xml 
ProjctRoot/app/src/appFlavorA/res/values/strings.xml 
ProjctRoot/app/src/appFlavorB/res/values/strings.xml 

这将导致使用相应的strings.xml作为flav orflavor

+0

感谢您的回答,但我已经有每个我的口味和app_name overidden每个文件夹。但现在我无法找到一种方法来解析gradle中的这些超文件文件,以获取每个flavor的app_name。 –

+0

通常这是自动完成的,如果你正确配置gradle – glethien

+0

更新我的回答 – glethien

0

如果我理解正确的问题,您希望根据您的产品口味有不同的应用程序名称。

在你gradle这个文件:

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

假设你有这样的样本项,只需将包含每个口味的不同APP_NAME一个strings.xml档案。

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

我不认为你可以手动做到这一点(在运行时更改应用名称),在这个Stackoverflow线程中突出显示。

Android : Change App Label Programatically

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