1

私の Android アプリは 20 以上の市場を対象としており、それぞれ Manifest.xml にいくつかの異なるプロパティがあります。
20個以上のapkを次々とリリースするのは本当に手間がかかるので、Windowsのバッチファイルを使ってワンクリックでリリースしてみました。
今のところ、Manifest.xml のフィールドを変更するには、こちらのチュートリアルで提供されているソリューションを使用しますが、 antをよく知らないので、非常にハックな方法を使用して、以下のようにバッチ ファイルでジョブを実行します。

start cmd.exe /c "ant config-google-play release_mine"
REM the line below is for waiting for the former task to finish
ping 1.1.1.1 -n 1 -w 90000 > nul
start cmd.exe /c "ant config-eoemarket release_mine"
ping 1.1.1.1 -n 1 -w 90000 > nul
....

これを達成するエレガントな方法はありますか?build.xml でターゲットを編集して ant で実行するなど。

4

2 に答える 2

0

まず、なぜいつも新しい cmd プロセスを開始するのですか? ビルド スクリプトで Ant を 20 回以上呼び出した場合、現在のビルドが終了した直後に次のビルドのビルドが開始されます。

次に、20 倍以上の異なる AndroidManifest.xml ファイルを用意し (ファイルごとにプレフィックスまたはサフィックスを付けて、正確に「AndroidManifest.xml」という名前が付けられないようにする)、各ビルドの前にそれらの名前を AndroidManifest.xml に変更することをお勧めします。 . 次のように、custom_rules.xml Ant ビルド ファイル (build.xml の隣に配置) を使用してこれを行うことができます。

<project name="custom_rules">
  <target name="config-google-play">
    <property name="version" value="google_play" />
  </target>

  <target name="-pre-build">
    <copy tofile="${basedir}/AndroidManifest.xml" overwrite="true">
      <fileset file="${basedir}/AndroidManifest.xml.${version}" />
    </copy>
  </target>
</project>

ここでは、マニフェストの名前を AndroidManifest.xml.xxxxx に変更したと想定しています。apk の実際のビルドが開始される前に呼び出される「-pre-build」ターゲットにも注意してください。

次に、他の「config-」ターゲットを追加し、その値を AndroidManifest.xml の名前を変更したものに設定します。次に、「ant config-xxxxx release」を使用して Ant の 20 行以上のビルド スクリプトを記述します。ここで、xxxxx はビルドの適切な構成です。

于 2013-02-15T10:37:57.080 に答える
0

私の最終的な解決策:<br>タスクを定義する:</p>

    <target name="modify_manifest">
         <property
             name="version.market"
             value="${channel}"/>
        <property
            name="out.final.file"
            location="${out.absolute.dir}/${ant.project.name}_${channel}_${project.version.name}.apk"/>

        <antcalltarget="release"/>
    </target>

次に、ant でループを使用できるように、ここで答えとして ant-contrib*.jar を含めます。次に、以下の新しいタスクを定義します

<target name="deploy" >

    <foreach
        delimiter=","
        list="${market_channels}"
        param="channel"
        target="modify_manifest" >
    </foreach>
</target>

「ant deploy」を使用してタスクを実行します。
market_channels は、次のように ant.property で定義する必要があります。

market_channels=google-play,other,...
于 2013-04-17T02:27:04.137 に答える