使用ant导出不同市场的多个apk

时间:2012-07-30 02:44:34

标签: android ant cmd

我的Android应用程序面向20多个市场,每个市场在Manifest.xml中都有几个不同的属性 一个接一个地发布20+ apk非常耗时,我尝试使用Windows批处理文件一键完成发布工作。
现在,我使用教程here提供的解决方案来更改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等中执行它。

2 个答案:

答案 0 :(得分:0)

首先,为什么总是开始新的cmd进程?如果你刚刚在构建脚本中调用了Ant 20x +次,它将在当前构建完成后立即开始构建下一个构建。

其次我会建议你有20x +不同的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”编写带有20x + Ant行的构建脚本,其中xxxxx是构建的适当配置。

答案 1 :(得分:0)

我的最终解决方案:
定义任务:

    <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作为answer,以便我可以在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,...