Skip to content

Commit 0023d7d

Browse files
committed
Move compression code from BuildApk to utility class
1 parent e5a2454 commit 0023d7d

File tree

2 files changed

+60
-44
lines changed

2 files changed

+60
-44
lines changed

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

Lines changed: 1 addition & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -541,49 +541,7 @@ string CompressAssembly (ITaskItem assembly)
541541
return assembly.ItemSpec;
542542
}
543543

544-
if (bool.TryParse (assembly.GetMetadata ("AndroidSkipCompression"), out bool value) && value) {
545-
Log.LogDebugMessage ($"Skipping compression of {assembly.ItemSpec} due to 'AndroidSkipCompression' == 'true' ");
546-
return assembly.ItemSpec;
547-
}
548-
549-
string key = CompressedAssemblyInfo.GetDictionaryKey (assembly);
550-
AndroidTargetArch arch = MonoAndroidHelper.GetTargetArch (assembly);
551-
if (!compressedAssembliesInfo.TryGetValue (arch, out Dictionary<string, CompressedAssemblyInfo> assembliesInfo)) {
552-
throw new InvalidOperationException ($"Internal error: compression assembly info for architecture {arch} not available");
553-
}
554-
555-
if (!assembliesInfo.TryGetValue (key, out CompressedAssemblyInfo info) || info == null) {
556-
Log.LogDebugMessage ($"Assembly missing from {nameof (CompressedAssemblyInfo)}: {key}");
557-
return assembly.ItemSpec;
558-
}
559-
560-
EnsureCompressedAssemblyData (assembly.ItemSpec, info.DescriptorIndex);
561-
string assemblyOutputDir;
562-
string subDirectory = assembly.GetMetadata ("DestinationSubDirectory");
563-
string abi = MonoAndroidHelper.GetAssemblyAbi (assembly);
564-
if (!String.IsNullOrEmpty (subDirectory)) {
565-
assemblyOutputDir = Path.Combine (compressedOutputDir, abi, subDirectory);
566-
} else {
567-
assemblyOutputDir = Path.Combine (compressedOutputDir, abi);
568-
}
569-
AssemblyCompression.CompressionResult result = AssemblyCompression.Compress (compressedAssembly, assemblyOutputDir);
570-
if (result != AssemblyCompression.CompressionResult.Success) {
571-
switch (result) {
572-
case AssemblyCompression.CompressionResult.EncodingFailed:
573-
Log.LogMessage ($"Failed to compress {assembly.ItemSpec}");
574-
break;
575-
576-
case AssemblyCompression.CompressionResult.InputTooBig:
577-
Log.LogMessage ($"Input assembly {assembly.ItemSpec} exceeds maximum input size");
578-
break;
579-
580-
default:
581-
Log.LogMessage ($"Unknown error compressing {assembly.ItemSpec}");
582-
break;
583-
}
584-
return assembly.ItemSpec;
585-
}
586-
return compressedAssembly.DestinationPath;
544+
return AssemblyCompression.Compress (Log, assembly, compressedAssembliesInfo, compressedOutputDir);
587545
}
588546
}
589547

src/Xamarin.Android.Build.Tasks/Utilities/AssemblyCompression.cs

Lines changed: 59 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
using System;
2+
using System.Collections.Generic;
23
using System.Buffers;
34
using System.IO;
45

56
using K4os.Compression.LZ4;
7+
using Microsoft.Android.Build.Tasks;
8+
using Microsoft.Build.Framework;
9+
using Microsoft.Build.Utilities;
10+
using Xamarin.Android.Tasks;
11+
using Xamarin.Android.Tools;
612

713
namespace Xamarin.Android.Tasks
814
{
@@ -49,7 +55,7 @@ public void SetData (string sourcePath, uint descriptorIndex)
4955

5056
static readonly ArrayPool<byte> bytePool = ArrayPool<byte>.Shared;
5157

52-
public static CompressionResult Compress (AssemblyData data, string outputDirectory)
58+
static CompressionResult Compress (AssemblyData data, string outputDirectory)
5359
{
5460
if (data == null)
5561
throw new ArgumentNullException (nameof (data));
@@ -104,5 +110,57 @@ public static CompressionResult Compress (AssemblyData data, string outputDirect
104110

105111
return CompressionResult.Success;
106112
}
113+
114+
public static string Compress (
115+
TaskLoggingHelper log,
116+
ITaskItem assembly,
117+
IDictionary<AndroidTargetArch, Dictionary<string, CompressedAssemblyInfo>> compressedAssembliesInfo,
118+
string compressedOutputDir)
119+
{
120+
if (bool.TryParse (assembly.GetMetadata ("AndroidSkipCompression"), out bool value) && value) {
121+
log.LogDebugMessage ($"Skipping compression of {assembly.ItemSpec} due to 'AndroidSkipCompression' == 'true' ");
122+
return assembly.ItemSpec;
123+
}
124+
125+
string key = CompressedAssemblyInfo.GetDictionaryKey (assembly);
126+
AndroidTargetArch arch = MonoAndroidHelper.GetTargetArch (assembly);
127+
if (!compressedAssembliesInfo.TryGetValue (arch, out Dictionary<string, CompressedAssemblyInfo> assembliesInfo)) {
128+
throw new InvalidOperationException ($"Internal error: compression assembly info for architecture {arch} not available");
129+
}
130+
131+
if (!assembliesInfo.TryGetValue (key, out CompressedAssemblyInfo info) || info == null) {
132+
log.LogDebugMessage ($"Assembly missing from {nameof (CompressedAssemblyInfo)}: {key}");
133+
return assembly.ItemSpec;
134+
}
135+
136+
AssemblyData compressedAssembly = new AssemblyData (assembly.ItemSpec, info.DescriptorIndex);
137+
string assemblyOutputDir;
138+
string subDirectory = assembly.GetMetadata ("DestinationSubDirectory");
139+
string abi = MonoAndroidHelper.GetAssemblyAbi (assembly);
140+
if (!String.IsNullOrEmpty (subDirectory) && !(subDirectory.EndsWith ($"{abi}/", StringComparison.Ordinal) || subDirectory.EndsWith ($"{abi}\\", StringComparison.Ordinal))) {
141+
assemblyOutputDir = Path.Combine (compressedOutputDir, abi, subDirectory);
142+
} else {
143+
assemblyOutputDir = Path.Combine (compressedOutputDir, abi);
144+
}
145+
146+
CompressionResult result = AssemblyCompression.Compress (compressedAssembly, assemblyOutputDir);
147+
if (result != CompressionResult.Success) {
148+
switch (result) {
149+
case AssemblyCompression.CompressionResult.EncodingFailed:
150+
log.LogMessage ($"Failed to compress {assembly.ItemSpec}");
151+
break;
152+
153+
case AssemblyCompression.CompressionResult.InputTooBig:
154+
log.LogMessage ($"Input assembly {assembly.ItemSpec} exceeds maximum input size");
155+
break;
156+
157+
default:
158+
log.LogMessage ($"Unknown error compressing {assembly.ItemSpec}");
159+
break;
160+
}
161+
return assembly.ItemSpec;
162+
}
163+
return compressedAssembly.DestinationPath;
164+
}
107165
}
108166
}

0 commit comments

Comments
 (0)