diff --git a/Documentation/guides/building-apps/build-items.md b/Documentation/guides/building-apps/build-items.md index 7738de720d1..26f8225f3d0 100644 --- a/Documentation/guides/building-apps/build-items.md +++ b/Documentation/guides/building-apps/build-items.md @@ -146,6 +146,13 @@ you can use the following to add this for a debug build. Introduced in Xamarin.Android 11.2 +## AndroidInstallModules + +Specifies the modules which get installed by **bundletool** command when +installing app bundles. + +This build action was introduced in Xamarin.Android 11.3. + ## AndroidNativeLibrary [Native libraries](~/android/platform/native-libraries.md) diff --git a/Documentation/guides/building-apps/build-properties.md b/Documentation/guides/building-apps/build-properties.md index 4334facb935..6dd3e44e111 100644 --- a/Documentation/guides/building-apps/build-properties.md +++ b/Documentation/guides/building-apps/build-properties.md @@ -198,6 +198,14 @@ Added in Xamarin.Android 10.3. [bundle-config-format]: https://developer.android.com/studio/build/building-cmdline#bundleconfig +## AndroidBundleToolExtraArgs + +Specifies additional +command-line options to pass to the **bundletool** command when +build app bundles. + +This property was added in Xamarin.Android 11.3. + ## AndroidClassParser A string property which controls how diff --git a/Documentation/release-notes/5327.md b/Documentation/release-notes/5327.md new file mode 100644 index 00000000000..a5171310801 --- /dev/null +++ b/Documentation/release-notes/5327.md @@ -0,0 +1,6 @@ +### Build and deployment performance + + * [GitHub PR 5327](https://github.com/xamarin/xamarin-android/pull/5327): + Allow users to specify additional app bundle "modules" when + building using `$(AndroidPackageFormat)` set to `aab`. In the + future this will help us support [Dynamic Features](https://developer.android.com/guide/app-bundle/play-feature-delivery) \ No newline at end of file diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/BuildApkSet.cs b/src/Xamarin.Android.Build.Tasks/Tasks/BuildApkSet.cs index 87b039a02cf..898c55661f7 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/BuildApkSet.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/BuildApkSet.cs @@ -8,7 +8,7 @@ namespace Xamarin.Android.Tasks { /// /// Invokes `bundletool` to create an APK set (.apks file) - /// + /// /// Usage: bundletool build-apks --bundle=foo.aab --output=foo.apks /// public class BuildApkSet : BundleToolAdbTask @@ -40,6 +40,8 @@ public class BuildApkSet : BundleToolAdbTask [Required] public string StorePass { get; set; } + public string ExtraArgs { get; set; } + public override bool RunTask () { //NOTE: bundletool will not overwrite @@ -77,6 +79,8 @@ internal override CommandLineBuilder GetCommandLineBuilder () cmd.AppendSwitchIfNotNull ("--ks-key-alias ", KeyAlias); AddStorePass (cmd, "--key-pass", KeyPass); AddStorePass (cmd, "--ks-pass", StorePass); + if (!string.IsNullOrEmpty (ExtraArgs)) + cmd.AppendSwitch (ExtraArgs); return cmd; } } diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/InstallApkSet.cs b/src/Xamarin.Android.Build.Tasks/Tasks/InstallApkSet.cs index 67be8bdbb1e..022f8739f0c 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/InstallApkSet.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/InstallApkSet.cs @@ -7,7 +7,7 @@ namespace Xamarin.Android.Tasks { /// /// Invokes `bundletool` to install an APK set to an attached device - /// + /// /// Usage: bundletool install-apks --apks=foo.apks /// public class InstallApkSet : BundleToolAdbTask @@ -17,6 +17,8 @@ public class InstallApkSet : BundleToolAdbTask [Required] public string ApkSet { get; set; } + public string[] Modules { get; set; } + internal override CommandLineBuilder GetCommandLineBuilder () { var cmd = base.GetCommandLineBuilder (); @@ -28,8 +30,11 @@ internal override CommandLineBuilder GetCommandLineBuilder () // --modules: List of modules to be installed, or "_ALL_" for all modules. // Defaults to modules installed during first install, i.e. not on-demand. // Xamarin.Android won't support on-demand modules yet. - cmd.AppendSwitchIfNotNull ("--modules ", "_ALL_"); - + if (Modules == null) + cmd.AppendSwitchIfNotNull ("--modules ", "_ALL_"); + else + cmd.AppendSwitchIfNotNull ("--modules ", $"\"{string.Join ("\",\"", Modules)}\""); + return cmd; } } diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets index f258f0338f5..a26210586be 100644 --- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets +++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets @@ -2513,6 +2513,7 @@ because xbuild doesn't support framework reference assemblies. KeyAlias="$(_ApkKeyAlias)" KeyPass="$(_ApkKeyPass)" StorePass="$(_ApkStorePass)" + ExtraArgs="$(AndroidBundleToolExtraArgs)" />