Сбой сборки Android в агенте сборки Azure DevOps (VSTS) с ошибкой APT0000: ошибка при получении родительского элемента для элемента

У нас есть приложения 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'.

Ниже приведены примечательные моменты:

  • Недавно мы перешли с пользовательского интерфейса Xamarin.iOS и Xamarin.Android на пользовательский интерфейс Xamarin.Forms. Агент сборки может успешно построить предыдущие сборки.
  • Приложение успешно строится на наших локальных машинах разработчика (опробовано на двух разных) в режиме выпуска.
  • Также попытался создать код, просто загрузив приложение на Build Server и запустив через VS, и оно было успешно построено.
  • Xamarin.Android.Support.v7 и Xamarin.Android.Support.v4 включены.

Решения, которые я пробовал до сих пор, включают:

  • Убедитесь, что библиотеки поддержки и целевая платформа находятся на одном уровне. (API 25)
  • Убедитесь, что общий код создается до кода Android.
  • Обновлены Android SDK на сервере сборки. Конфигурация Android такая же, как на моей машине разработчика.
  • Пробовал с другой версией API
  • Очищено содержимое C: \ Users \ Admin \ AppData \ Local \ xamarin
  • Перестроить, перезапустить, очистить bin и obj и другие обычные вещи

Боролся с этим уже 2 дня. Любая помощь будет высоко ценится.


person Nitish    schedule 12.09.2018    source источник
comment
Можете ли вы создать проект на своей машине разработки локально?   -  person Andy Li-MSFT    schedule 14.09.2018
comment
да. Я могу строить локально, а также на Build Server, скачав код и запустив VS. Невозможно сделать это через конвейер сборки Azure DevOps.   -  person Nitish    schedule 14.09.2018
comment
Здесь есть аналогичная проблема github.com/xamarin/xamarin-android/issues/1934, проверьте, помогает ли это при устранении неполадок.   -  person Andy Li-MSFT    schedule 15.09.2018
comment
Я решил это, сбросив уже настроенный конвейер и создав новый конвейер, используя конфигурацию yaml. Я скоро отправлю yaml-файл в ответ.   -  person Nitish    schedule 17.09.2018


Ответы (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)'

Разница между этим конвейером и предыдущим конвейером, в котором произошел сбой, заключается в следующем:

  • Я выполнял восстановление dotnet в решении в предыдущем конвейере перед запуском MSBuild, чего я здесь не делаю.
  • Раньше я создавал решение, а здесь я создаю csproj для Android. IMO, sln должен строить, потому что в конфигурации выпуска android я установил его только для сборки с android и общими проектами.
  • Для очистки на всех этапах установлено значение true, отсутствие которого вызывало другую проблему. TaskABI не обнаружен.
  • В предыдущем конвейере я запускал NuGetInstaller против того, что делаю сейчас, а именно NuGetTollInstaller, а затем просто запускал на нем восстановление nuget.

Так что я до сих пор не уверен на 100%, что я делал неправильно, но лучше всего предположить, что восстановление nuget либо не работало должным образом, либо на следующих шагах очистка nuget была очищена. Если кто-то хочет продолжить расследование, добро пожаловать. Я отправлю точный ответ, если выясню, но пока этот YAML работает.

person Nitish    schedule 17.09.2018