115

私は、フレーバー1とフレーバー2の2つのビルドフレーバーを持っます

アプリケーションの名前を、たとえば、フレーバー 1 用にビルドする場合は「 AppFlavor1」、フレーバー 2 用にビルドする場合は「AppFlavor2 」とします。

変えたい活動のタイトルではありません。電話メニューなどに表示されるアプリ名を変更したい。

フレーバーのさまざまなパラメーターを設定できますが、build.gradleアプリのラベルではないようです。また、変数に基づいてプログラムでアプリのラベルを変更することもできません。

それで、人々はこれをどのように処理しますか?

4

9 に答える 9

32

スクリプトを使用してメインの strings.xml を変更し、ソース管理を台無しにする危険を冒す代わりに、Android Gradle ビルドの標準的なマージ動作に頼ってみませんか?

私のbuild.gradle含む

sourceSets {
    main {
        manifest.srcFile 'AndroidManifest.xml'
        java.srcDirs = ['src']
        resources.srcDirs = ['src']
        aidl.srcDirs = ['src']
        renderscript.srcDirs = ['src']
        res.srcDirs = ['res']
        assets.srcDirs = ['assets']
    }

    release {
        res.srcDir 'variants/release/res'
    }

    debug {
        res.srcDir 'variants/debug/res'
    }
}

これで、.app_nameで文字列を定義できるようになりましたvariants/[release|debug]/res/strings.xml。そして、私が変えたいと思う他の何かも!

于 2013-11-15T08:55:10.710 に答える
8

各フレーバーに文字列リソース ファイルを追加し、それらのリソース ファイルを使用してアプリ名を変更できます。たとえば、私のアプリの 1 つでは、無料版と有料版があります。それらの名前を「Lite」と「Pro」に変更するために、meta_data.xmlファイルを作成し、app_nameその XML に値を追加してから削除しましたstrings.xml。次に、app/src各フレーバーのフォルダーを作成します (構造の例については以下を参照してください)。これらのディレクトリ内に、res/values/<string resource file name>. ビルドすると、このファイルがビルドにコピーされ、アプリの名前が変更されます。

ファイル構造:

app/src
   /pro/res/values/meta_data.xml
   /lite/res/values/meta_data.xml
于 2014-12-15T00:54:49.253 に答える
7

私が実際に使用するもう 1 つのオプションは、各アプリケーションのマニフェストを変更することです。リソース フォルダーをコピーする代わりに、フレーバーごとにマニフェストを作成できます。

sourceSets {
  main {
 }

  release {
    manifest.srcFile 'src/release/AndroidManifest.xml'
 }

  debug {
    manifest.srcFile 'src/debug/AndroidManifest.xml'
 }
}

プリンシパルとなる src main にプリンシパル AndroidManifest が必要です。次に、(src/release/AndroidManifest.xml) のように、フレーバーごとにいくつかのオプションのみを使用してマニフェストを定義できます。

<manifest package="com.application.yourapp">
  <application android:icon="@drawable/ic_launcher">
  </application>
</manifest>

デバッグの場合、AndroidManifest (src/debug/AndroidManifest.xml):

<manifest package="com.application.yourapp">
  <application android:icon="@drawable/ic_launcher2">
  </application>
</manifest>

コンパイラはマニフェストのマージを行い、各フレーバーのアイコンを作成できます。

于 2015-09-16T18:03:18.763 に答える
2

まず、次の質問に答えてください。「ユーザーはアプリケーションの両方のフレーバーを同じデバイスにインストールできますか?」

ソースにパッチを当てる Python スクリプトを使用します。いくつかの再利用可能な機能と、もちろん、この特定のプロジェクトでパッチを適用する必要がある知識が含まれています。したがって、スクリプトはアプリケーション固有です。

多くのパッチ適用があり、パッチ適用のためのデータは Python ディクショナリ (アプリケーション パッケージ名を含む。ところで、それらは Java パッケージ名とは異なります) に保持され、フレーバーごとに 1 つのディクショナリです。

l10nに関しては、文字列は他の文字列を指す場合があります。たとえば、私のコードでは次のようになります。

<string name="app_name">@string/x_app_name_xyz</string>

<string name="x_app_name_default">My Application</string>
<string name="x_app_name_xyz">My App</string>
于 2013-11-07T08:32:11.117 に答える