我正在尝试使用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脚本运行后完成它们。
这为我解决了这个问题,所以希望我可以帮助其他人处于类似的困境中。
答案 0 :(得分:0)
如果您愿意重新考虑使用外部库,我自己的Android ant任务库可以完成您想要的自定义任务:
http://zutubi.com/source/projects/zutubi-android-ant/
特别是,bumpversion
任务会为您增加versionCode
(以及可选versionName
)。
答案 1 :(得分:0)
我自己的Java简单工具可以在这里使用: android manifest build number
特点: