我在Azure DevOps中创建Android CI/CD时遇到了一个严重的问题。结果表明,管道试图使用最新版本的BuildTools构建apk,但最新版本(31.0.0)似乎有问题。
我想强制Azure使用30.0.3版本,我已经测试过该版本运行良好。
使用BuildTools 31.0.0的Azure日志
我使用Ionic和cordova来生成我的Android项目,尽管cordova文档说它支持cli参数来强制构建工具版本。
例如:离子科尔多瓦运行android----gradlearg=-p cdvbuildtoolsversion=30
它仍然以始终使用安装在cordovaLib模块中的最新版本的方式生成
build.gradle[应用程序模块]
// The value for android.buildToolsVersion.
if (!project.hasProperty('cdvBuildToolsVersion')) {
cdvBuildToolsVersion = null;
}
...
compileSdkVersion cdvCompileSdkVersion
buildToolsVersion cdvBuildToolsVersion
Build.Gradle[cordovaLib模块]
cdvCompileSdkVersion = privateHelpers.getProjectTarget()
cdvBuildToolsVersion = privateHelpers.findLatestInstalledBuildTools()
...
compileSdkVersion cdvCompileSdkVersion
buildToolsVersion cdvBuildToolsVersion
我发现了一个临时的解决办法,似乎对这种情况很有意义,如果有人在未来遇到这种问题,它可能会很有用:
只需在管道中放置一个步骤来删除损坏的构建工具,在本例中为31.0.0
- script: $ANDROID_HOME/tools/bin/sdkmanager --uninstall 'build-tools;31.0.0'
displayName: 'Workaround'
什么是“AndroidSDK工具”、“AndroidSDK平台工具”和“AndroidSDK构建工具”?它们之间有什么不同? 在更新其他软件包后,该软件包的旧版本将被删除,但正如您所看到的,我同时拥有4个版本的“Android SDK构建工具”。你知道为什么吗?
已安装的生成工具版本31.0.0已损坏。删除并使用SDK管理器再次安装。 我怎样才能解决这个问题?
在Jenkins管道中,当在特定节点上运行构建时,会在该代理上分配工作区。我们没有设置工作区路径,所以它是自动确定的。我知道工作区必须包含执行程序编号,以便在同一代理上同时运行相同作业时隔离构建。 但是工作区路径是如何构造的? 我们的构建被分配给一个特定的节点(有4个执行器),并且被配置为不允许并发构建。通常分配给: 在某个时刻,构建开始在executor 2上运行,但仍然使用与以前相同的工作区。
如您所见,其中没有。那么,当我的电脑上安装了27个版本时,为什么我的android工作室会寻找这个特定的版本(26)呢?另外,在哪里可以看到BuildToolsVersion“27.0.3”`?
我已经尝试了这里发布的解决方案:“指定的Android SDK构建工具版本(26.0.0)被忽略...”升级到26.0.2不起作用。