【问题标题】:Best practices for maintaining Android application release维护 Android 应用程序发布的最佳实践
【发布时间】:2011-09-14 09:45:12
【问题描述】:

通常,当您构建和调试 Android 应用程序时,您会在清单中包含 debuggable=true,并且您会使用开发密钥对应用程序进行签名。

到了发布您的应用程序的时候,您需要更改为 debuggable=false,使用您自己的密钥签名,可选择运行 ProGuard 并可能执行其他操作。

某些外部操作,例如使用不同的密钥签名,可以使用 Ant 轻松编码。事实上,这些任务是开箱即用的。但是,AndroidManifest.xml 的更改似乎每次都需要人工干预。

另一个方面是维护应用程序的发布版本。例如,开箱即用的 Android 任务不会使用任何版本信息。 Maven 将使用 SNAPSHOT 版本,并且需要手动更新该版本。

处理所有这些问题非常乏味,并且非常需要一些自动化。到目前为止,我的方法是在 git 中为发布创建单独的分支,我将在其中保留最终清单以及具有正确版本的 pom。

但我想从其他人那里得到一些关于处理 Android 发布周期的最佳实践的建议。

有什么推荐吗?

【问题讨论】:

    标签: android release android-manifest release-management


    【解决方案1】:

    不过,AndroidManifest.xml 的更改似乎每次都需要人工干预。

    在我们必须对自动化 Android 构建进行手动 xml 操作的地方,我们使用 Ant 中的内置 XSLT 支持,使用 <style /> 任务。样式表可能类似于:

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:android="http://schemas.android.com/apk/res/android">
      <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    
      <xsl:template match="application[@android:debuggable='true']">
        <xsl:copy>
          <xsl:copy-of select="@*[name(.)!='android:debuggable']" />
          <xsl:apply-templates />
        </xsl:copy>
      </xsl:template>
    
      <xsl:template match="@*|node()">
        <xsl:copy>
          <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
      </xsl:template>
    
    </xsl:stylesheet>
    

    至于 SNAPSHOT 发布周期:自动化 Jenkins 构建和发布过程的方式是有一个 maven 目标,它将自动执行这些步骤:

    1. 更新 pom 版本(例如,android:versionName/android:versionCode)以删除“-SNAPSHOT”——例如,x.y.y-SNAPSHOT 变为简单的x.y.y
    2. 将其提交为“x.y.y 版本”
    3. 在 git repo 中标记该版本
    4. 将 pom 版本更新为下一个逻辑版本的 SNAPSHOT:x.y.z-SNAPSHOT
    5. 将其作为“准备下一个版本”的起点

    在第 3 步,它还会将该代码推送到公共 git 服务器(如果适用),并将发布标签发布到 Jenkins 插件存储库,因此它可以作为更新使用。

    我想类似的 Android 发布周期方法对于脚本来说也相当简单。

    【讨论】:

    • 特别是,SNAPSHOT 过程的想法是在第 3 步,而不是生成 Jenkins “.hpi” 插件文件,而是生成 Android “.apk” 候选发布版本。这样,“真正的”发布版本“x.y.z”只会在第 3 个构建步骤的代码中公开(并且显然依赖于构建成功)。
    • 谢谢。您的反馈很有价值。我没有使用 Jenkins,但方法似乎适合我的情况。
    • 抱歉,我的意思是开发/构建/发布 Jenkins 插件的 Maven 流程使用上述工作流程,并且似乎是保持版本向前发展的好方法。并不意味着您必须构建 使用 Jenkins 才能工作:)
    猜你喜欢
    • 2012-07-03
    • 1970-01-01
    • 2018-08-26
    • 2020-09-21
    • 2023-03-12
    • 2017-12-22
    • 2010-09-25
    • 1970-01-01
    相关资源
    最近更新 更多