【问题标题】:Slow app build - Xamarin for Visual Studio缓慢的应用程序构建 - Xamarin for Visual Studio
【发布时间】:2017-03-24 05:36:59
【问题描述】:

这些天,我的 Xamarin.Android 应用程序的构建/部署速度非常缓慢。我不记得以前这么慢了。

我已启用:

  • 使用共享运行时
  • 快速部署

启用或禁用这些设置没有任何区别。在这两种情况下,构建/部署我的应用程序大约需要 2 分 20 秒(最多超过 3 分钟!)。 使用真实设备或适用于 Android 的 Visual Studio 模拟器也没有什么不同。

为什么会如此缓慢?我没有使用正确的设置吗?

更新 2

昨天(11 月 14 日)我将 Xamarin.VS 更新为 4.2.1.58。构建持续时间没有改进。

我们正在使用 TeamCity 构建我们应用的发布版本,TeamCity 统计数据完美地显示了我所说的内容。

在下图中,我选择了上一季度作为日期范围。查看构建持续时间的主要增加。现在,我不介意等待 3 分钟等待发布版本,但在调试时这是不可接受的。

更新 3

乔恩,谢谢你的帮助。

与此同时,我自己在构建日志中进行了一些研究,并发现了每个构建任务的持续时间。我发现不知何故GetAdditionalResourcesFromAssemblies 需要很多时间。

我在应用程序中拥有的资源量并没有发生显着变化,所以这让我开始思考:它会不会是我正在使用的另一个程序集..

然后,我检查了修订版 1029(这是最后一个大约需要一分钟构建的修订版),并尝试在更新的环境中对其进行调试。它仍然在 1 分 30 秒内建成......

所以:

  • 这可能不是 VS Xamarin 更新(否则修订版 1029 也会构建缓慢)
  • 可能不是快速部署,构建过程中持续时间增加

那么我的应用的 1029 和 1030 版本之间发生了什么变化?

  1. 将 Xamarin for Visual Studio 更新到 4.2.0.719
  2. 在 Android SDK Manager 中安装了 Android 7.0 SDK 平台
  3. 在项目属性中将 Compile using Android version 更改为 Android 7.0
  4. 将 Xamarin.Android 支持库从 23.4.0.1 更新到 24.2.1

更改 4 是我首先更新的原因,我想使用 Bottomsheet,它在第 24 版中得到了改进。但是支持库 nugets 针对的是 Android 7.0,所以我不得不执行 1-3 以便能够更新支持库。

会不会是支持库绑定发生了变化而导致了这一切?我在互联网上查看了其他有此问题的开发人员,并在 Xamarin 论坛中找到了 this。将AndroidExplicitCrunch 构建属性设置为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

第二个目标性能总结:(删除任何

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

第二个任务性能总结:(再次,删除任何

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

完整的诊断构建日志here

更新 4

完整的诊断构建日志,Android 支持版本 23 here

构建时间之间存在显着差异。 支持版本 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 支持库版本。这不是一个巨大的增长吗?

提前致谢!

【问题讨论】:

  • 所以_BuildAdditionalResourcesCacheTarget 将永远占用。这可能会运行GetAdditionalResourcesFromAssembliesTask。我相信这里发生的可能是当您升级到 Android 支持库时,它需要下载和缓存最新版本。我怀疑新版本的时间也会减少吗?我需要一个完整的诊断构建输出来查看Task 的内部结构。请随时上传。
  • 好的,这可以解释增加的原因。这么慢的不仅仅是第一次构建,自 11 月 8 日(开发应用程序)以来,我已经构建了数百次应用程序,不幸的是,构建和部署仍然需要 3 分钟或更长时间。我会在一分钟内尝试上传完整的构建日志
  • 刚刚将完整的构建日志添加到问题中。感谢您的宝贵时间
  • @avb 所以我更新到 Xamarin Studio 的 beta 通道。我的构建时间从 10-15 分钟缩短到不到 1 分钟!我强烈建议切换到 beta 频道。完全清理后构建仍然很慢,但如果您进行 1 次更改然后再次构建,现在速度非常快。
  • 您是否找到了使 Xamarin.Forms 从业务角度可行的解决方案?现在是 2018 年 10 月,我正在等待 2~3 分钟才能看到我在模拟器/设备上的代码更改

标签: visual-studio xamarin visual-studio-2015 xamarin.android


【解决方案1】:

虽然这是一个非常“难以”回答的问题,因为构建时间可能取决于许多不同的因素,但我可以引导您确定构建中的什么导致延迟。在大多数情况下,这通常是因为未优化 Resources。这可以是真正应该针对移动设备进行优化的原始图像/音频/视频等资源。

至于您提到的实验性功能,您可以在此处查看发行说明:

https://developer.xamarin.com/releases/android/xamarin.android_7/xamarin.android_7.0/#Improved_Fast_Deployment

注意:这是实验性的,因此不能保证它足够稳定以用于生产。

至于构建时间,我们需要知道项目中的瓶颈在哪里。为此,您需要在构建代理的命令中启用Diagnostic Build Output。这很简单,MSBuild via:

/v:diag/verbosity:diagnostic(或任何你想要的组合)

/clp:PerformanceSummary - 这将告诉使用每个任务的性能时间

https://msdn.microsoft.com/en-us/library/ms164311.aspx

EX:构建文件->新建Android项目:

1>Project Performance Summary:
1>     4087 ms  c:\users\dougl\documents\visual studio 2015\Projects\App26\App26\App26.csproj   1 calls
1>               4087 ms  Rebuild                                    1 calls
1>
1>Target Performance Summary:
1>        0 ms  GetCopyToOutputDirectoryXamlAppDefs        1 calls
1>        0 ms  BeforeRebuild                              1 calls
1>        0 ms  PrepareResources                           1 calls
1>        0 ms  _DefineBuildTargetAbis                     1 calls
1>        0 ms  UpdateAndroidAssets                        1 calls
1>        0 ms  AfterBuild                                 1 calls
1>        0 ms  AfterCompile                               1 calls
1>        0 ms  BeforeCompile                              1 calls
1>        0 ms  ExpressionBuildExtension                   1 calls
1>        0 ms  _GenerateCompileInputs                     1 calls
1>        0 ms  ResolveCodeAnalysisRuleSet                 1 calls
1>        0 ms  _LinkAssemblies                            1 calls
1>        0 ms  GetTargetPath                              1 calls
1>        0 ms  Build                                      1 calls
1>        0 ms  GenerateCompiledExpressionsTempFile        1 calls
1>        0 ms  _CopyConfigFiles                           1 calls
1>        0 ms  Compile                                    1 calls
1>        0 ms  Rebuild                                    1 calls
1>        0 ms  ModifyUnitTestPlatformVersion              1 calls
1>        0 ms  _RegisterMdbFilesWithFileWrites            1 calls
1>        0 ms  _CheckForCompileOutputs                    1 calls
1>        0 ms  _SetupDesignTimeBuildForIntellisense       1 calls
1>        0 ms  _SetTargetFrameworkMonikerAttribute        1 calls
1>        0 ms  _GenerateAndroidAssetsDir                  1 calls
1>        0 ms  _AddMultiDexDependencyJars                 1 calls
1>        0 ms  AfterResolveReferences                     1 calls
1>        0 ms  UpdateAndroidResources                     1 calls
1>        0 ms  _CheckInstantRunCondition                  1 calls
1>        0 ms  CleanPublishFolder                         1 calls
1>        0 ms  _CheckTargetFramework                      1 calls
1>        0 ms  _CollectMonoAndroidOutputs                 1 calls
1>        0 ms  _CopySourceItemsToOutputDirectory          1 calls
1>        0 ms  CompileRdlFiles                            1 calls
1>        0 ms  _CreateAdditionalResourceCache             4 calls
1>        0 ms  DesignTimeXamlMarkupCompilation            1 calls
1>        0 ms  AfterRebuild                               1 calls
1>        0 ms  _SeparateAppExtensionReferences            1 calls
1>        0 ms  ExpandSDKReferences                        1 calls
1>        0 ms  _ReadPropertiesCache                       1 calls
1>        0 ms  AfterResGen                                1 calls
1>        0 ms  CleanReferencedProjects                    1 calls
1>        0 ms  _CollectPCLPdbFiles                        1 calls
1>        0 ms  Clean                                      1 calls
1>        0 ms  SetWin32ManifestProperties                 1 calls
1>        0 ms  ResolveSDKReferences                       1 calls
1>        0 ms  CreateSatelliteAssemblies                  1 calls
1>        0 ms  DeleteBuildInfoResource                    1 calls
1>        0 ms  _ResolveMonoAndroidFramework               1 calls
1>        0 ms  PrepareResourceNames                       1 calls
1>        0 ms  _SetupInstantRun                           1 calls
1>        0 ms  _SetupDesignTimeBuildForBuild              1 calls
1>        0 ms  CoreBuild                                  1 calls
1>        0 ms  _CheckForDeletedResourceFile               1 calls
1>        0 ms  GetFrameworkPaths                          1 calls
1>        0 ms  _ValidateLinkMode                          1 calls
1>        0 ms  DeleteBuildInfoFile                        1 calls
1>        0 ms  _CollectPCLMdbFiles                        1 calls
1>        0 ms  _CompileDex                                1 calls
1>        0 ms  GetInstalledSDKLocations                   1 calls
1>        0 ms  BeforeClean                                1 calls
1>        0 ms  BuildOnlySettings                          1 calls
1>        0 ms  _ValidateResourceCache                     1 calls
1>        0 ms  BeforeResolveReferences                    1 calls
1>        0 ms  _CheckForContent                           1 calls
1>        0 ms  BeforeResGen                               1 calls
1>        0 ms  PrepareRdlFiles                            1 calls
1>        0 ms  AfterClean                                 1 calls
1>        0 ms  _SetupApplicationJavaClass                 1 calls
1>        0 ms  ValidationExtension                        1 calls
1>        0 ms  _IncludeInstanceRunReference               1 calls
1>        0 ms  ResolveReferences                          1 calls
1>        0 ms  CreateCustomManifestResourceNames          1 calls
1>        0 ms  ResGen                                     1 calls
1>        0 ms  BeforeBuild                                1 calls
1>        1 ms  _SplitProjectReferencesByFileExistence     1 calls
1>        1 ms  _GenerateSatelliteAssemblyInputs           1 calls
1>        1 ms  PrepareForRun                              1 calls
1>        1 ms  CleanXsdCodeGen                            1 calls
1>        1 ms  GenerateTargetFrameworkMonikerAttribute    1 calls
1>        1 ms  ResolveProjectReferences                   1 calls
1>        1 ms  AssignTargetPaths                          1 calls
1>        1 ms  _CreateIntermediateAssembliesDir           1 calls
1>        1 ms  GetCopyToOutputDirectoryItems              1 calls
1>        1 ms  PreXsdCodeGen                              1 calls
1>        1 ms  _GetReferenceAssemblyPaths                 1 calls
1>        1 ms  CoreResGen                                 1 calls
1>        1 ms  _CleanGeneratedDeploymentFiles             1 calls
1>        1 ms  SetBuildInfoDefaults                       1 calls
1>        1 ms  AssignProjectConfiguration                 1 calls
1>        1 ms  _CreatePackageWorkspace                    1 calls
1>        1 ms  _GetMonoPlatformJarPath                    1 calls
1>        1 ms  PrepareForBuild                            1 calls
1>        1 ms  _CalculateAdditionalResourceCacheDirectories   1 calls
1>        1 ms  _ComputeAndroidResourcePaths               1 calls
1>        1 ms  _SetEmbeddedWin32ManifestProperties        1 calls
1>        1 ms  _GetAddOnPlatformLibraries                 1 calls
1>        1 ms  _GetLibraryImports                         1 calls
1>        1 ms  SplitResourcesByCulture                    1 calls
1>        1 ms  GetReferenceAssemblyPaths                  1 calls
1>        1 ms  _CheckProjectItems                         1 calls
1>        1 ms  _AdjustJavacVersionArguments               1 calls
1>        1 ms  _CleanGeneratedDebuggingFiles              1 calls
1>        2 ms  _PrepareAssemblies                         1 calls
1>        2 ms  _FindJavaStubFiles                         1 calls
1>        2 ms  _ExtractLibraryProjectImports              1 calls
1>        2 ms  _StripEmbeddedLibraries                    1 calls
1>        2 ms  _CleanGetCurrentAndPriorFileWrites         1 calls
1>        2 ms  _GetAdditionalResourcesFromAssemblies      1 calls
1>        2 ms  _FindCompiledJavaFiles                     1 calls
1>        2 ms  _CheckDuplicateJavaLibraries               1 calls
1>        2 ms  _AddLibraryProjectsEmbeddedResourceToProject   1 calls
1>        3 ms  _ComputeAndroidAssetsPaths                 1 calls
1>        3 ms  CopyFilesToOutputDirectory                 1 calls
1>        3 ms  CoreClean                                  1 calls
1>        3 ms  _CollectPdbFiles                           1 calls
1>        3 ms  GetBuiltProjectOutputRecursive             1 calls
1>        3 ms  _CollectConfigFiles                        1 calls
1>        3 ms  _ValidateAndroidPackageProperties          1 calls
1>        3 ms  _WriteResolvedAssemblies                   1 calls
1>        4 ms  _CreatePropertiesCache                     1 calls
1>        4 ms  _ResolveMonoAndroidSdks                    1 calls
1>        4 ms  _AddDebugStaticResources                   1 calls
1>        4 ms  _BuildLibraryImportsCache                  1 calls
1>        4 ms  _CollectMdbFiles                           1 calls
1>        5 ms  _CheckForInvalidConfigurationAndPlatform   1 calls
1>        7 ms  _ResolveSatellitePaths                     1 calls
1>        7 ms  _GeneratePackageManagerJava                1 calls
1>        8 ms  _DetermineJavaLibrariesToCompile           1 calls
1>        9 ms  IncrementalClean                           1 calls
1>       10 ms  _AddStaticResources                        1 calls
1>       11 ms  _CleanMonoAndroidIntermediateDir           1 calls
1>       11 ms  _GenerateAndroidResourceDir                1 calls
1>       12 ms  _CleanMsymArchive                          1 calls
1>       18 ms  _SetLatestTargetFrameworkVersion           1 calls
1>       20 ms  ResolveAssemblyReferences                  1 calls
1>       27 ms  ImplicitlyExpandDesignTimeFacades          1 calls
1>       30 ms  _BuildSdkCache                             1 calls
1>       35 ms  _ConvertPdbFiles                           1 calls
1>       45 ms  _CheckTargetFrameworks                     1 calls
1>       46 ms  _ResolveLibraryProjectImports              1 calls
1>       52 ms  _CreateBaseApk                             1 calls
1>       66 ms  _BuildAdditionalResourcesCache             1 calls
1>       72 ms  _CopyMdbFiles                              1 calls
1>       78 ms  _ResolveAssemblies                         1 calls
1>      115 ms  _UpdateAndroidResgen                       1 calls
1>      167 ms  _GenerateJavaStubs                         1 calls
1>      189 ms  _GetPrimaryCpuAbi                          1 calls
1>      453 ms  _CopyIntermediateAssemblies                1 calls
1>      515 ms  _LinkAssembliesNoShrink                    1 calls
1>      657 ms  _CompileToDalvikWithDx                     1 calls
1>      664 ms  _CompileJava                               1 calls
1>      677 ms  CoreCompile                                1 calls
1>
1>Task Performance Summary:
1>        0 ms  CallTarget                                 1 calls
1>        0 ms  MSBuild                                    1 calls
1>        0 ms  ResolveCodeAnalysisRuleSet                 1 calls
1>        0 ms  ReadLinesFromFile                          2 calls
1>        0 ms  GetFrameworkPath                           1 calls
1>        0 ms  FindAppConfigFile                          1 calls
1>        0 ms  AssignCulture                              1 calls
1>        1 ms  GetAppSettingsDirectory                    1 calls
1>        1 ms  ConvertToAbsolutePath                      1 calls
1>        1 ms  RemoveDuplicates                           3 calls
1>        1 ms  AssignTargetPath                           6 calls
1>        1 ms  CollectLibraryAssets                       1 calls
1>        1 ms  AssignProjectConfiguration                 1 calls
1>        1 ms  GetMonoPlatformJar                         1 calls
1>        1 ms  CalculateAdditionalResourceCacheDirectories   1 calls
1>        1 ms  CreateTemporaryDirectory                   2 calls
1>        1 ms  GetAndroidDefineConstants                  1 calls
1>        1 ms  GetAddOnPlatformLibraries                  1 calls
1>        1 ms  ReadImportedLibrariesCache                 1 calls
1>        1 ms  ReadAdditionalResourcesFromAssemblyCache   1 calls
1>        1 ms  CheckProjectItems                          1 calls
1>        1 ms  GetReferenceAssemblyPaths                  2 calls
1>        1 ms  AdjustJavacVersionArguments                1 calls
1>        2 ms  FindUnderPath                              7 calls
1>        2 ms  Message                                   17 calls
1>        2 ms  ReadLibraryProjectImportsCache             1 calls
1>        2 ms  MakeDir                                    6 calls
1>        2 ms  CreateAndroidResourceStamp                 1 calls
1>        2 ms  CreateProperty                            42 calls
1>        2 ms  CopyIfChanged                              1 calls
1>        2 ms  GetAndroidPackageName                      2 calls
1>        2 ms  GetJavaPlatformJar                         1 calls
1>        2 ms  GetExtraPackages                           2 calls
1>        2 ms  CheckDuplicateJavaLibraries                1 calls
1>        2 ms  CreateManagedLibraryResourceArchive        1 calls
1>        3 ms  RemoveUnknownFiles                         1 calls
1>        3 ms  AndroidComputeResPaths                     2 calls
1>        3 ms  CreateResgenManifest                       1 calls
1>        4 ms  GetImportedLibraries                       1 calls
1>        4 ms  GetFilesThatExist                          3 calls
1>        6 ms  Touch                                      7 calls
1>        6 ms  CopyGeneratedJavaResourceClasses           2 calls
1>        7 ms  CreateItem                                20 calls
1>        7 ms  GeneratePackageManagerJava                 1 calls
1>        7 ms  DetermineJavaLibrariesToCompile            1 calls
1>        8 ms  Delete                                    28 calls
1>       10 ms  CopyResource                               4 calls
1>       11 ms  RemoveDirFixed                             5 calls
1>       12 ms  WriteLinesToFile                           5 calls
1>       17 ms  ReadResolvedSdksCache                      1 calls
1>       27 ms  ResolveAssemblyReference                   2 calls
1>       29 ms  GenerateResourceDesigner                   1 calls
1>       29 ms  ResolveSdks                                1 calls
1>       29 ms  ConvertResourcesCases                      3 calls
1>       35 ms  ConvertDebuggingFiles                      1 calls
1>       45 ms  CheckTargetFrameworks                      1 calls
1>       45 ms  ResolveLibraryProjectImports               1 calls
1>       52 ms  CopyMdbFiles                               1 calls
1>       65 ms  GetAdditionalResourcesFromAssemblies       1 calls
1>       77 ms  ResolveAssemblies                          1 calls
1>       92 ms  Aapt                                       2 calls
1>      161 ms  GenerateJavaStubs                          1 calls
1>      186 ms  GetPrimaryCpuAbi                           1 calls
1>      479 ms  Copy                                       7 calls
1>      513 ms  LinkAssemblies                             1 calls
1>      655 ms  CompileToDalvik                            1 calls
1>      660 ms  Csc                                        1 calls
1>      664 ms  Javac                                      1 calls
1>
1>Build succeeded.
1>
1>Time Elapsed 00:00:04.08

请注意,我们可以知道此构建花费了多长时间:4 秒。但是,这并不能回答您的情况,但是有了这样的适当日志,我们就可以调查 TargetTask 并找出您的项目遇到的瓶颈。我的猜测是 aapt,但这只是因为即使是 Android Studio 也会挂在这里,因为这个工具在 Android SDK 内,它负责打包 android 资产。

编辑:

看起来这个构建需要大约 2 分钟来构建 2 个项目。一个在C:\Development\Apps\trunk\App.Droid\App.Droid.ServiceClient\App.Droid.ServiceClient.csproj,另一个在C:\Development\Apps\trunk\App.Droid\App.Droid\App.Droid.csproj(分别为40 / 87 秒)。对于一个对 Android 支持/Google Play 有这么多第三方依赖的项目来说,这似乎很正常。您可以搜索字符串 Task "GetAdditionalResourcesFromAssemblies 以显示 6 个定义它的位置。由于 2 个 Android 项目,此处调用了 2 个任务。

可能值得比较一个具有这么多外部依赖项的 Android Studio 项目并比较时间。我知道我们目前有很多关于GetAdditionalResourcesFromAssemblies 任务的持续工作。然而,这项工作要到第 9-10 周期才能使用。这项工作目前是拉取请求的一部分:

https://github.com/xamarin/xamarin-android/pull/296

(由于提交时间,您可以说它几乎是全新的)。

从这个任务可以看出,会有以下改进:

当前任务总是从谷歌下载数据。这不管 Android sdk 目录中是否已经存在这些文件。 此提交更改了 GetAdditionalResourcesFromAssemblies 任务 在 android sdk 中的“extras”文件夹中查找所需的 .aar 文件。这意味着如果用户拥有最新的 sdk,将会 几乎不需要从网上下载文件。

还有一个 PR - https://github.com/xamarin/xamarin-android/pull/292(感谢@Mikhail)

哪些地址重用计算的哈希值,也可以缩短构建时间。

TLDR; GetAdditionalResourcesFromAssemblies 需要更多的工作才能缩短构建时间。目前正在开发中。

编辑 2:

目前已在包含对 https://www.nuget.org/packages/Xamarin.Build.Download/ 的依赖项的支持库中解决此问题

【讨论】:

  • 感谢您的帮助!欣赏它。我用我自己所做的事情更新了我的问题,以查明这个问题的根源。根据您的要求,还包括诊断构建日志。希望它有助于找到问题。再次感谢!
  • 它确实有很多依赖关系。这是一个相当大的应用程序。我知道每个依赖项都会占用 x 量的构建时间,但我提出了这个问题,因为我发现构建时间的主要增加非常奇怪。我记得的一件事是,支持库 v4 已被分成 5 个不同的包。这发生在版本 24.2.0 中,因此添加了一些依赖项,因为我从 23.4.0.1 更新。见developer.android.com/topic/libraries/support-library/…。这可能是问题吗?很高兴听到您正在努力改进构建时间。
  • 这可能是部分问题。我将不得不查看运行相同 Xamarin 版本但不同支持库版本(23 与 24)的构建输出日志。这些项目被“拆分”的原因是因为谷歌在最近的版本中这样做了。您可以在修订历史记录中看到这一点:developer.android.com/topic/libraries/support-library/…(手动检查 24.2.0,因为链接不起作用)我相信此任务中的此修复将解决您构建时的大部分问题。
  • 我认为我们将看到的唯一重大区别是 v23 与 v24 的构建时间更少,因为包的分离和Task 总是下载数据。因此,在修复之前不会有很好的方法来解决这个问题。
  • 刚刚用 v23 的构建日志更新了这个问题。这是构建时间的显着差异。你能检查一下,看看你有没有发现什么?感谢您的支持!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-25
  • 1970-01-01
  • 2018-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-05
相关资源
最近更新 更多