0

我正在尝试使用 Jenkins 设置 Android 持续集成环境,并且我希望每次 Jenkins 构建机器运行时我的 versionCode 和 versionNumber 都增加 1。该应用程序是使用 Apache Ant 构建的,我试图避免包含外部库。几个星期以来,我一直在寻找解决这个问题的方法,但似乎没有任何工作。

如果可能的话,我需要帮助:

找到一种方法来跟踪当前的 versionCode 和 versionName 并以 1 递增。我发现的一种可能的解决方案是在 build.properties 文件中创建条目来跟踪内部版本号。使用 build.xml 中的 'operation="+"' 增加这个值很容易,但实际上将值(例如 154)而不是地址(例如 ${build.number})放入 Manifest 是不可能的!

将实际的整数或字符串值放入 versionCode 和 versionNumber,而不是属性值的地址。我似乎无法使用 replaceregexp 或任何其他 ant 替换任务在 versionCode 和 versionName 中获得实际值。例如:

<replaceregexp file="/Users/holt.bowmer/Documents/SVNRepo/mobile-trunk/android/AndroidManifest.xml"
        match="versionCode=(.*)"
        replace= 'versionCode= "${build.number}"' />

将 versionCode 从 versionCode="154" 更改为 versionCode="${build.number},这是不允许的!

总而言之,这非常令人沮丧,我一直在让自己发疯,试图找到解决这个问题的方法。其他所有 stackoverflow 或 Google 解决方案均未奏效,因此我们将不胜感激任何帮助。这是我在 stackoverflow 上的第一篇文章,如果内容放错地方或发布不正确,请原谅我。

谢谢!

编辑

好吧,我想通了,我将为其他必须处理这个可怕问题的人更新我的回复。为什么 Jenkins Android 模拟器不能做到这一点我永远不会明白,但这是我的解决方案:

第 1 步:在 Jenkins 上下载“Hudson Next Build Number”插件。诀窍是让 Jenkins 的内部版本号自动递增,然后通过调用 ${BUILD_NUMBER} 来使用它。Hudson 插件只是让您可以将内部版本号设置为您想要的任何内容。

第 2 步:在配置菜单的 Build 部分下,您调用 Android Emulator 插件并(可能)调用 ant,您想要添加一个构建步骤。您想添加“Execute shell”并将其放在 Build 列表的顶部,在 Emulator 和 ant 之前。

第 3 步:在此 shell 文件中,您要输入以下代码:

sed -i "" "s/android:versionCode=.*/android:versionCode= \"${BUILD_NUMBER}\"/" Users/your.name/Documents/workspace/android/AndroidManifest.xml

sed -i "" "s/"1.3.*"/1.3.${BUILD_NUMBER}\"/" /Users/your.name/Documents/workspace/android/AndroidManifest.xml

对于第二个 shell 脚本,您可能需要更改“1.3.*”和“1.3.${BUILD_NUMBER} 以匹配清单中的主要和次要版本号。此外,sed 调用后的文件路径应指向您尝试更改的 AndroidManifest.xml。

第 4 步:转到选项菜单中的“设置下一个内部版本号”选项卡,就在构建历史记录的正上方,然后将内部版本号设置为您想要的任何值。

第 5 步:让 Android Emulator Plugin 和您的 ant 版本在 shell 脚本运行后执行它们的工作。

这为我解决了这个问题,所以希望我可以帮助其他处于类似困境的人。

4

2 回答 2

0

如果您愿意重新考虑使用外部库,我自己的 Android ant 任务库有自定义任务可以完全满足您的需求:

http://zutubi.com/source/projects/zutubi-android-ant/

特别是,有一项bumpversion任务将为您增加versionCode(和可选versionName的)。

于 2013-07-03T05:25:31.267 回答
0

我自己的 Java 简单工具可以在这里使用: android manifest build number

特征:

  • versionName 应该是major.minor.point(由 Android doc 建议)
  • versionName 可以保留、重置为 1.0.0 或递增(其中一个部分和尾随部分设置为 0)
  • versionCode 将替换为Unix 时间
于 2014-10-15T08:27:00.173 回答