2011-09-26 8 views
12

複数のお客様に配信する必要があるAndroidアプリケーションがあります。 カスタマーごとに、機能とURLを指定するさまざまなグラフィックスと設定XMLファイルがあります。複数のお客様向けのAndroidビルド設定

ビルド時に、アプリケーションをビルドする顧客を指定できる必要があります。次に、指定されたクライアントに適したリソース(画像や実行時の設定など)をアプリに組み込む必要があります。

プロジェクトはMavenでビルドされています。

アイデア?

答えて

14

私は、アンドロイドメイヴンプラグインのmavenプロファイルと 'renameManifestPackage'と 'resourceOverlayDirectory'プロパティを使用してしまいました。

デフォルトのres/dirは、すべての顧客に固有の 'resourceOverlayDirectory'によって上書きされます。

大変効果があります。

<!-- profile for zurich --> 
<profile> 
    <id>zurich</id> 
    <properties> 
    <customer>zurich</customer> 
    <customerPackage>zurich.com</customerPackage> 
    <customerResources>customers/${customer}/res</customerResources> 
    <customerApkName>${customer}-${project.artifactId}</customerApkName> 
    </properties> 
</profile> 

とビルドで

は私が持っている:

<build> 
    <sourceDirectory>src</sourceDirectory> 

    <!-- the name of the generated apk and jar --> 
    <finalName>${customerApkName}-${project.version}</finalName> 

    <pluginManagement> 

    <plugins> 

    <!-- customer specific manifest and package --> 
    <plugin> 
    <groupId>com.jayway.maven.plugins.android.generation2</groupId> 
    <artifactId>maven-android-plugin</artifactId> 
    <configuration> 
     <renameManifestPackage>${customerPackage}</renameManifestPackage> 
     <resourceOverlayDirectory>${customerResources}</resourceOverlayDirectory> 
    </configuration> 
    </plugin> 

    </plugins> 

    </pluginManagement> 
+0

これは実際の 'res'フォルダにコピーされますか、それとも' target'フォルダにコピーされますか? –

+0

同じデバイスに2つのアプリケーションをインストールしようとすると問題がありますか? –

+0

@EugenMartynovいいえ、パッケージ名は異なります。 – peceps

2

これはAndroidプロジェクトではどれくらいうまくサポートされているのかわかりませんが、一般的な方法は各顧客のプロファイルを定義することです。各プロファイルで、関連するリソースディレクトリを指定した顧客のもので上書きする必要があります。

+0

はい、それは通常の方法ですが、Androidのリソースは静的にリンクされているので、それは簡単なことを行うことはできません。 – peceps

+1

次に、 'リンク'ステップ全体をオーバーライドします。最終的には、たくさんのファイルでaaptを呼び出すだけなので、可能なはずです。そうでなければ、EclipseやAntのライブラリプロジェクトはいつもあります。彼らがAntでそれをどうやって行っているかを確認してください。 –

+0

私はMavenプロファイルを使い終わった。ありがとう。 – peceps

関連する問題