【问题标题】:Reduce build time Xamarin.Android project减少 Xamarin.Android 项目的构建时间
【发布时间】:2018-07-11 20:36:34
【问题描述】:

目前,我们的 Android 项目的构建时间非常长。

对于具有以下资产数量的 Xamarin Android 项目,这是(请参阅下面的构建日志)正常构建时间吗?

  • 350 个可绘制对象
  • 210 个布局文件
  • 65 个值的 xml 文件

您对加快构建时间有什么建议吗?这真的很烦人。

PS。我们还有一个问题是,每次我们更改 xml 文件中的某些内容时(例如更改布局文件中的颜色时),我们都需要进行干净的构建。

这是我为 Android 模拟器进行干净的 DEBUG 构建时的构建日志:

Done building project "MyApp.Droid.csproj".

Project Evaluation Performance Summary:
139 ms /Users/stefan/Projects/myapp/Core/CoreApp.Core.csproj 2 calls

Project Performance Summary:
70 ms /Users/stefan/Projects/myapp/Core/CoreApp.Core.csproj 4 calls
166920 ms /Users/stefan/Projects/myapp/Droid/CoreApp.Droid.csproj 1 calls

Target Performance Summary:
* ms GetCopyToOutputDirectoryItems 1 calls
0 ms PrepareResourceNames 1 calls
0 ms BeforeResGen 1 calls
0 ms AfterBuild 1 calls
0 ms RunCodeAnalysis 1 calls
0 ms _XamarinBuildAddDownloadedItems 1 calls
0 ms _XamarinBuildDownload 1 calls
0 ms SetWin32ManifestProperties 1 calls
0 ms RunXamarinPackageAnalysis 1 calls
0 ms BeforeResolveReferences 1 calls
0 ms GenerateManifests 1 calls
0 ms RunXamarinProjectAnalysis 1 calls
0 ms UpdateAndroidResources 1 calls
0 ms _XamarinBuildDownloadMasterTarget 1 calls
0 ms PrepareProjectReferences 1 calls
0 ms ResolveNativeReferences 1 calls
0 ms CreateCustomManifestResourceNames 1 calls
0 ms ResolveReferences 1 calls
0 ms GetFrameworkPaths 1 calls
0 ms ResGen 1 calls
0 ms CoreBuild 1 calls
0 ms PrepareForRun 1 calls
0 ms BeforeBuild 1 calls
0 ms CreateSatelliteAssemblies 1 calls
0 ms AfterResolveReferences 1 calls
0 ms Compile 1 calls
0 ms _CopySourceItemsToOutputDirectory 1 calls
0 ms _LinkAssemblies 1 calls
0 ms PrepareResources 1 calls
0 ms AfterResGen 1 calls
0 ms _ResolveMonoAndroidFramework 1 calls
0 ms UpdateAndroidAssets 1 calls
0 ms BeforeCompile 1 calls
0 ms GetTargetFrameworkProperties 1 calls
0 ms AfterCompile 1 calls
0 ms _UpdateAndroidResources 1 calls
0 ms _SetupDesignTimeBuildForBuild 1 calls
0 ms BuildOnlySettings 1 calls
0 ms BclBuildSetRunningFullBuild 1 calls
0 ms _SetupDesignTimeBuildForIntellisense 1 calls
0 ms _XamarinAndroidSupportVectorDrawableArgs 1 calls
0 ms ResolveSDKReferences 1 calls
0 ms _IncludeInstanceRunReference 1 calls
0 ms _ValidateLinkMode 1 calls
0 ms _CheckTargetFramework 1 calls
0 ms _RoslynPublicSignHack 1 calls
0 ms Build 1 calls
0 ms _EmitXamarinProjectAnalysisResults 1 calls
0 ms _CheckForContent 1 calls
0 ms _EmitXamarinPackageAnalysisResults 1 calls
0 ms ComputeIntermediateSatelliteAssemblies 1 calls
0 ms ExpandSDKReferences 1 calls
0 ms ProcessGoogleServicesJsonChecks 1 calls
0 ms _SetupInstantRun 1 calls
0 ms _SetupApplicationJavaClass 1 calls
0 ms BclBuildGetTargetPath 1 calls
0 ms _SeparateAppExtensionReferences 1 calls
0 ms _SetupDesignTimeBuildForCompile 1 calls
0 ms GetTargetPath 2 calls
0 ms _ReadPropertiesCache 1 calls
0 ms GetInstalledSDKLocations 1 calls
0 ms _SetTargetFrameworkMonikerAttribute 1 calls
0 ms GetNativeManifest 1 calls
0 ms _GetReferenceAssemblyPaths 1 calls
0 ms _CheckForDeletedResourceFile 1 calls
0 ms BclBuildAddProjectReferenceProperties 1 calls
0 ms _CheckForCompileOutputs 1 calls
0 ms _AddMultiDexDependencyJars 1 calls
0 ms _DefineBuildTargetAbis 1 calls
0 ms _CheckInstantRunCondition 1 calls
0 ms _GenerateSatelliteAssemblyInputs 1 calls
0 ms _CheckProjectItems 1 calls
0 ms _ValidateResourceCache 1 calls
0 ms VectorDrawableCheckBuildToolsVersionTask 1 calls
0 ms _CalculateAdditionalResourceCacheDirectories 1 calls
0 ms _SetEmbeddedWin32ManifestProperties 1 calls
1 ms _CreateAdditionalResourceCache 5 calls
1 ms _XbdRestoreItems_supportv4 1 calls
1 ms _XbdRestoreItems_transition 1 calls
1 ms _XbdRestoreItems_supportcoreui 1 calls
1 ms _XbdRestoreItems_supportcompat 1 calls
1 ms _CreatePackageWorkspace 1 calls
1 ms _XbdRestoreItems_supportannotations 1 calls
1 ms _XbdRestoreItems_supportfragment 1 calls
1 ms _XbdRestoreItems_firebaseanalytics 1 calls
1 ms _XbdRestoreItems_firebaseiid 1 calls
1 ms _XbdRestoreItems_recyclerviewv7 1 calls
1 ms _XbdRestoreItems_firebasecommon 1 calls
1 ms _XbdRestoreItems_playservicesmaps 1 calls
1 ms _XbdRestoreItems_firebaseanalyticsimpl 1 calls
1 ms _XbdRestoreItems_supportvectordrawable 1 calls
1 ms _XbdRestoreItems_supportmediacompat 1 calls
1 ms _XbdRestoreItems_playservicesanalytics 1 calls
1 ms _XbdRestoreItems_playservicesbase 1 calls
1 ms _XbdRestoreItems_playservicestasks 1 calls
1 ms _XbdRestoreItems_playservicesads 1 calls
1 ms _XbdRestoreItems_playservicesgass 1 calls
1 ms _XbdRestoreItems_supportcoreutils 1 calls
1 ms _XbdRestoreItems_playservicesanalyticsimpl 1 calls
1 ms _XbdRestoreItems_playservicesadslite 1 calls
1 ms _XbdRestoreItems_playservicestagmanagerv4impl 1 calls
1 ms _XbdRestoreItems_customtabs 1 calls
1 ms _XbdRestoreItems_playservicesgcm 1 calls
1 ms _XbdRestoreItems_playservicesbasement 1 calls
1 ms _XbdRestoreItems_playservicesclearcut 1 calls
1 ms _XbdRestoreItems_design 1 calls
1 ms _XbdRestoreItems_playservicesiid 1 calls
1 ms _XbdRestoreItems_cardviewv7 1 calls
1 ms _XbdRestoreItems_appcompatv7 1 calls
1 ms GenerateTargetFrameworkMonikerAttribute 1 calls
1 ms _SplitProjectReferencesByFileExistence 2 calls
1 ms _GenerateCompileInputs 1 calls
1 ms _GetAdditionalResourcesFromAssemblies 1 calls
1 ms _GetMonoPlatformJarPath 1 calls
1 ms _CheckForInvalidConfigurationAndPlatform 1 calls
1 ms _StripEmbeddedLibraries 1 calls
1 ms _CompileDex 1 calls
1 ms CoreResGen 1 calls
1 ms AssignProjectConfiguration 1 calls
1 ms _GetLibraryImports 1 calls
1 ms GetTargetPathWithTargetPlatformMoniker 2 calls
1 ms _XbdRestoreItems_animatedvectordrawable 1 calls
2 ms CheckAbiAndMinSDK 1 calls
2 ms _ExtractLibraryProjectImports 1 calls
2 ms _GetAddOnPlatformLibraries 1 calls
2 ms CreateManifestResourceNames 1 calls
2 ms SplitResourcesByCulture 1 calls
2 ms _ComputeAndroidAssetsPaths 1 calls
2 ms _CheckDuplicateJavaLibraries 1 calls
4 ms _ValidateAndroidPackageProperties 1 calls
4 ms GetReferenceAssemblyPaths 1 calls
4 ms _CreatePropertiesCache 1 calls
4 ms BclBuildValidateNugetPackageReferences 1 calls
5 ms _CreateIntermediateAssembliesDir 1 calls
5 ms _AddDebugStaticResources 1 calls
6 ms PrepareForBuild 1 calls
9 ms _XamarinAndroidBuildResourceRestore 1 calls
10 ms AssignTargetPaths 2 calls
11 ms _ResolveMonoAndroidSdks 1 calls
12 ms _WriteResolvedAssemblies 1 calls
13 ms _PrepareAssemblies 1 calls
13 ms BclBuildDetermineReferencesToRedirect 1 calls
14 ms _CopyConfigFiles 1 calls
16 ms _ConvertPdbFiles 1 calls
16 ms _GeneratePackageManagerJava 1 calls
20 ms _AddStaticResources 1 calls
26 ms _CollectConfigFiles 1 calls
30 ms _GetPrimaryCpuAbi 1 calls
35 ms _CollectPdbFiles 1 calls
36 ms _XamarinAndroidBuildAarRestore 1 calls
37 ms _CollectMdbFiles 1 calls
39 ms _DetermineJavaLibrariesToCompile 1 calls
42 ms CopyFilesToOutputDirectory 1 calls
67 ms _CollectMonoAndroidOutputs 1 calls
69 ms _GenerateCompileDependencyCache 1 calls
81 ms ImplicitlyExpandDesignTimeFacades 1 calls
84 ms _GenerateAndroidAssetsDir 1 calls
87 ms FindReferenceAssembliesForReferences 1 calls
93 ms _GetProjectReferenceTargetFrameworkProperties 2 calls
103 ms _ComputeAndroidResourcePaths 1 calls
105 ms ResolveProjectReferences 1 calls
122 ms _BuildAdditionalResourcesCache 1 calls
128 ms _CheckTargetFrameworks 1 calls
148 ms _XamarinAndroidBuildAarProguardConfigs 1 calls
195 ms _BuildLibraryImportsCache 1 calls
204 ms _CopyMdbFiles 1 calls
218 ms _ResolveSatellitePaths 1 calls
236 ms _FindJavaStubFiles 1 calls
245 ms ResolveAssemblyReferences 1 calls
259 ms IncrementalClean 1 calls
265 ms _FindCompiledJavaFiles 1 calls
384 ms _CleanGetCurrentAndPriorFileWrites 1 calls
402 ms _AdjustJavacVersionArguments 1 calls
449 ms _SetLatestTargetFrameworkVersion 1 calls
616 ms _ResolveAssemblies 1 calls
2325 ms _CopyFilesMarkedCopyLocal 1 calls
3294 ms _CopyIntermediateAssemblies 1 calls
3582 ms CoreCompile 1 calls
3708 ms _LinkAssembliesNoShrink 1 calls
4267 ms _GenerateAndroidResourceDir 1 calls
5510 ms _ResolveLibraryProjectImports 1 calls
6131 ms _GenerateJavaDesignerForComponent 1 calls
15153 ms _CompileJava 1 calls
15530 ms _GenerateJavaStubs 1 calls
27014 ms _CreateBaseApk 1 calls
34145 ms _CompileToDalvikWithDx 1 calls
41166 ms _UpdateAndroidResgen 1 calls
(* = timing was not recorded because of reentrancy)

Task Performance Summary:
* ms MSBuild 4 calls
0 ms GetFrameworkPath 1 calls
0 ms CheckProjectItems 1 calls
0 ms GetAppSettingsDirectory 1 calls
0 ms CalculateAdditionalResourceCacheDirectories 1 calls
0 ms VectorDrawableCheckBuildToolsVersionTask 1 calls
0 ms ResolveNonMSBuildProjectOutput 1 calls
0 ms GetReferenceAssemblyPaths 2 calls
0 ms GetAndroidDefineConstants 1 calls
1 ms AssignCulture 1 calls
1 ms ReadAdditionalResourcesFromAssemblyCache 1 calls
1 ms GetExtraPackages 2 calls
1 ms ReadLinesFromFile 1 calls
1 ms CreateTemporaryDirectory 2 calls
1 ms GetMonoPlatformJar 1 calls
1 ms GetJavaPlatformJar 1 calls
1 ms AssignProjectConfiguration 1 calls
1 ms CreateCSharpManifestResourceName 1 calls
1 ms ReadImportedLibrariesCache 1 calls
1 ms XmlPeek 1 calls
1 ms GetAndroidPackageName 1 calls
2 ms ReadLibraryProjectImportsCache 1 calls
2 ms GetAddOnPlatformLibraries 1 calls
2 ms CheckDuplicateJavaLibraries 1 calls
2 ms MakeDir 6 calls
2 ms CollectLibraryAssets 1 calls
3 ms AssignTargetPath 10 calls
3 ms Message 17 calls
4 ms ValidatePackageReferences 1 calls
5 ms FindAppConfigFile 1 calls
6 ms RemoveDirFixed 2 calls
8 ms ConvertDebuggingFiles 1 calls
8 ms XamarinBuildAndroidResourceRestore 1 calls
9 ms CreateResgenManifest 1 calls
9 ms CreateAndroidResourceStamp 1 calls
11 ms ConvertToAbsolutePath 1 calls
12 ms CreateProperty 70 calls
13 ms CopyConfigFiles 1 calls
13 ms CollectPdbFiles 1 calls
15 ms GeneratePackageManagerJava 1 calls
16 ms CopyResource 4 calls
17 ms Delete 3 calls
18 ms Hash 1 calls
19 ms CopyGeneratedJavaResourceClasses 2 calls
20 ms GetFilesThatExist 2 calls
23 ms CopyIfChanged 1 calls
30 ms GetPrimaryCpuAbi 1 calls
36 ms XamarinBuildAndroidAarRestore 1 calls
38 ms DetermineJavaLibrariesToCompile 1 calls
78 ms CopyMdbFiles 1 calls
81 ms WriteLinesToFile 6 calls
104 ms AndroidComputeResPaths 2 calls
121 ms GetAdditionalResourcesFromAssemblies 1 calls
128 ms CheckTargetFrameworks 1 calls
142 ms RemoveUnknownFiles 2 calls
146 ms XamarinBuildAndroidAarProguardConfigs 1 calls
195 ms GetImportedLibraries 1 calls
198 ms RemoveDuplicates 2 calls
212 ms FindUnderPath 5 calls
272 ms Touch 13 calls
402 ms AdjustJavacVersionArguments 1 calls
405 ms GenerateResourceDesigner 1 calls
448 ms ResolveSdks 1 calls
461 ms ResolveAssemblyReference 2 calls
595 ms ResolveAssemblies 1 calls
627 ms CreateItem 263 calls
3579 ms Csc 1 calls
3695 ms LinkAssemblies 1 calls
5509 ms ResolveLibraryProjectImports 1 calls
8166 ms GenerateJavaStubs 1 calls
9682 ms Copy 9 calls
15079 ms CreateMultiDexMainDexClassList 1 calls
15150 ms Javac 1 calls
19063 ms CompileToDalvik 1 calls
33129 ms Aapt 3 calls
48058 ms ConvertResourcesCases 3 calls
(* = timing was not recorded because of reentrancy)

Build succeeded.

Time Elapsed 00:02:46.92

构建配置如下:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'MyApp-Debug|AndroidEmulator' ">
                <MonoAndroidResourcePrefix>Resources;Resources-MyApp</MonoAndroidResourcePrefix>
                <MonoAndroidAssetsPrefix>Assets;Assets-myapp</MonoAndroidAssetsPrefix>
                <AndroidResgenFile>Resources-MyApp\ResourceMyApp.designer.cs</AndroidResgenFile>
                    <AndroidExplicitCrunch>false</AndroidExplicitCrunch>
                <DebugSymbols>true</DebugSymbols>
                <DebugType>full</DebugType>
                <Optimize>false</Optimize>
                <OutputPath>bin\MyApp-Debug\AndroidEmulator</OutputPath>
                <DefineConstants>TRACE;MyApp;DEBUG</DefineConstants>
                <ErrorReport>prompt</ErrorReport>
                <WarningLevel>4</WarningLevel>
                <ConsolePause>false</ConsolePause>
                <EmbedAssembliesIntoApk>false</EmbedAssembliesIntoApk>
                <RunCodeAnalysis>true</RunCodeAnalysis>
                <AndroidEnableMultiDex>true</AndroidEnableMultiDex>
                <AndroidLinkMode>None</AndroidLinkMode>
                <AndroidUseSharedRuntime>true</AndroidUseSharedRuntime>
                <AndroidSupportedAbis>x86</AndroidSupportedAbis>
                <JavaMaximumHeapSize>2G</JavaMaximumHeapSize>
            </PropertyGroup>

【问题讨论】:

  • 拥有这么多资产,是的,其次,如果清理和构建对您来说很忙,我建议您重新构建。

标签: xamarin build msbuild xamarin.android visual-studio-mac


【解决方案1】:

目前,我们的 Android 项目的构建时间非常长。

这对于包含Xamarin.Forms 和所有相应支持库的Xamarin.Android 应用程序来说是相当正常的。 正如您在Performance Summary 中看到的,我们看到资源解析大约需要 33 秒(aapt),java 编译大约需要 15 秒(javac),dex 编译大约需要 19 秒。

如果您想进一步深入研究,可以使用Diagnostic Build Output 并在命令行上手动调用这些命令,看看它们需要多长时间。 其中大部分是由 Android SDK 构建工具完成的工作,这在某种程度上是一个瓶颈。

以下 Android Studio 文档中也有一些很棒的技巧,也可以应用于Xamarin.Android 项目:

https://developer.android.com/studio/build/optimize-your-build.html

我们还有一个问题,每次我们更改 xml 文件中的某些内容(例如更改布局文件中的颜色时)时,我们都需要进行干净的构建 --->“ConvertResourcesCases”任务意外失败

以下是解决此问题的一些建议:

  • 确保您拥有放置项目的文件夹的完全权限。
    • 如果您使用的是 Mac,请确保您的文件在文件属性下“取消阻止”。
    • 如果您使用的是 Windows,请右键单击您的文件夹,选择 Properties,选择 Security 并授予“完全控制权限”。
  • 确保根文件夹路径中没有任何非英文字符。

您对加快构建时间有什么建议吗?

在项目设置中启用Fast Deployment

您可以通过添加以下内容在.csproj 中启用新的Fast Deployment 功能:

<AndroidFastDeploymentType>Assemblies:Dexes</AndroidFastDeploymentType>

此过程加快了构建/部署/调试周期,因为如果仅更改程序集,则不会重新安装程序包。请注意:

仅当$(EmbedAssembliesIntoApk) MSBuild 属性为 False 时才有效,您可以找到它here

您可以在此处找到有关加快构建时间的更多详细信息:

Tips and tricks on how to speed up the time it takes to compile a Xamarin app.

【讨论】:

  • 您对经常发生的问题有任何想法,一些新代码直到重新构建解决方案才更新。它改为使用旧代码和值
【解决方案2】:

对于具有以下资产数量的 Xamarin Android 项目,这是(请参阅下面的构建日志)正常构建时间吗?

是的,是的。即使在原生 Android 中,使用如此多的资产进行构建也需要很多时间。

您对加快构建时间有什么建议吗?

是的,您可以参考this 来优化您的构建。

每次我们更改 xml 文件中的内容时都进行干净的构建

尝试保存文件并等待几秒钟。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    相关资源
    最近更新 更多