В настоящее время сборка/развертывание моего приложения Xamarin.Android очень медленная. Я не помню, чтобы это было так медленно.
Я включил:
- Использовать совместное время выполнения
- Быстрое развертывание
Включение или отключение этих настроек не имеет никакого значения. В обоих сценариях требуется около 2 минут и 20 секунд (до 3 минут!) Для создания/развертывания моего приложения. Использование реального устройства или эмулятора Visual Studio для Android тоже не имеет значения.
Почему это может быть настолько медленным? Я не использую правильные настройки?
ОБНОВЛЕНИЕ 2
Вчера (14 ноября) я обновил Xamarin.VS до 4.2.1.58. Нет улучшений в продолжительности сборки.
Мы используем TeamCity для создания версий релизов нашего приложения, статистика TeamCity отлично показывает, о чем я говорю.
На приведенном ниже графике я выбрал последний квартал как диапазон дат. См. Значительное увеличение продолжительности сборки. Теперь я не возражаю ждать 3 минуты для сборки релиза, но это неприемлемо при отладке.
ОБНОВЛЕНИЕ 3
Джон, спасибо за вашу помощь.
Тем временем, я провел некоторое исследование самостоятельно в журналах сборки и нашел продолжительность для задачи сборки. Я обнаружил, что как-то GetAdditionalResourcesFromAssemblies
требуется много времени.
Количество ресурсов, которые у меня есть в приложении, не сильно изменилось, поэтому мне стало интересно: может ли это быть другая сборка, которую я использую.
Затем я сделал проверку ревизии 1029 (которая была последней ревизией, которая заняла около минуты для сборки) и попыталась отладить ее в обновленной среде. Он по-прежнему построен в течение 1 м 30...
Итак:
- Возможно, это не обновление VS Xamarin (иначе версия 1029 тоже будет медленной)
- Вероятно, это не быстрое развертывание, длительность процесса сборки
Итак, что изменилось между версией 1029 и 1030 моего приложения?
- Обновлен Xamarin для Visual Studio до 4.2.0.719
- Установленная платформа Android 7.0 SDK в Android SDK Manager
- Изменен
Compile using Android version
на Android 7.0 в свойствах проекта - Обновлены библиотеки поддержки Xamarin.Android от 23.4.0.1 до 24.2.1
Изменить 4 было то, что я обновил в первую очередь, я хотел использовать Bottomsheet
, который был улучшен в версии 24. Но поддержка библиотеки nugets была нацелена на Android 7.0, поэтому мне пришлось сделать 1-3, чтобы иметь возможность обновлять библиотеки поддержки.
Возможно, что-то изменилось в привязках библиотеки поддержки, которые вызвали все это? Я проверил Интернет для других разработчиков, имеющих эту проблему, и нашел этот на форуме Xamarin. Установка свойства AndroidExplicitCrunch
build на true
кажется, исправляет его там, но когда я это пробовал, у меня появилась другая ошибка сборки.
В любом случае, это то, что я пытался в то же время. Теперь, по запросу, вот мой журнал диагностики:
1>Project Performance Summary:
1> 3 ms C:\Development\Apps\FieldService-trunk\OverAllField.XamarinAndroid\OverAll.App.Shared\OverAll.App.Shared.csproj 3 calls
1> 1 ms GetTargetPath 1 calls
1> 0 ms GetNativeManifest 1 calls
1> 2 ms GetCopyToOutputDirectoryItems 1 calls
1> 4 ms C:\Development\Apps\FieldService-trunk\OverAllField.XamarinAndroid\OverAllField.XamarinAndroid.DataLayer\OverAllField.XamarinAndroid.DataLayer.csproj 3 calls
1> 1 ms GetTargetPath 1 calls
1> 0 ms GetNativeManifest 1 calls
1> 3 ms GetCopyToOutputDirectoryItems 1 calls
1> 40103 ms C:\Development\Apps\FieldService-trunk\OverAllField.XamarinAndroid\OverAllField.XamarinAndroid.ServiceClient\OverAllField.XamarinAndroid.ServiceClient.csproj 1 calls
1>
1>Target Performance Summary:
1> 0 ms Compile 1 calls
1> 0 ms ResolveReferences 1 calls
1> 0 ms BclBuildGetTargetPath 1 calls
1> 0 ms EnsureNuGetPackageBuildImports 1 calls
1> 0 ms AfterResGen 1 calls
1> 0 ms ResolveCodeAnalysisRuleSet 1 calls
1> 0 ms _CreatePropertiesCache 1 calls
1> 0 ms _SetTargetFrameworkMonikerAttribute 1 calls
1> 0 ms BeforeResGen 1 calls
1> 0 ms ModifyUnitTestPlatformVersion 1 calls
1> 0 ms CreateCustomManifestResourceNames 1 calls
1> 0 ms BclBuildAddProjectReferenceProperties 1 calls
1> 0 ms _ResolveMonoAndroidFramework 1 calls
1> 0 ms UpdateAndroidResources 1 calls
1> 0 ms CoreBuild 1 calls
1> 0 ms ExpressionBuildExtension 1 calls
1> 0 ms _CheckTargetFramework 1 calls
1> 0 ms _CopyAppConfigFile 1 calls
1> 0 ms Build 1 calls
1> 0 ms DeleteBuildInfoFile 1 calls
1> 0 ms CleanXsdCodeGen 1 calls
1> 0 ms _SetupInstantRun 1 calls
1> 0 ms GetFrameworkPaths 1 calls
1> 0 ms DeleteBuildInfoResource 1 calls
1> 0 ms _AddAndroidDefines 1 calls
1> 0 ms BuildOnlySettings 1 calls
1> 0 ms ComputeIntermediateSatelliteAssemblies 1 calls
1> 0 ms ValidationExtension 1 calls
1> 0 ms AfterCompile 1 calls
1> 0 ms _CheckInstantRunCondition 1 calls
1> 0 ms _GenerateSatelliteAssemblyInputs 1 calls
1> 0 ms _SetupApplicationJavaClass 1 calls
1> 0 ms _SetupDesignTimeBuildForIntellisense 1 calls
1> 0 ms SetWin32ManifestProperties 1 calls
1> 0 ms CreateSatelliteAssemblies 1 calls
1> 0 ms _CopySourceItemsToOutputDirectory 1 calls
1> 0 ms GetInstalledSDKLocations 1 calls
1> 0 ms _AddAndroidEnvironmentToCompile 1 calls
1> 0 ms _CheckForContent 1 calls
1> 0 ms _SeparateAppExtensionReferences 1 calls
1> 0 ms AfterResolveReferences 1 calls
1> 0 ms BeforeResolveReferences 1 calls
1> 0 ms PrepareResources 1 calls
1> 0 ms ResolveSDKReferences 1 calls
1> 0 ms _CheckForDeletedResourceFile 1 calls
1> 0 ms BeforeCompile 1 calls
1> 0 ms UpdateAndroidAssets 1 calls
1> 0 ms DesignTimeXamlMarkupCompilation 1 calls
1> 0 ms _AddMultiDexDependencyJars 1 calls
1> 0 ms PrepareForRun 1 calls
1> 0 ms ResGen 1 calls
1> 0 ms _GenerateAndroidAssetsDir 1 calls
1> 0 ms AfterBuild 1 calls
1> 0 ms BclBuildSetRunningFullBuild 1 calls
1> 0 ms GetNativeManifest 2 calls
1> 0 ms ExpandSDKReferences 1 calls
1> 0 ms GenerateTargetFrameworkMonikerAttribute 1 calls
1> 0 ms _GenerateAndroidResourceDir 1 calls
1> 0 ms CreateManifestResourceNames 1 calls
1> 0 ms BeforeBuild 1 calls
1> 0 ms _GenerateCompileInputs 1 calls
1> 0 ms _SetupDesignTimeBuildForBuild 1 calls
1> 0 ms PrepareResourceNames 1 calls
1> 0 ms _AddNativeLibraryArchiveToCompile 1 calls
1> 1 ms GetCopyToOutputDirectoryXamlAppDefs 3 calls
1> 1 ms _GenerateJavaDesignerForComponent 1 calls
1> 1 ms _CollectMonoAndroidOutputs 1 calls
1> 1 ms _SetEmbeddedWin32ManifestProperties 1 calls
1> 1 ms CoreResGen 1 calls
1> 1 ms _ValidateLinkMode 1 calls
1> 1 ms _GetLibraryImports 1 calls
1> 1 ms _CheckForCompileOutputs 1 calls
1> 1 ms _ReadPropertiesCache 1 calls
1> 1 ms GetTargetPath 2 calls
1> 1 ms _ComputeAndroidResourcePaths 1 calls
1> 1 ms SetBuildInfoDefaults 1 calls
1> 1 ms SplitResourcesByCulture 1 calls
1> 1 ms _SplitProjectReferencesByFileExistence 3 calls
1> 1 ms GenerateCompiledExpressionsTempFile 1 calls
1> 1 ms BclBuildDetermineReferencesToRedirect 1 calls
1> 1 ms _GetReferenceAssemblyPaths 1 calls
1> 1 ms PreXsdCodeGen 1 calls
1> 2 ms _RegisterMdbFilesWithFileWrites 1 calls
1> 2 ms PrepareForBuild 1 calls
1> 2 ms _BuildSdkCache 1 calls
1> 2 ms _CalculateAdditionalResourceCacheDirectories 1 calls
1> 2 ms AssignProjectConfiguration 1 calls
1> 2 ms _CreateAdditionalResourceCache 1 calls
1> 2 ms GetReferenceAssemblyPaths 1 calls
1> 3 ms _GetAdditionalResourcesFromAssemblies 1 calls
1> 3 ms _CheckDuplicateJavaLibraries 1 calls
1> 3 ms _CollectAdditionalResourceFiles 1 calls
1> 3 ms _ExtractLibraryProjectImports 1 calls
1> 3 ms _ComputeAndroidAssetsPaths 1 calls
1> 3 ms AssignTargetPaths 3 calls
1> 3 ms CopyFilesToOutputDirectory 1 calls
1> 4 ms _ValidateResourceCache 1 calls
1> 4 ms _ValidateAndroidPackageProperties 1 calls
1> 5 ms IncrementalClean 1 calls
1> 7 ms _ResolveMonoAndroidSdks 1 calls
1> 9 ms _CheckForInvalidConfigurationAndPlatform 3 calls
1> 10 ms GetCopyToOutputDirectoryItems 3 calls
1> 11 ms _CopyFilesMarkedCopyLocal 1 calls
1> 11 ms _CleanGetCurrentAndPriorFileWrites 1 calls
1> 12 ms _AddLibraryProjectsEmbeddedResourceToProject 1 calls
1> 18 ms ImplicitlyExpandDesignTimeFacades 1 calls
1> 29 ms _BuildLibraryImportsCache 1 calls
1> 41 ms ResolveProjectReferences 1 calls
1> 70 ms _SetLatestTargetFrameworkVersion 1 calls
1> 114 ms _ResolveLibraryProjectImports 1 calls
1> 138 ms ResolveAssemblyReferences 1 calls
1> 207 ms _UpdateAndroidResgen 1 calls
1> 356 ms _GetPrimaryCpuAbi 1 calls
1> 803 ms CoreCompile 1 calls
1> 38202 ms _BuildAdditionalResourcesCache 1 calls
1>
1>Task Performance Summary:
1> 0 ms CreateCSharpManifestResourceName 1 calls
1> 0 ms Delete 2 calls
1> 0 ms FindAppConfigFile 1 calls
1> 0 ms ResolveCodeAnalysisRuleSet 1 calls
1> 0 ms CallTarget 1 calls
1> 0 ms ResolveNonMSBuildProjectOutput 1 calls
1> 0 ms AssignCulture 1 calls
1> 1 ms GetFrameworkPath 1 calls
1> 1 ms GetAndroidPackageName 1 calls
1> 1 ms AssignProjectConfiguration 1 calls
1> 1 ms ReadImportedLibrariesCache 1 calls
1> 1 ms ReadLinesFromFile 2 calls
1> 1 ms GetAppSettingsDirectory 1 calls
1> 1 ms AssignTargetPath 18 calls
1> 1 ms CreateTemporaryDirectory 1 calls
1> 1 ms GetReferenceAssemblyPaths 2 calls
1> 2 ms Message 20 calls
1> 2 ms CalculateAdditionalResourceCacheDirectories 1 calls
1> 2 ms GetJavaPlatformJar 1 calls
1> 2 ms MakeDir 2 calls
1> 2 ms WriteLinesToFile 1 calls
1> 2 ms ConvertToAbsolutePath 1 calls
1> 3 ms RemoveDuplicates 2 calls
1> 3 ms CopyIfChanged 1 calls
1> 3 ms CheckDuplicateJavaLibraries 1 calls
1> 3 ms AndroidComputeResPaths 2 calls
1> 3 ms ReadLibraryProjectImportsCache 1 calls
1> 3 ms CreateProperty 41 calls
1> 4 ms CopyGeneratedJavaResourceClasses 1 calls
1> 4 ms GetExtraPackages 1 calls
1> 4 ms GetAndroidDefineConstants 1 calls
1> 4 ms CreateAndroidResourceStamp 1 calls
1> 5 ms FindUnderPath 5 calls
1> 5 ms ReadAdditionalResourcesFromAssemblyCache 2 calls
1> 5 ms CreateResgenManifest 1 calls
1> 6 ms CreateItem 23 calls
1> 6 ms RemoveDirFixed 1 calls
1> 12 ms CreateManagedLibraryResourceArchive 1 calls
1> 14 ms Copy 3 calls
1> 16 ms ConvertResourcesCases 1 calls
1> 21 ms GenerateResourceDesigner 1 calls
1> 28 ms GetImportedLibraries 1 calls
1> 49 ms MSBuild 3 calls
1> 49 ms ReadResolvedSdksCache 1 calls
1> 114 ms ResolveLibraryProjectImports 1 calls
1> 137 ms ResolveAssemblyReference 1 calls
1> 142 ms Aapt 1 calls
1> 347 ms GetPrimaryCpuAbi 1 calls
1> 792 ms Csc 1 calls
1> 38201 ms GetAdditionalResourcesFromAssemblies 1 calls
1>
1>Build succeeded.
1>
1>Time Elapsed 00:00:40.09
Существует второе резюме (у журнала есть 2 из этих резюме каким-то образом), но я не могу включить его в вопрос, потому что он превысит лимит персонажа. Меньшая версия второго свода:
2>Project Performance Summary:
2> 6 ms C:\Development\Apps\FieldService-trunk\OverAllField.XamarinAndroid\OverAll.App.Shared\OverAll.App.Shared.csproj 5 calls
2> 0 ms GetTargetPath 1 calls
2> 0 ms GetNativeManifest 1 calls
2> 1 ms GetCopyToOutputDirectoryItems 1 calls
2> 5 ms GetBuiltProjectOutputRecursive 2 calls
2> 9 ms C:\Development\Apps\FieldService-trunk\OverAllField.XamarinAndroid\OverAllField.XamarinAndroid.BarcodeScanner\OverAllField.XamarinAndroid.BarcodeScanner.csproj 4 calls
2> 0 ms GetTargetPath 1 calls
2> 2 ms GetNativeManifest 1 calls
2> 3 ms GetCopyToOutputDirectoryItems 1 calls
2> 4 ms GetBuiltProjectOutputRecursive 1 calls
2> 17 ms C:\Development\Apps\FieldService-trunk\OverAllField.XamarinAndroid\OverAllField.XamarinAndroid.DataLayer\OverAllField.XamarinAndroid.DataLayer.csproj 5 calls
2> 9 ms GetTargetPath 1 calls
2> 1 ms GetNativeManifest 1 calls
2> 2 ms GetCopyToOutputDirectoryItems 1 calls
2> 5 ms GetBuiltProjectOutputRecursive 2 calls
2> 46 ms C:\Development\Apps\FieldService-trunk\OverAllField.XamarinAndroid\OverAllField.XamarinAndroid.ServiceClient\OverAllField.XamarinAndroid.ServiceClient.csproj 4 calls
2> 21 ms GetTargetPath 1 calls
2> 0 ms GetNativeManifest 1 calls
2> 2 ms GetCopyToOutputDirectoryItems 1 calls
2> 23 ms GetBuiltProjectOutputRecursive 1 calls
2> 87736 ms C:\Development\Apps\FieldService-trunk\OverAllField.XamarinAndroid\OverAllField.Android\OverAllField.XamarinAndroid.csproj 1 calls
Вторая итоговая отчетность о производительности: (удалено что-нибудь и менее 1000 мс для уменьшения символов)
2> 1955 ms _GenerateJavaStubs 1 calls
2> 3083 ms _CreateBaseApk 1 calls
2> 3467 ms _UpdateAndroidResgen 1 calls
2> 8944 ms _CompileToDalvikWithDx 1 calls
2> 66321 ms _BuildAdditionalResourcesCache 1 calls
Второе описание производительности задачи: (опять-таки, удалите что-нибудь и менее 1000 мс для уменьшения символов)
2> 1245 ms GenerateJavaStubs 1 calls
2> 2334 ms ConvertResourcesCases 3 calls
2> 4637 ms Aapt 2 calls
2> 8941 ms CompileToDalvik 1 calls
2> 66320 ms GetAdditionalResourcesFromAssemblies 1 calls
2>
2>Build succeeded.
2>
2>Time Elapsed 00:01:27.73
Полный журнал диагностики диагностики здесь
ОБНОВЛЕНИЕ 4
Полный журнал диагностики диагностики с поддержкой Android версии 23 здесь
Существует значительная разница между временем сборки. Поддержка версии 24:
1>Project Performance Summary:
1> 40103 ms C:\Development\Apps\trunk\App.Droid\App.Droid.ServiceClient\App.Droid.ServiceClient.csproj 1 calls
...
2>Project Performance Summary:
2> 87736 ms C:\Development\Apps\trunk\App.Droid\App.Droid\App.Droid.csproj 1 calls
Поддержка версии 23:
1>Project Performance Summary:
1> 962 ms C:\Development\Apps\trunk-r1029\App.Droid\App.Droid.ServiceClient\App.Droid.ServiceClient.csproj 1 calls
2>Project Performance Summary:
2> 18214 ms C:\Development\Apps\trunk-r1029\App.Droid\App.Droid\App.Droid.csproj 1 calls
Оба построены с целевым Android 7.0 и той же версией Xamarin, единственная разница - это версия библиотеки поддержки Android. Разве это не огромный рост?
Спасибо заранее!