1

私はEclipseでAndroidアプリを構築しており、同じコードベースに基づいた2つの同様のアプリ、「ロンドン」のものと「英国」のものがあります。各アプリをビルドするには、メイン パッケージの名前を変更し、Application クラスの static int を変更するだけです。アプリは、この int の値を使用して、適切な UI を表示したり、ユーザーの動作を制限したりします。

各アプリに 1 つずつ、2 つのアイコン ファイルがあります。

  • res/drawable-hdpi/icon_london.png
  • res/drawable-hdpi/icon_uk.png

ある種のプロジェクト構成設定に応じて、アプリケーションとアクティビティに正しいアイコン ファイルを条件付きで使用する方法はありますか? そうしないと、コードベースが変更されるたびにマニフェストを変更する必要があるため、プロジェクトのメンテナンスが増加します。

<application
    android:icon="@drawable/icon_london"
    ...
    >

    <activity
        android:name="com.company.MainActivity" 
        android:logo="@drawable/icon_london"
        >
    </activity>

...など、すべてのアクティビティについて。

4

1 に答える 1

1

同様の問題があり、アプリを構築するためのカスタム Ant スクリプトを構築することになりました。マクロまたは正規表現を実行して、1 つまたは別のリソースを割り当てることができます。

編集:

まず、build.xml をプロジェクトに追加します。

コマンド プロンプトを開き、プロジェクトのディレクトリに移動します。

android update project --path

次に、次のように、既存の build.xml をオーバーライドできます。

注: この Ant スクリプトは単なる例であり、テストしていません。

<?xml version="1.0" encoding="UTF-8"?>
<project name="Example" default="help">
    <property file="local.properties" />
    <property file="ant.properties" />

    <loadproperties srcFile="project.properties" />

    <!-- quick check on sdk.dir -->
    <fail
            message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through an env var"
            unless="sdk.dir"/>

    <!-- IMPORT ANT?S BUILD.XML -->
    <import file="${sdk.dir}/tools/ant/build.xml" />

    <property name="app.icon"       value="${icon}" />
    <property name="icon.file"      location="res/drawable/icon.png" />

    <target name="test-release">
      <antcall target="test-pre-release" />
      <antcall target="release" />
    </target>

    <target name="test-pre-release">
      <copy file="${app.icon}" tofile="${icon.file}" overwrite="true"/>
    </target>

</project>

次に、カスタム アイコンを使用してこのプロジェクトをビルドするには、コマンド プロンプトを開き、プロジェクト ディレクトリに移動します。

CALL ant -f build.xml test-release -Dicon=path/to/your/icon.png

前述のとおり、これは非常に基本的な例です。優れたスクリプトを作成するには、Ant の構文を少し学習する必要がありますが、難しくはありません。

于 2012-07-21T14:38:50.273 に答える