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

sti*_*mth 22 ant android version apk

通常我们使用命令在调试模式下构建android包

ant debug
Run Code Online (Sandbox Code Playgroud)

并得到apk文件名AppName-debug.apk.

有没有办法以AppName-debug-<version-number>.apk不使用'mv'命令直接生成apk文件?

谢谢.

cis*_*rns 38

我通过使用Android清单中的信息以自动方式完成此操作.

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

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

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

<xmlproperty file="AndroidManifest.xml" prefix="mymanifest" collapseAttributes="true"/>
Run Code Online (Sandbox Code Playgroud)

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

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

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

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


miv*_*ola 9

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

<xpath input="AndroidManifest.xml" expression="/manifest/@android:versionName"
                        output="versionName" default="unknown"/>
<echo message="name: ${versionName}"></echo>
Run Code Online (Sandbox Code Playgroud)

这需要定义任务:

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

<taskdef name="xpath"
        classname="com.android.ant.XPathTask"
        classpathref="android.antlibs" />
Run Code Online (Sandbox Code Playgroud)

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

问候,迈克尔