在AndroidManifest.xml中查找当前版本Code并将其递增一



我正试图用Jenkins建立一个Android持续集成环境,我希望每次Jenkins构建机器运行时,我的versionCode和versionNumber都增加1。该应用程序是使用ApacheAnt构建的,我试图避免包含外部库。几个星期以来,我一直在寻找这个问题的解决方案,但似乎什么都做不到。

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

找到跟踪当前版本Code和版本Name并递增一的方法。我发现的一个可能的解决方案是在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或谷歌解决方案都不起作用,所以任何帮助都将不胜感激。这是我第一次发到stackoverflow,所以如果东西放错地方或发错了,请原谅我。

谢谢!

编辑

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

步骤1:下载Jenkins上的"Hudson Next Build Number"插件。诀窍是Jenkins的内部版本号自动递增,然后通过调用${build_number}来使用它。Hudson插件只允许您将内部版本号设置为您想要的任何内容。

步骤2:在配置菜单的Build部分,您调用Android Emulator插件并(可能)调用ant,您希望添加一个构建步骤。您希望添加"执行shell",并将其放置在构建列表的顶部,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.*"one_answers"1.3.${BUILD_NUMBER}",以匹配清单中的主要和次要版本号。此外,sed调用后的文件路径应该指向您试图更改的AndroidManifest.xml。

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

步骤5:让Android Emulator插件和您的ant版本在shell脚本运行后完成它们的工作。

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

如果你愿意重新考虑使用外部库,我自己的安卓蚂蚁任务库有自定义任务,可以做你想做的事情:

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

特别是,有一个bumpversion任务将为您递增versionCode(以及可选的versionName)。

我自己的Java简单工具可以在这里使用:安卓清单内部版本号

特点:

  • versionName应该是major.minor.point(根据Android文档的建议)
  • versionName可以保留、重置为1.0.0或递增(其中一个部分和尾部设置为0)
  • versionCode将替换为Unix时间

相关内容

  • 没有找到相关文章