在ant中使用AndroidManifest.xml版本代码

时间:2012-04-16 20:42:52

标签: java android ant

是否有人知道是否可以从AndroidManifest.xml中获取变量以供使用

具体来说,我试图以某种方式获取versionCodeversionNamepackageName

提前致谢。


结论

这似乎太麻烦了,而且由于Maven很容易解决这个问题,我现在已经放弃了快速解决方案的可能性。

2 个答案:

答案 0 :(得分:5)

也许有一个Android专用解决方案,我不知道,但除此之外,您可以将android清单文件视为任何其他xml文件 - >所以你需要的只是一个用于解析xml文件并从中检索值的ant任务。

在java中编写自定义ant任务并不是一门火箭科学 - 你已经可以尝试使用它了。

请参阅:How to parse a xml by ANT

所以在你的情况下它会像(使用http://www.oopsconsultancy.com/software/xmltask/):

<target name="retrieveFromManifest" desciption="retrieveFromManifest">
    <taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask"/>
    <xmltask source="${pathToAndroidManifestFile}">
        <copy path="/manifest/@android:versionCode" property="androidVersionCode"/>
        <copy path="/manifest/@android:versionName" property="androidVersionName"/>
        <copy path="/manifest/@package" property="androidPackage"/>
    </xmltask>
    <echo message="Version code: ${androidVersionCode}" />
    <echo message="Version name: ${androidVersionName}" />
    <echo message="package: ${androidPackage}" />
</target>

编辑:

如果你考虑在你的android项目的build.xml中解析这个,那么你有xpath任务“开箱即用”。任何为android项目自动生成的构建文件都会导入全局sdk的构建文件<import file="${sdk.dir}/tools/ant/build.xml" />,其中包含:

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

稍后使用某些行的示例:

<xpath input="AndroidManifest.xml" 
                expression="/manifest/application/@android:hasCode"
                output="manifest.hasCode" default="true"/>

答案 1 :(得分:3)

实际上并不难:

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

你这样使用它:

${mymanifest.manifest.android:versionName}