2017-01-19 66 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

但是,還有另一種方式。做同樣的事情,但對於風味的應用啓動器圖標。祝你好運。