Android 在 Azure DevOps (VSTS) 构建代理上构建失败,出现错误 APT0000:检索项目的父项时出错

Android build failing on Azure DevOps(VSTS) build agent with Error APT0000: Error retrieving parent for item

我们有一个 Xamarin.Android 应用程序使用 Xamarin Forms 和共享代码 (.NET Standard 2.0) 构建并尝试在我们的构建服务器上构建它,但它不断失败并出现以下错误:

Mobile.Android\Resources\values\styles.xml(2,0): Error APT0000: Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCompat.Light.DarkActionBar'. 
Mobile.Android\Resources\values\styles.xml(2,0): Error APT0000: No resource found that matches the given name: attr 'colorAccent'. 
Mobile.Android\Resources\values\styles.xml(2,0): Error APT0000: No resource found that matches the given name: attr 'colorPrimary'. 
Mobile.Android\Resources\values\styles.xml(2,0): Error APT0000: No resource found that matches the given name: attr 'colorPrimaryDark'. 
Mobile.Android\Resources\values\styles.xml(2,0): Error APT0000: No resource found that matches the given name: attr 'windowActionBar'. 
Mobile.Android\Resources\values\styles.xml(2,0): Error APT0000: No resource found that matches the given name: attr 'windowActionModeOverlay'. 
Mobile.Android\Resources\values\styles.xml(2,0): Error APT0000: No resource found that matches the given name: attr 'windowNoTitle'. 
Mobile.Android\Resources\values\styles.xml(2,0): Error APT0000: Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCompat.Light.Dialog'. 
Mobile.Android\Resources\values\styles.xml(2,0): Error APT0000: No resource found that matches the given name: attr 'colorAccent'. 
Mobile.Android\Resources\values\styles.xml(2,0): Error APT0000: Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCompat.Light'. 
Mobile.Android\Resources\values\styles.xml(2,0): Error APT0000: Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCompat.Light.NoActionBar'.

以下是值得注意的点:

目前我尝试过的解决方案包括:

现在已经为此苦苦挣扎了 2 天。任何帮助将不胜感激。

以下是帮助我最终构建项目的 YAML 配置。

resources:
- repo: self
  clean: true

queue:
  name: Default
  demands: 
  - MSBuild
  - Xamarin.Android
  - JDK
  - AndroidSDK

variables:
  BuildConfiguration: 'Release'

steps:
- task: NuGetToolInstaller@0
  displayName: 'Use NuGet 4.4.1'
  inputs:
    versionSpec: 4.4.1

- task: NuGetCommand@2
  displayName: 'NuGet restore'
  inputs:
    restoreSolution: '$(Parameters.restorePkgSolution)'

- task: XamarinAndroid@1
  displayName: 'Build Mobile.Android'
  inputs:
    projectFile: Mobile.Android/Mobile.Android.csproj
    outputDirectory: '$(build.binariesdirectory)/$(BuildConfiguration)'
    configuration: '$(BuildConfiguration)'

- task: AndroidSigning@1
  displayName: 'Signing and aligning APK file(s) $(build.binariesdirectory)/$(BuildConfiguration)/*.apk'
  inputs:
    files: '$(Parameters.appFiles)'
    keystoreFile: '<path>'
    keystorePass: <password>
    keystoreAlias: <alias>
    keyPass: <pass>

- task: PublishBuildArtifacts@1
  displayName: 'Publish Artifact: drop'
  inputs:
    PathtoPublish: '$(build.binariesdirectory)/$(BuildConfiguration)'

此管道与之前失败的管道之间的区别是:

  • 在 运行 MSBuild 之前,我是 运行 dotnet restore 上一个管道中的解决方案,我不在这里做。
  • 我之前正在构建解决方案,而在这里我正在构建 android csproj。 IMO,sln 应该构建,因为 android 的发布配置,我将其设置为仅使用 android 和共享项目构建。
  • Clean in all steps 设置为 true,缺少它会导致另一个问题 TaskABI not found。
  • 在之前的管道中,我是 运行 NuGetInstaller 而不是我现在正在做的事情,即 NuGetTollInstaller 然后只是 运行 nuget 恢复。

所以我仍然不能 100% 确定我做错了什么,但我最好的猜测是 nuget 恢复工作不正常,或者在接下来的步骤中清理 nuget。 如果有人想进一步调查,非常欢迎。如果我弄清楚了,我会 post 确定的答案,但现在这个 YAML 正在工作。