使用 Ant 构建已签名和未签名的版本
Posted
技术标签:
【中文标题】使用 Ant 构建已签名和未签名的版本【英文标题】:Building both signed and unsigned releases with Ant 【发布时间】:2012-02-11 19:46:17 【问题描述】:我在 android Market 上发布了一个 Android 应用。我只需键入ant release
即可准备发布版本。我配置了一个密钥库,以便我可以一步构建最终签名、混淆、压缩对齐的市场就绪 APK。除了将它们指向我的密钥库之外,我没有修改任何 build.xml
文件。
现在,我也需要在亚马逊商店发布该应用程序。这需要我生成一个未签名的版本。作为如上所述构建正常发布版本的过程的一部分,MyApp-release-unsigned.apk
文件在bin
目录中生成。这看起来很有希望,除了这个文件的时间戳早于同样产生的-unaligned.apk
变体。这表明-unsigned.apk
尚未压缩对齐,因此尚未准备好发布。
我需要对构建过程进行哪些修改,才能使用单个命令生成(未签名、混淆、压缩对齐)Amazon-ready APK?
【问题讨论】:
【参考方案1】:首先,查看我的 build.xml 中的 echo 语句,您是对的 - 未签名的包未对齐。
假设您使用的是最新的 SDK,那么我修改了 build.xml 以制作一个额外的文件 (projectname-release-unsigned-aligned.apk),如下所示:
通过在 cmets 之间添加行来覆盖 -set-release-mode 目标
<target name="-set-release-mode" depends="-set-mode-check">
<property name="out.packaged.file" location="$out.absolute.dir/$ant.project.name-release-unsigned.apk" />
<!-- NEW PROPERTY FOR UNSIGNED ALIGNED FILE -->
<property name="out.unsignedaligned.file" location="$out.absolute.dir/$ant.project.name-release-unsigned-aligned.apk" />
<!-- NEW PROPERTY FOR UNSIGNED ALIGNED FILE END -->
然后将 NEW zip cmets 之间的行添加到发布目标
<!-- Zip aligns the APK -->
<zipalign-helper in.package="$out.unaligned.file"out.package="$out.final.file" />
<!-- NEW Zip aligns the unsigned APK -->
<zipalign-helper in.package="$out.packaged.file" out.package="$out.unsignedaligned.file" />
<!-- NEW Zip aligns the unsigned APK END -->
这应该会给你额外的未签名和对齐的文件。我没有测试生成的 APK,但它看起来很容易更改
【讨论】:
您建议的更改效果非常好,谢谢。以您的回答为灵感,我最终只修改了发布目标(而不是 -set-release-mode 目标)以完全删除签名步骤。 (我的 Amazon 构建和常规 Android Market 构建有一个单独的 build.xml。) 你能发布整个 build.xml 文件吗?我有一个名为common
的库项目,它被引用并且我收到此错误:BUILD FAILED /srv/android-sdk-linux_x86/tools/ant/build.xml:466: The following error occurred while executing this line: Target "$build.target" does not exist in the project "common".
【参考方案2】:
你不需要压缩包,因为根据this question,亚马逊会在他们签名后压缩包。
根据this page on the Android developer site,未签名包的zip对齐是没有用的,因为亚马逊会做的签名操作会取消对齐包。
【讨论】:
以上是关于使用 Ant 构建已签名和未签名的版本的主要内容,如果未能解决你的问题,请参考以下文章