Skip to content

Commit 2e8acea

Browse files
Requested changes from review + build refactoring
~~ xa-prep-tasks ~~ The `<DownloadUri/>` MSBuild task now has an optional `HashHeader` property: - If set, a http HEAD request is made to the URL, and the destination file path gets a suffix added for the value. - To make this work properly, `DestinationFiles` is also an `[Output]` property, since these paths could change as a result. ~~ android-toolchain ~~ Chromium's `depot_tools` are downloaded the same as all of our other dependencies. I had to update the `<DownloadUri/>` MSBuild task to have an optional `HashHeader` property and made `DestinationFiles` an `<Output/>`. We can use this to populate `@(_DownloadedItem)`. `_UnzipFiles` also "bootstraps" `depot_tools`, and has to set/unset `$PATH` appropriately. I did this in the same place as the license acceptance for the Android SDK. ~~ r8.targets ~~ - Removed all of the `depot_tools` downloading code, and setup `android-toolchain` as a `@(ProjectReference)` - All targets that set `$PATH`, unset it when finished - Use `$(_GradleArgs)` to supply `--no-daemon` - `_CleanR8` should delete `*.jar` files in our build tree ~~ Xamarin.Android.Build.Tasks ~~ - Fixed any formatting that we noticed - Renamed `$(AndroidD8JarPath)` and `$(AndroidR8JarPath)` to be prefixed with `Android` - Refactored `$(IntermediateOutputPath)_dex_stamp` stamp file in `_CompileToDalvikWithDx` and `_CompileToDalvikWithD8` to match the new convention of `$(_AndroidStampDirectory)_CompileToDalvik.stamp` - `*.dex` files weren't in `FileWrites`??? - `CompileToDalvik` had a `DexOutputs` output property that was completely unused, so I removed it. Also removed extra log messages.
1 parent c8719f0 commit 2e8acea

File tree

10 files changed

+170
-150
lines changed

10 files changed

+170
-150
lines changed

Configuration.props

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
<CmakePath Condition=" '$(CmakePath)' == '' ">$(AndroidSdkCmakeDirectory)\bin\cmake</CmakePath>
6565
<NinjaPath Condition=" '$(NinjaPath)' == '' ">$(AndroidSdkCmakeDirectory)\bin\ninja</NinjaPath>
6666
<AntDirectory>$(AndroidToolchainDirectory)\ant</AntDirectory>
67+
<ChromeToolsDirectory>$(AndroidToolchainDirectory)\depot_tools</ChromeToolsDirectory>
6768
<AntToolPath>$(AntDirectory)\bin</AntToolPath>
6869
<AndroidSupportedHostJitAbis Condition=" '$(AndroidSupportedHostJitAbis)' == '' ">$(HostOS)</AndroidSupportedHostJitAbis>
6970
<AndroidSupportedTargetJitAbis Condition=" '$(AndroidSupportedTargetJitAbis)' == '' ">armeabi-v7a:x86</AndroidSupportedTargetJitAbis>

Documentation/guides/BuildProcess.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,11 @@ when packaing Release applications.
210210

211211
This property is `False` by default.
212212

213+
- **AndroidD8JarPath** &ndash; The path to `d8.jar` for use with the
214+
d8 dex-compiler. Defaults to a path in the Xamarin.Android
215+
installation. For further information see our documentation on [D8
216+
and R8][d8-r8].
217+
213218
- **AndroidDexTool** &ndash; An enum-style property with valid
214219
values of `dx` or `d8`. Indicates which Android [dex][dex]
215220
compiler is used during the Xamarin.Android build process.
@@ -406,6 +411,11 @@ when packaing Release applications.
406411
produce the actual `AndroidManifest.xml`.
407412
The `$(AndroidManifest)` must contain the package name in the `/manifest/@package` attribute.
408413

414+
- **AndroidR8JarPath** &ndash; The path to `r8.jar` for use with the
415+
r8 dex-compiler and shrinker. Defaults to a path in the
416+
Xamarin.Android installation. For further information see our
417+
documentation on [D8 and R8][d8-r8].
418+
409419
- **AndroidSdkBuildToolsVersion** &ndash; The Android SDK
410420
build-tools package provides the **aapt** and **zipalign** tools,
411421
among others. Multiple different versions of the build-tools package

build-tools/android-toolchain/android-toolchain.projitems

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<PropertyGroup>
44
<AndroidUri Condition=" '$(AndroidUri)' == '' ">https://dl.google.com/android/repository</AndroidUri>
55
<AntUri Condition=" '$(AntUri)' == '' ">https://archive.apache.org/dist/ant/binaries</AntUri>
6+
<ChromeUri Condition=" '$(ChromeUri)' == '' ">https://storage.googleapis.com/chrome-infra</ChromeUri>
67
</PropertyGroup>
78
<ItemGroup>
89
<AndroidNdkItem Include="android-ndk-r14b-linux-x86_64">
@@ -162,4 +163,15 @@
162163
<HostOS></HostOS>
163164
</AntItem>
164165
</ItemGroup>
166+
<ItemGroup>
167+
<!--
168+
depot_tools, a set of git extensions from Chromium
169+
http://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html
170+
-->
171+
<ChromeItem Include="depot_tools">
172+
<HostOS></HostOS>
173+
<NoSubdirectory>True</NoSubdirectory>
174+
<HashHeader>x-goog-hash</HashHeader>
175+
</ChromeItem>
176+
</ItemGroup>
165177
</Project>

build-tools/android-toolchain/android-toolchain.targets

Lines changed: 44 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3-
<UsingTask AssemblyFile="$(MSBuildThisFileDirectory)..\..\bin\Build$(Configuration)\xa-prep-tasks.dll" TaskName="Xamarin.Android.BuildTools.PrepTasks.AcceptAndroidSdkLicenses" />
4-
<UsingTask AssemblyFile="$(MSBuildThisFileDirectory)..\..\bin\Build$(Configuration)\xa-prep-tasks.dll" TaskName="Xamarin.Android.BuildTools.PrepTasks.GitCommitHash" />
3+
<UsingTask AssemblyFile="..\..\bin\Build$(Configuration)\xa-prep-tasks.dll" TaskName="Xamarin.Android.BuildTools.PrepTasks.AcceptAndroidSdkLicenses" />
4+
<UsingTask AssemblyFile="..\..\bin\Build$(Configuration)\xa-prep-tasks.dll" TaskName="Xamarin.Android.BuildTools.PrepTasks.GitCommitHash" />
5+
<UsingTask AssemblyFile="..\..\bin\Build$(Configuration)\xa-prep-tasks.dll" TaskName="Xamarin.Android.BuildTools.PrepTasks.SetEnvironmentVariable" />
56
<PropertyGroup>
67
<BuildDependsOn>
78
ResolveReferences;
@@ -27,35 +28,50 @@
2728
Condition=" '%(HostOS)' == '$(HostOS)' Or '%(HostOS)' == '' ">
2829
<Output TaskParameter="Include" ItemName="_PlatformAntItem"/>
2930
</CreateItem>
31+
<CreateItem
32+
Include="@(ChromeItem)"
33+
Condition=" '%(HostOS)' == '$(HostOS)' Or '%(HostOS)' == '' ">
34+
<Output TaskParameter="Include" ItemName="_PlatformChromeItem"/>
35+
</CreateItem>
3036
<ItemGroup>
3137
<_SdkStampFiles Include="@(_PlatformAndroidSdkItem->'$(AndroidToolchainDirectory)\sdk\.stamp-%(Identity)')" />
3238
</ItemGroup>
3339
<ItemGroup>
3440
<_SdkStampFiles Include="@(_PlatformAntItem->'$(AntDirectory)\.stamp-%(Identity)')" />
3541
</ItemGroup>
36-
<ItemGroup>
37-
<_DownloadedItem Include="@(_PlatformAndroidSdkItem->'$(AndroidToolchainCacheDirectory)\%(Identity).zip')" />
38-
<_DownloadedItem Include="@(_PlatformAndroidNdkItem->'$(AndroidToolchainCacheDirectory)\%(Identity).zip')" />
39-
<_DownloadedItem Include="@(_PlatformAntItem->'$(AndroidToolchainCacheDirectory)\%(Identity).zip')" />
40-
</ItemGroup>
4142
</Target>
4243
<Target Name="_DownloadItems"
4344
DependsOnTargets="_DetermineItems"
4445
Outputs="@(_DownloadedItem)">
4546
<MakeDir Directories="$(AndroidToolchainCacheDirectory)" />
4647
<DownloadUri
4748
SourceUris="@(_PlatformAndroidSdkItem->'$(AndroidUri)/%(RelUrl)%(Identity).zip');@(_PlatformAndroidNdkItem->'$(AndroidUri)/%(RelUrl)%(Identity).zip')"
48-
DestinationFiles="@(_PlatformAndroidSdkItem->'$(AndroidToolchainCacheDirectory)\%(Identity).zip');@(_PlatformAndroidNdkItem->'$(AndroidToolchainCacheDirectory)\%(Identity).zip')"
49-
/>
49+
DestinationFiles="@(_PlatformAndroidSdkItem->'$(AndroidToolchainCacheDirectory)\%(Identity).zip');@(_PlatformAndroidNdkItem->'$(AndroidToolchainCacheDirectory)\%(Identity).zip')">
50+
<Output TaskParameter="DestinationFiles" ItemName="_DownloadedItem" />
51+
</DownloadUri>
5052
<DownloadUri
5153
SourceUris="@(_PlatformAntItem->'$(AntUri)/%(RelUrl)%(Identity).zip')"
52-
DestinationFiles="@(_PlatformAntItem->'$(AndroidToolchainCacheDirectory)\%(Identity).zip')"
53-
/>
54+
DestinationFiles="@(_PlatformAntItem->'$(AndroidToolchainCacheDirectory)\%(Identity).zip')">
55+
<Output TaskParameter="DestinationFiles" ItemName="_DownloadedItem" />
56+
</DownloadUri>
57+
<DownloadUri
58+
SourceUris="@(_PlatformChromeItem->'$(ChromeUri)/%(RelUrl)%(Identity).zip')"
59+
DestinationFiles="@(_PlatformChromeItem->'$(AndroidToolchainCacheDirectory)\%(Identity).zip')"
60+
HashHeader="%(_PlatformChromeItem.HashHeader)">
61+
<Output TaskParameter="DestinationFiles" ItemName="_DownloadedItem" />
62+
<Output TaskParameter="DestinationFiles" ItemName="_DownloadedChromeItem" />
63+
</DownloadUri>
64+
<ItemGroup>
65+
<_SdkStampFiles Include="@(_DownloadedChromeItem->'$(ChromeToolsDirectory)\.stamp-%(FileName)')" />
66+
</ItemGroup>
5467
</Target>
5568
<Target Name="_UnzipFiles"
5669
DependsOnTargets="_DetermineItems"
5770
Inputs="@(_DownloadedItem)"
5871
Outputs="@(_SdkStampFiles);$(AndroidToolchainDirectory)\ndk\.stamp-ndk">
72+
<PropertyGroup>
73+
<_OriginalPath>$(PATH)</_OriginalPath>
74+
</PropertyGroup>
5975
<CreateItem
6076
Include="@(_PlatformAndroidSdkItem->'$(AndroidToolchainCacheDirectory)\%(_PlatformAndroidSdkItem.Identity).zip'">
6177
<Output TaskParameter="Include" ItemName="_AndroidSdkItems"/>
@@ -66,8 +82,8 @@
6682
<Output TaskParameter="Include" ItemName="_AndroidNdkItems"/>
6783
</CreateItem>
6884

69-
<RemoveDir Directories="$(AndroidSdkDirectory);$(AndroidNdkDirectory);$(AntDirectory)" />
70-
<MakeDir Directories="$(AndroidSdkDirectory);$(AndroidNdkDirectory);$(AntDirectory)" />
85+
<RemoveDir Directories="$(AndroidSdkDirectory);$(AndroidNdkDirectory);$(AntDirectory);$(ChromeToolsDirectory)" />
86+
<MakeDir Directories="$(AndroidSdkDirectory);$(AndroidNdkDirectory);$(AntDirectory);$(ChromeToolsDirectory)" />
7187

7288
<UnzipDirectoryChildren
7389
HostOS="$(HostOS)"
@@ -87,7 +103,22 @@
87103
SourceFiles="@(_PlatformAntItem->'$(AndroidToolchainCacheDirectory)\%(Identity).zip')"
88104
DestinationFolder="$(AntDirectory)"
89105
/>
106+
<UnzipDirectoryChildren
107+
HostOS="$(HostOS)"
108+
NoSubdirectory="%(_DownloadedChromeItem.NoSubdirectory)"
109+
SourceFiles="@(_DownloadedChromeItem)"
110+
DestinationFolder="$(ChromeToolsDirectory)"
111+
/>
90112
<AcceptAndroidSdkLicenses AndroidSdkDirectory="$(AndroidSdkDirectory)" JavaSdkDirectory="$(JavaSdkDirectory)" />
113+
<Xamarin.Android.BuildTools.PrepTasks.SetEnvironmentVariable
114+
Name="PATH"
115+
Value="$([System.IO.Path]::GetFullPath('$(ChromeToolsDirectory)'))$(PathSeparator)$(_OriginalPath)"
116+
/>
117+
<Exec Command="gclient --version" />
118+
<Xamarin.Android.BuildTools.PrepTasks.SetEnvironmentVariable
119+
Name="PATH"
120+
Value="$(_OriginalPath)"
121+
/>
91122
<Touch
92123
Files="@(_SdkStampFiles);$(AndroidToolchainDirectory)\ndk\.stamp-ndk"
93124
AlwaysCreate="True"

build-tools/xa-prep-tasks/Xamarin.Android.BuildTools.PrepTasks/DownloadUri.cs

Lines changed: 45 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.IO;
3+
using System.Linq;
34
using System.Net.Http;
45
using System.Threading;
56
using System.Threading.Tasks;
@@ -21,9 +22,11 @@ public DownloadUri ()
2122
[Required]
2223
public string[] SourceUris { get; set; }
2324

24-
[Required]
25+
[Required, Output]
2526
public ITaskItem[] DestinationFiles { get; set; }
2627

28+
public string HashHeader { get; set; }
29+
2730
CancellationTokenSource cancellationTokenSource;
2831

2932
public void Cancel ()
@@ -33,42 +36,44 @@ public void Cancel ()
3336

3437
public override bool Execute ()
3538
{
36-
Log.LogMessage (MessageImportance.Low, "DownloadUri:");
37-
Log.LogMessage (MessageImportance.Low, " SourceUris:");
38-
foreach (var uri in SourceUris) {
39-
Log.LogMessage (MessageImportance.Low, " {0}", uri);
40-
}
41-
Log.LogMessage (MessageImportance.Low, " DestinationFiles:");
42-
foreach (var dest in DestinationFiles) {
43-
Log.LogMessage (MessageImportance.Low, " {0}", dest.ItemSpec);
44-
}
45-
4639
if (SourceUris.Length != DestinationFiles.Length) {
4740
Log.LogError ("SourceUris.Length must equal DestinationFiles.Length.");
4841
return false;
4942
}
5043

5144
var source = cancellationTokenSource = new CancellationTokenSource ();
52-
var tasks = new TTask [SourceUris.Length];
45+
var tasks = new Task<ITaskItem> [SourceUris.Length];
5346
using (var client = new HttpClient ()) {
5447
client.Timeout = TimeSpan.FromHours (3);
5548
for (int i = 0; i < SourceUris.Length; ++i) {
56-
tasks [i] = DownloadFile (client, source, SourceUris [i], DestinationFiles [i].ItemSpec);
49+
tasks [i] = DownloadFile (client, source, SourceUris [i], DestinationFiles [i]);
5750
}
5851
TTask.WaitAll (tasks, source.Token);
5952
}
6053

54+
DestinationFiles = tasks.Select (t => t.Result).ToArray ();
55+
6156
return !Log.HasLoggedErrors;
6257
}
6358

64-
async TTask DownloadFile (HttpClient client, CancellationTokenSource source, string uri, string destinationFile)
59+
async Task<ITaskItem> DownloadFile (HttpClient client, CancellationTokenSource source, string uri, ITaskItem destinationFile)
6560
{
66-
if (File.Exists (destinationFile)) {
61+
if (!string.IsNullOrEmpty (HashHeader)) {
62+
var hashSuffix = await CheckHashHeader (client, source, uri);
63+
if (!string.IsNullOrEmpty (hashSuffix)) {
64+
var directory = Path.GetDirectoryName (destinationFile.ItemSpec);
65+
var fileName = Path.GetFileNameWithoutExtension (destinationFile.ItemSpec);
66+
var extension = Path.GetExtension (destinationFile.ItemSpec);
67+
destinationFile.ItemSpec = Path.Combine (directory, fileName + "-" + hashSuffix + extension);
68+
Log.LogMessage (MessageImportance.Normal, $"Hash found using '{HashHeader}', destination file changing to '{destinationFile}'.");
69+
}
70+
}
71+
if (File.Exists (destinationFile.ItemSpec)) {
6772
Log.LogMessage (MessageImportance.Normal, $"Skipping uri '{uri}' as destination file already exists '{destinationFile}'.");
68-
return;
73+
return destinationFile;
6974
}
70-
var dp = Path.GetDirectoryName (destinationFile);
71-
var dn = Path.GetFileName (destinationFile);
75+
var dp = Path.GetDirectoryName (destinationFile.ItemSpec);
76+
var dn = Path.GetFileName (destinationFile.ItemSpec);
7277
var tempPath = Path.Combine (dp, "." + dn + ".download");
7378
Directory.CreateDirectory(dp);
7479

@@ -82,12 +87,33 @@ async TTask DownloadFile (HttpClient client, CancellationTokenSource source, str
8287
}
8388
}
8489
Log.LogMessage (MessageImportance.Low, $"mv '{tempPath}' '{destinationFile}'.");
85-
File.Move (tempPath, destinationFile);
90+
File.Move (tempPath, destinationFile.ItemSpec);
8691
}
8792
catch (Exception e) {
8893
Log.LogError ("Unable to download URL `{0}` to `{1}`: {2}", uri, destinationFile, e.Message);
8994
Log.LogErrorFromException (e);
9095
}
96+
return destinationFile;
97+
}
98+
99+
async Task<string> CheckHashHeader (HttpClient client, CancellationTokenSource source, string uri)
100+
{
101+
var request = new HttpRequestMessage (HttpMethod.Head, uri);
102+
using (var response = await client.SendAsync (request, source.Token)) {
103+
response.EnsureSuccessStatusCode ();
104+
if (response.Headers.TryGetValues (HashHeader, out var values)) {
105+
foreach (var value in values) {
106+
Log.LogMessage (MessageImportance.Low, $"{HashHeader}: {value}");
107+
108+
//Current format: `x-goog-hash: crc32c=8HATIw==`
109+
if (!string.IsNullOrWhiteSpace (value)) {
110+
return value.Trim ();
111+
}
112+
}
113+
}
114+
}
115+
116+
return null;
91117
}
92118
}
93119
}

src/Xamarin.Android.Build.Tasks/Tasks/CompileToDalvik.cs

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,6 @@ public class CompileToDalvik : JavaToolTask
3636

3737
public string MultiDexMainDexListFile { get; set; }
3838

39-
[Output]
40-
public string [] DexOutputs { get; set; }
41-
4239
string inputListFile;
4340

4441
protected override string ToolName {
@@ -51,32 +48,13 @@ protected override string ToolName {
5148

5249
public override bool Execute ()
5350
{
54-
Log.LogDebugMessage ("CompileToDalvik");
55-
Log.LogDebugMessage (" JavaOptions: {0}", JavaOptions);
56-
Log.LogDebugMessage (" JavaMaximumHeapSize: {0}", JavaMaximumHeapSize);
57-
Log.LogDebugMessage (" ClassesOutputDirectory: {0}", ClassesOutputDirectory);
58-
Log.LogDebugMessage (" JavaToolPath: {0}", JavaToolPath);
59-
Log.LogDebugMessage (" DxJarPath: {0}", DxJarPath);
60-
Log.LogDebugMessage (" ToolExe: {0}", ToolExe);
61-
Log.LogDebugMessage (" ToolPath: {0}", ToolPath);
62-
Log.LogDebugMessage (" UseDx: {0}", UseDx);
63-
Log.LogDebugMessage (" DxExtraArguments: {0}", DxExtraArguments);
64-
Log.LogDebugMessage (" MultiDexEnabled: {0}", MultiDexEnabled);
65-
Log.LogDebugMessage (" MultiDexMainDexListFile: {0}", MultiDexMainDexListFile);
66-
Log.LogDebugTaskItems (" JavaLibrariesToCompile:", JavaLibrariesToCompile);
67-
Log.LogDebugTaskItems (" AlternativeJarFiles:", AlternativeJarFiles);
68-
6951
if (!Directory.Exists (ClassesOutputDirectory))
7052
Directory.CreateDirectory (ClassesOutputDirectory);
7153

7254
bool ret = false;
7355
inputListFile = Path.GetTempFileName ();
7456
try {
7557
ret = base.Execute ();
76-
77-
DexOutputs = Directory.GetFiles (Path.GetDirectoryName (ClassesOutputDirectory), "*.dex", SearchOption.TopDirectoryOnly);
78-
79-
Log.LogDebugTaskItems (" DexOutputs: ", DexOutputs);
8058
} catch (FileNotFoundException ex) {
8159
Log.LogCodedError ("XA1003", ex.ToString ());
8260
} finally {

src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -965,14 +965,14 @@ because xbuild doesn't support framework reference assemblies.
965965
</CreateProperty>
966966

967967
<CreateProperty Value="$(MonoAndroidToolsDirectory)\r8.jar">
968-
<Output TaskParameter="Value" PropertyName="R8JarPath"
969-
Condition="'$(R8JarPath)' == ''"
968+
<Output TaskParameter="Value" PropertyName="AndroidR8JarPath"
969+
Condition="'$(AndroidR8JarPath)' == ''"
970970
/>
971971
</CreateProperty>
972972

973973
<CreateProperty Value="$(MonoAndroidToolsDirectory)\d8.jar">
974-
<Output TaskParameter="Value" PropertyName="D8JarPath"
975-
Condition="'$(D8JarPath)' == ''"
974+
<Output TaskParameter="Value" PropertyName="AndroidD8JarPath"
975+
Condition="'$(AndroidD8JarPath)' == ''"
976976
/>
977977
</CreateProperty>
978978

@@ -2549,7 +2549,7 @@ because xbuild doesn't support framework reference assemblies.
25492549
DependsOnTargets="$(_BeforeCompileToDalvikWithDx);$(_CompileToDalvikDependsOnTargets)"
25502550
Condition=" '$(AndroidDexTool)' == 'dx' "
25512551
Inputs="$(_CompileToDalvikInputs)"
2552-
Outputs="$(IntermediateOutputPath)_dex_stamp">
2552+
Outputs="$(_AndroidStampDirectory)_CompileToDalvik.stamp">
25532553

25542554
<!-- Desugar if exists -->
25552555
<Error
@@ -2654,9 +2654,9 @@ because xbuild doesn't support framework reference assemblies.
26542654
JavaLibrariesToCompile="@(_JavaLibrariesToCompileForAppDx)"
26552655
AlternativeJarFiles="@(_AlternativeJarForAppDx)"
26562656
/>
2657-
<Touch Files="$(IntermediateOutputPath)_dex_stamp" AlwaysCreate="true" />
2657+
<Touch Files="$(_AndroidStampDirectory)_CompileToDalvik.stamp" AlwaysCreate="true" />
26582658
<ItemGroup>
2659-
<FileWrites Include="$(IntermediateOutputPath)_dex_stamp" />
2659+
<FileWrites Include="$(IntermediateOutputPath)android\bin\*.dex" />
26602660
</ItemGroup>
26612661

26622662
</Target>
@@ -3123,7 +3123,6 @@ because xbuild doesn't support framework reference assemblies.
31233123
<RemoveDirFixed Directories="$(_AndroidAotBinDirectory)" Condition="Exists ('$(_AndroidAotBinDirectory)')" />
31243124
<RemoveDirFixed Directories="$(_AndroidLibraryFlatArchivesDirectory)" Condition="Exists ('$(_AndroidLibraryFlatArchivesDirectory)')" />
31253125
<RemoveDirFixed Directories="$(_AndroidStampDirectory)" Condition="Exists ('$(_AndroidStampDirectory)')" />
3126-
<Delete Files="$(IntermediateOutputPath)_dex_stamp" />
31273126
<Delete Files="$(MonoAndroidIntermediate)R.cs.flag" />
31283127
<Delete Files="$(MonoAndroidIntermediate)acw-map.txt" />
31293128
<Delete Files="$(MonoAndroidIntermediate)customview-map.txt" />

0 commit comments

Comments
 (0)