【问题标题】:How to include version string in the filename when building Android apk with ant?使用ant构建Android apk时如何在文件名中包含版本字符串?
【发布时间】:2011-03-11 07:58:38
【问题描述】:

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

ant debug

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

有没有什么方法可以不用'mv'命令直接生成AppName-debug-<version-number>.apk格式的apk文件?

谢谢。

【问题讨论】:

    标签: android ant version apk


    【解决方案1】:

    我使用 Android 清单中的信息以自动方式完成了这项工作。

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

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

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

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

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

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

    我已使用此过程从构建服务器自动执行版本控制文件。

    通过一些额外的调整,还可以让您的发布应用程序自动签名,购买在属性中设置密码并在签名任务中使用这些密码。实际密码存储在单独的属性文件中,该文件仅存在于构建服务器上。虽然安全风险很小,但在某些情况下,它被完全端到端构建自动化的需求所抵消。

    【讨论】:

    • 谢谢。你的建议效果很好。我的 build.xml 中的 cmets 有以下几行的错误: 规则文件是从 /platforms//templates/android_rules.xml 导入的,而不是包含“android_rules.xml”,您应该包含'/tools/ant/ant_rules_r3.xml'。否则构建将失败。
    • 有没有办法通过 Eclipse APK 导出自动执行此操作?
    • 我不知道。 ANT 旨在成为您构建自动化的地方。您可以将其作为功能请求提交给 ADT 团队。
    • @stid.smth 有趣的是,在 /tools/ant 的 android sdk 安装中没有 ant_rules_r3.xml - 我应该手动创建它吗?如果是,它应该是什么样子?我还检查了 /platforms//templates/ - 那里也没有规则文件。
    • 在最新版本的 Android SDK 中,ANT 构建系统发生了变化。你会想看看克隆 /tools/ant/build.xml.
    【解决方案2】:

    另一个更类似于 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>
    

    这需要定义任务:

    <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。

    问候, 迈克尔

    【讨论】:

    • +1 帮我把 versionName 集成到 ant 构建的 apk 名称中。
    【解决方案3】:

    以下帖子中描述的解决方案具有 custom_rules.xml 文件,只需复制该文件即可获得所需的结果。 http://jeffreysambells.com/2013/02/14/build-your-android-apk-with-the-manifest-version-number

    【讨论】:

      【解决方案4】:

      是的,有一种方法可以生成任意名称的 apk 文件

      1-右键单击包资源管理器中的应用程序。 2-选择出口。 3 选择 Android 4-选择导出 Android 应用程序。 5-创建新的密钥库。 6-填写表格。 7-: 给 apk 文件名你想要的 8-:给apk提供位置来存储apk。

      然后您就可以找到问题的解决方案。 我希望这会有所帮助。

      【讨论】:

      • 对不起,我的意思是几乎不使用“ant”命令而不是 eclipse IDE。我目前没有使用 eclipse。
      • 我也认为你误解了这个问题,提问者正在搜索自动将版本号添加到文件名中。
      猜你喜欢
      • 1970-01-01
      • 2015-03-13
      • 2013-01-06
      • 1970-01-01
      • 2011-03-06
      • 2013-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多