2017-01-19 4 views
1

私のアプリでは、実際には約10種類の異なる製品の味があります。 彼らのやり方は次のようなものです:eng_testDebug、eng_prodDebug、eng_testRelease、eng_prod他の言語についてはe.t.cをお読みください。現在の製品の味のためにstrings.xmlからapp_nameを取得する

これでビルド名のテストでビルドするためのアプリ名に " - テスト"を追加する作業があります。

今、main sourceSetからstring.xmlを解析し、gradestファイル内のmanifestPlaceHoldersを使用してアプリケーション名をビルドするソリューションが見つかりました。しかし、それは主な味のためにのみ動作します。

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("\"", ""); 
} 

そしてここで私は「テスト」を追加するように変更:

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

getCurrentFlavor()私返しフレーバー名が使用ここ は、私が使用していますデフォルトのstrings.xml APP_NAMEを取得するためのコードですin:組み立て作業。

基本的には、現在の建物の風味に応じて他のソースセットファイルを取得することができますので、風味のapp_nameを解析できますか?

残念ながら、gradleファイルの各フレーバのapp_name文字列を無視することは、私にとっては有効なオプションではありません。

答えて

0

それぞれのフレーバに対して、srcフォルダのフレーバのような名前のフォルダを作成できます。メインフォルダも表示されます。これらのフレーバーフォルダでは、resフォルダを作成し、追加のリソースファイルを上書きまたは追加することができます。 ここでstrings.xmlを作成し、アプリケーション名とdrawableなどを変更することができます。

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

編集コメントに基づいて:

私はこれらの2種類だ:今

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 

この意志のために、以下の構造flavに対応するstrings.xmlを使用しますorflavor

+0

答えてくれてありがとうございますが、私はすでにそれぞれのフレーバーとapp_nameのそれぞれにフォルダがあります。しかし、今では、各味のapp_nameを取得するために、これらの無効なファイルをgradleから解析する方法を見つけることができません。 –

+0

これは通常、gradle corectlyを設定すると自動的に行われます – glethien

+0

私の回答が更新されました – glethien

0

私が質問を正しく理解していれば、あなたの製品の味に基づいて異なるアプリ名を付けたいと思っています。

だけの味ごとに異なるAPP_NAMEが含まれているのstrings.xmlファイルを配置し、あなたがこのサンプルエントリを持っていると仮定すると
android { 
    productFlavors { 
      stagingone{ 
      } 
      stagingtwo{ 
      } 
    } 
} 

:あなたのGradleファイルで

のsrc/stagingone/RES /値/のstrings.xml のsrc/stagingtwo/RES /値/のstrings.xml

私はとしては、手動、(実行時に変更アプリ名)があることを行うことができるとは思いませんこのStackoverflowスレッドで強調表示されます。

Android : Change App Label Programatically

しかし、別の方法があります。それは同じですが、フレーバー用のアプリランチャーアイコン用です。がんばろう。

関連する問題