3

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

具体来说,我正在尝试以某种方式获取versionCode,versionNamepackageNameout 。

提前致谢。


结论

这似乎太麻烦了,而且由于这个问题很容易用 Maven 解决,所以我暂时放弃了快速解决方案的可能性。

4

2 回答 2

5

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

因为在 Java 中编写自定义 ant 任务并不是一门火箭科学——你已经可以尝试使用一些东西。

请参阅:如何通过 ANT 解析 xml

所以在你的情况下,它会像(使用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"/>
于 2012-04-16T22:29:56.037 回答
3

其实并不难:

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

你像这样使用它:

${mymanifest.manifest.android:versionName}
于 2014-04-08T12:50:10.710 回答