Skip to content

Commit

Permalink
Enable BuildApkArchive for FastDev builds.
Browse files Browse the repository at this point in the history
  • Loading branch information
jpobst committed Nov 26, 2024
1 parent 9109c70 commit 32ae6a9
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 55 deletions.
17 changes: 12 additions & 5 deletions src/Xamarin.Android.Build.Tasks/Tasks/BuildApkArchive.cs
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ public override bool RunTask ()
continue;
}

AddFileToArchiveIfNewer (apk, disk_path, apk_path, existingEntries);
AddFileToArchiveIfNewer (apk, disk_path, apk_path, file, existingEntries);
}

// Clean up Removed files.
Expand All @@ -210,9 +210,9 @@ public override bool RunTask ()
return !Log.HasLoggedErrors;
}

bool AddFileToArchiveIfNewer (ZipArchiveEx apk, string file, string inArchivePath, List<string> existingEntries)
bool AddFileToArchiveIfNewer (ZipArchiveEx apk, string file, string inArchivePath, ITaskItem item, List<string> existingEntries)
{
var compressionMethod = GetCompressionMethod (file);
var compressionMethod = GetCompressionMethod (item);
existingEntries.Remove (inArchivePath.Replace (Path.DirectorySeparatorChar, '/'));

if (apk.SkipExistingFile (file, inArchivePath, compressionMethod)) {
Expand Down Expand Up @@ -247,8 +247,15 @@ void FixupArchive (ZipArchiveEx zip)
entry.Rename ("manifest/AndroidManifest.xml");
}

CompressionMethod GetCompressionMethod (string fileName)
CompressionMethod GetCompressionMethod (ITaskItem item)
{
return uncompressedFileExtensions.Contains (Path.GetExtension (fileName)) ? uncompressedMethod : CompressionMethod.Default;
var compression = item.GetMetadataOrDefault ("Compression", "");

if (compression.HasValue ()) {
if (Enum.TryParse (compression, out CompressionMethod result))
return result;
}

return uncompressedFileExtensions.Contains (Path.GetExtension (item.ItemSpec)) ? uncompressedMethod : CompressionMethod.Default;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,9 @@ public void Flush ()
public void AddFileAndFlush (string filename, string archiveFileName, CompressionMethod compressionMethod)
{
var item = new TaskItem (filename);

item.SetMetadata ("ApkPath", archiveFileName);
item.SetMetadata ("Compression", compressionMethod.ToString ());

if (abi.HasValue ())
item.SetMetadata ("Abi", abi);
Expand Down
105 changes: 55 additions & 50 deletions src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets
Original file line number Diff line number Diff line change
Expand Up @@ -2182,25 +2182,50 @@ because xbuild doesn't support framework reference assemblies.
Inputs="$(_BuildApkFastDevStaticInputs)"
Outputs="$(_BuildApkEmbedOutputs)">

<!-- Put the assemblies and native libraries in the apk -->
<BuildApk
Condition=" '$(AndroidPackageFormat)' != 'aab' "
<PropertyGroup Condition=" '$(AndroidPackageFormat)' != 'aab' ">
<_AndroidCreatePackagePerAbi>$(AndroidCreatePackagePerAbi)</_AndroidCreatePackagePerAbi>
<_ApkOutputPath>$(ApkFileIntermediate)</_ApkOutputPath>
</PropertyGroup>

<ItemGroup Condition=" '$(AndroidPackageFormat)' != 'aab' ">
<_NativeLibraries Include="@(_AndroidNativeLibraryForFastDev)" />
<_DalvikClasses Include="@(_DexFileForFastDev)" />
</ItemGroup>

<PropertyGroup Condition=" '$(AndroidPackageFormat)' == 'aab' ">
<_AndroidCreatePackagePerAbi>False</_AndroidCreatePackagePerAbi>
<_ApkOutputPath>$(_BaseZipIntermediate)</_ApkOutputPath>
<_RootPath>root/</_RootPath>
<_DalvikPath>dex/</_DalvikPath>
<_BundleAssemblies>$(BundleAssemblies)</_BundleAssemblies>
<_BundleNativeLibraries>$(_BundleResultNativeLibraries)</_BundleNativeLibraries>
</PropertyGroup>

<ItemGroup Condition=" '$(AndroidPackageFormat)' == 'aab' ">
<_NativeLibraries Include="@(AndroidNativeLibrary)" />
<_DalvikClasses Include="@(_DexFile)" />
</ItemGroup>

<!-- Put the assemblies and native libraries in the apk -->
<BuildApkTemporary
AndroidNdkDirectory="$(_AndroidNdkDirectory)"
ApkInputPath="$(_PackagedResources)"
ApkOutputPath="$(ApkFileIntermediate)"
ApkOutputPath="$(_ApkOutputPath)"
AppSharedLibrariesDir="$(_AndroidApplicationSharedLibraryPath)"
BundleAssemblies="$(_BundleAssemblies)"
BundleNativeLibraries="$(_BundleNativeLibraries)"
EmbedAssemblies="$(EmbedAssembliesIntoApk)"
ResolvedUserAssemblies="@(_ResolvedUserAssemblies);@(_AndroidResolvedSatellitePaths)"
ResolvedFrameworkAssemblies="@(_ShrunkFrameworkAssemblies)"
FrameworkNativeLibraries="@(FrameworkNativeLibrary)"
NativeLibraries="@(_AndroidNativeLibraryForFastDev)"
NativeLibraries="@(_NativeLibraries)"
ApplicationSharedLibraries="@(_ApplicationSharedLibrary)"
AdditionalNativeLibraryReferences="@(_AdditionalNativeLibraryReferences)"
EmbeddedNativeLibraryAssemblies="$(OutDir)$(TargetFileName);@(ReferencePath);@(ReferenceDependencyPaths)"
DalvikClasses="@(_DexFileForFastDev)"
DalvikClasses="@(_DalvikClasses)"
SupportedAbis="@(_BuildTargetAbis)"
AndroidSequencePointsMode="$(_SequencePointsMode)"
CreatePackagePerAbi="$(AndroidCreatePackagePerAbi)"
CreatePackagePerAbi="$(_AndroidCreatePackagePerAbi)"
Debug="$(AndroidIncludeDebugSymbols)"
EnableCompression="$(AndroidEnableAssemblyCompression)"
TypeMappings="@(_AndroidTypeMaps)"
Expand All @@ -2218,50 +2243,30 @@ because xbuild doesn't support framework reference assemblies.
ExcludeFiles="@(AndroidPackagingOptionsExclude)"
IncludeFiles="@(AndroidPackagingOptionsInclude)"
AndroidBinUtilsDirectory="$(AndroidBinUtilsDirectory)"
IntermediateOutputPath="$(IntermediateOutputPath)">
IntermediateOutputPath="$(IntermediateOutputPath)"
RootPath="$(_RootPath)"
DalvikPath="$(_DalvikPath)">
<Output TaskParameter="OutputFiles" ItemName="ApkFiles" />
</BuildApk>
<BuildBaseAppBundle
Condition=" '$(AndroidPackageFormat)' == 'aab' "
AndroidNdkDirectory="$(_AndroidNdkDirectory)"
ApkInputPath="$(_PackagedResources)"
ApkOutputPath="$(_BaseZipIntermediate)"
AppSharedLibrariesDir="$(_AndroidApplicationSharedLibraryPath)"
BundleAssemblies="$(BundleAssemblies)"
BundleNativeLibraries="$(_BundleResultNativeLibraries)"
EmbedAssemblies="$(EmbedAssembliesIntoApk)"
ResolvedUserAssemblies="@(_ResolvedUserAssemblies);@(_AndroidResolvedSatellitePaths)"
ResolvedFrameworkAssemblies="@(_ShrunkFrameworkAssemblies)"
FrameworkNativeLibraries="@(FrameworkNativeLibrary)"
NativeLibraries="@(AndroidNativeLibrary)"
ApplicationSharedLibraries="@(_ApplicationSharedLibrary)"
AdditionalNativeLibraryReferences="@(_AdditionalNativeLibraryReferences)"
EmbeddedNativeLibraryAssemblies="$(OutDir)$(TargetFileName);@(ReferencePath);@(ReferenceDependencyPaths)"
DalvikClasses="@(_DexFile)"
SupportedAbis="@(_BuildTargetAbis)"
CreatePackagePerAbi="False"
Debug="$(AndroidIncludeDebugSymbols)"
EnableCompression="$(AndroidEnableAssemblyCompression)"
TypeMappings="@(_AndroidTypeMaps)"
JavaSourceFiles="@(AndroidJavaSource)"
JavaLibraries="@(AndroidJavaLibrary)"
AndroidSequencePointsMode="$(_SequencePointsMode)"
LibraryProjectJars="@(ExtractedJarImports)"
TlsProvider="$(AndroidTlsProvider)"
UncompressedFileExtensions="$(AndroidStoreUncompressedFileExtensions)"
ProjectFullPath="$(MSBuildProjectFullPath)"
IncludeWrapSh="$(AndroidIncludeWrapSh)"
CheckedBuild="$(_AndroidCheckedBuild)"
RuntimeConfigBinFilePath="$(_BinaryRuntimeConfigPath)"
ZipFlushFilesLimit="$(_ZipFlushFilesLimit)"
ZipFlushSizeLimit="$(_ZipFlushSizeLimit)"
ExcludeFiles="@(AndroidPackagingOptionsExclude)"
IncludeFiles="@(AndroidPackagingOptionsInclude)"
AndroidBinUtilsDirectory="$(AndroidBinUtilsDirectory)"
IntermediateOutputPath="$(IntermediateOutputPath)">
<Output TaskParameter="OutputFiles" ItemName="BaseZipFile" />
</BuildBaseAppBundle>
<BuildAppBundle
<Output TaskParameter="OutputApkFiles" ItemName="FilesToAddToApk" />
<Output TaskParameter="DSODirectoriesToDelete" ItemName="DSODirectoriesToDelete" />
</BuildApkTemporary>

<!-- This task uses MSBuild task batching. It will be called once for each unique '%(FilesToAddToApk.Abi)'. -->
<BuildApkArchive
Abi="%(FilesToAddToApk.Abi)"
AndroidPackageFormat="$(AndroidPackageFormat)"
ApkInputPath="$(_PackagedResources)"
ApkOutputPaths="@(ApkFiles)"
FilesToAddToApk="@(FilesToAddToApk)"
UncompressedFileExtensions="$(AndroidStoreUncompressedFileExtensions)"
ZipFlushFilesLimit="$(_ZipFlushFilesLimit)"
ZipFlushSizeLimit="$(_ZipFlushSizeLimit)" />

<!-- Hopefully this is temporary and doesn't actually need to be cleaned up. But for now let's not change existing behavior. -->
<RemoveDir
Directories="@(DSODirectoriesToDelete)" />

<BuildAppBundle
Condition=" '$(AndroidPackageFormat)' == 'aab' "
ToolPath="$(JavaToolPath)"
JavaMaximumHeapSize="$(JavaMaximumHeapSize)"
Expand Down

0 comments on commit 32ae6a9

Please # to comment.