在AndroidManifest.xml中查找当前的versionCode并将其递增1

时间:2013-07-01 21:43:35

标签: java android ant jenkins continuous-integration

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

如果可能,我需要帮助:

找到一种方法来跟踪当前的versionCode和versionName并递增一个。我发现一个可能的解决方案是在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列表的顶部,在模拟器和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插件和你的ant版本在shell脚本运行后完成它们。

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

2 个答案:

答案 0 :(得分:0)

如果您愿意重新考虑使用外部库,我自己的Android ant任务库可以完成您想要的自定义任务:

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

特别是,bumpversion任务会为您增加versionCode(以及可选versionName)。

答案 1 :(得分:0)

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

特点:

  • versionName应为 major.minor.point (由Android doc提供建议)
  • versionName可以保留,重置为1.0.0或递增(其中一个部分和尾随部分设置为0)
  • versionCode将替换为 Unix Time