我正在尝试使用 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 脚本运行后执行它们的工作。
这为我解决了这个问题,所以希望我可以帮助其他处于类似困境的人。