1

我的 Android 应用程序面向 20 多个市场,每个市场在 Manifest.xml 中都有几个不同的属性。
一个接一个地发布20+个apk真的很费时间,我尝试使用windows批处理文件一键完成发布工作。
目前,我使用此处教程提供的解决方案来更改 Manifest.xml 中的字段,但我不太了解ant,所以我使用非常 hack 的方法在批处理文件中完成这项工作,如下所示:

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(s) 重命名为的任何值。然后用“ant config-xxxxx release”用 20x+ 行 Ant 编写构建脚本,其中 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-contrib*.jar 作为答案,以便我可以在 ant 中使用循环。然后在下面定义一个新任务

<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 回答