如何在使用ant构建Android apk时在文件名中包含版本字符串?

时间:2011-03-11 07:58:38

标签: android ant version apk

通常我们使用命令

在调试模式下构建android包
ant debug

并获取apk文件 AppName-debug.apk

有没有办法在没有'mv'命令的情况下直接以 AppName-debug-<version-number>.apk 的格式生成apk文件?

感谢。

4 个答案:

答案 0 :(得分:38)

我是通过使用Android清单中的信息以自动方式完成的。

我的方法是修改本地项目ant build.xml文件以导入主build.xml文件的自定义副本,在最新版本的SDK中导入到本地文件的主文件位于<SDK>/tools/ant/build.xml(以前版本中的android_rules.xml)请注意项目本地默认import文件中的build.xml行。

Android工具创建的本地build.xml中的评论包含有关如何进行自定义的详细信息,以便将来对工具的更新不会破坏您的更改。

在自定义规则文件中添加:

<xmlproperty file="AndroidManifest.xml" prefix="mymanifest" collapseAttributes="true"/>

这将清单读入一组ant属性,并带有自定义前缀以确保没有名称冲突。

然后,您可以将 $ {mymanifest.manifest.android:versionName} 添加到定义了apk名称的任何位置,只需在自定义规则文件中搜索.apk即可。

我已经使用此过程从构建服务器自动化版本化文件。

通过一些额外的调整,还可以自动签署您的发布应用程序,购买设置属性中的密码并使用签名任务中的密码。存储在仅存在于构建服务器上的单独属性文件中的实际密码。虽然存在轻微的安全风险,但在某些情况下,由于需要完整的端到端构建自动化而无法承担安全风险。

答案 1 :(得分:9)

另一个更像Android的解决方案是在$ {sdk.dir} /tools/ant/build.xml中使用XPATH任务:

<xpath input="AndroidManifest.xml" expression="/manifest/@android:versionName"
                        output="versionName" default="unknown"/>
<echo message="name: ${versionName}"></echo>

这需要定义任务:

<path id="android.antlibs">
    <pathelement path="${sdk.dir}/tools/lib/anttasks.jar" />
</path>

<taskdef name="xpath"
        classname="com.android.ant.XPathTask"
        classpathref="android.antlibs" />

我不知道哪个是最低版本的SDK版本,但它适用于SDK14。

此致 迈克尔

答案 2 :(得分:2)

以下帖子中描述的解决方案包含custom_rules.xml文件,可以将其复制以实现所需的结果。 http://jeffreysambells.com/2013/02/14/build-your-android-apk-with-the-manifest-version-number

答案 3 :(得分:-4)

是的,有一种生成带有任何名称的apk文件的方法我给你一个过程,你可以通过这个过程.apk提到你的名字。

1 - 右键单击​​包浏览器中的应用程序。 2选择出口。 3选择了Android 4 - 选择导出Android应用程序。 5 - 创建新的密钥库。 6-填写表格。 7-:给apk文件名你想要什么 8-:给apk的位置存储apk。

然后你找到问题的解决方案。 我希望这是有帮助的。