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

问题描述 投票:1回答:1

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

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'.

以下是值得注意的要点:

  • 我们最近从Xamarin.iOS和Xamarin.Android UI迁移到Xamarin.Forms UI。构建代理能够成功构建以前的构建。
  • 该应用程序在发布模式下在我们的本地开发机器上成功构建(尝试了两种不同的)。
  • 还尝试通过简单地在Build Server上下载应用程序并通过VS运行来构建代码并成功构建。
  • 包括Xamarin.Android.Support.v7和Xamarin.Android.Support.v4。

我到目前为止尝试的解决方案包括:

  • 确保支持库和目标框架处于同一级别。 (API 25)
  • 确保在Android代码之前构建共享代码。
  • 更新了Build Server上的Android SDK。 Android配置与我的开发机器相同。
  • 尝试使用不同版本的API
  • 已清除C:\ Users \ Admin \ AppData \ Local \ xamarin的内容
  • 重建,重启,清理bin和obj以及其他常规内容

现在已经挣扎了两天。任何帮助都感激不尽。

xamarin.forms xamarin.android msbuild azure-devops build-agent
1个回答
1
投票

以下是帮助我最终构建项目的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还原,我没有在这里做。
  • 我正在构建解决方案,而在这里我正在构建android csproj。 IMO,sln应该构建因为在android的发布配置中,我将其设置为仅使用android和共享项目构建。
  • 所有步骤中的清洁设置为true,没有导致不同的问题TaskABI未找到。
  • 在之前的管道中,我正在运行NuGetInstaller来对抗我现在正在做的NuGetTollInstaller,然后只运行nuget restore。

因此,我仍然不能100%确定我做错了什么,但我最好的猜测是,nuget恢复要么无法正常工作,要么在接下来的步骤中清理干净就是清理nuget。如果有人想进一步调查,最受欢迎。如果我弄明白的话,我会发布明确的答案,但现在这个YAML正在运作。

© www.soinside.com 2019 - 2024. All rights reserved.