我的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等中执行它。
答案 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,...