diff --git a/lib/UnoCore/Targets/Android/Android.uxl b/lib/UnoCore/Targets/Android/Android.uxl
index 8175ee140..ff0a3dbc0 100644
--- a/lib/UnoCore/Targets/Android/Android.uxl
+++ b/lib/UnoCore/Targets/Android/Android.uxl
@@ -79,6 +79,9 @@
+
+
+
diff --git a/lib/UnoCore/Targets/Android/app/build.gradle b/lib/UnoCore/Targets/Android/app/build.gradle
index e90dd465f..44db897c2 100644
--- a/lib/UnoCore/Targets/Android/app/build.gradle
+++ b/lib/UnoCore/Targets/Android/app/build.gradle
@@ -51,7 +51,15 @@ android {
targetSdkVersion @(SDK.TargetVersion)
versionCode = @(Project.Android.VersionCode)
versionName = '@(Project.Android.VersionName)'
- multiDexEnabled @(Project.Android.MultiDexEnabled:IsSet:Test(@(Project.Android.MultiDexEnabled:Bool),true))
+
+ #if @(Project.Android.Optimize.MinifyEnabled:Test(1, 0))
+ //minifier handles multi-dexing for release
+ #if @(DEBUG:Defined)
+ multiDexEnabled @(Project.Android.MultiDexEnabled:IsSet:Test(@(Project.Android.MultiDexEnabled:Bool),true))
+ #endif
+ #else
+ multiDexEnabled @(Project.Android.MultiDexEnabled:IsSet:Test(@(Project.Android.MultiDexEnabled:Bool),true))
+ #endif
ndk {
#if @(DEBUG:Defined)
@@ -83,6 +91,12 @@ android {
}
+ //prevent gradle build crash - https://stackoverflow.com/a/47689687/2139770
+ dexOptions {
+ javaMaxHeapSize "4g"
+ }
+
+
#if @(Project.Android.Bundle.Language.EnableSplit:IsSet) || @(Project.Android.Bundle.Density.EnableSplit:IsSet) || @(Project.Android.Bundle.ABI.EnableSplit:IsSet)
bundle {
#if @(Project.Android.Bundle.Language.EnableSplit:IsSet)
@@ -133,8 +147,32 @@ android {
#elif @(Project.Android.Key.Store:IsSet)
signingConfig = signingConfigs.release
#endif
- minifyEnabled = false
- proguardFiles 'proguard-rules.pro'
+
+#if @(Project.Android.Optimize.MinifyEnabled:IsSet)
+ // Enables code shrinking, obfuscation, and optimization for only
+ // your project's release build type.
+ minifyEnabled @(Project.Android.Optimize.MinifyEnabled:ToLower)
+#else
+ minifyEnabled true
+#endif
+
+#if @(Project.Android.Optimize.ShrinkResources:IsSet)
+ // Enables resource shrinking, which is performed by the
+ // Android Gradle plugin.
+ shrinkResources @(Project.Android.Optimize.ShrinkResources:ToLower)
+#else
+ shrinkResources true
+#endif
+ // Includes the default ProGuard rules files that are packaged with
+ // the Android Gradle plugin. To learn more, go to the section about
+ // R8 configuration files.
+ proguardFiles getDefaultProguardFile(
+#if @(Project.Android.Optimize.DefaultAndroidProGuard:IsSet)
+ '@(Project.Android.Optimize.DefaultAndroidProGuard:ToLower)'
+#else
+ 'proguard-android.txt'
+#endif
+ ), 'proguard-rules.pro'
}
}
diff --git a/src/tool/engine/Targets/AndroidBuild.cs b/src/tool/engine/Targets/AndroidBuild.cs
index 196344fb9..561ca5a69 100644
--- a/src/tool/engine/Targets/AndroidBuild.cs
+++ b/src/tool/engine/Targets/AndroidBuild.cs
@@ -52,9 +52,20 @@ public override void DeleteOutdated(Disk disk, IEnvironment env)
var lines = new List {"## This file was generated by Uno compiler."};
var src = env.GetOutputPath("Java.SourceDirectory");
+ // Prepend user-defined proguard rules.
+ var proGuardPrependFile = env.GetString("ProGuard.PrependRulesFile");
+ if (proGuardPrependFile.IsValidPath())
+ lines.AddRange(File.ReadAllLines(proGuardPrependFile));
+
+ // Add existing Java classes.
if (Directory.Exists(src))
VisitSourceDirectoryRecursive(src, src, lines);
+ // Append user-defined proguard rules.
+ var proGuardAppendFile = env.GetString("ProGuard.AppendRulesFile");
+ if (proGuardAppendFile.IsValidPath())
+ lines.AddRange(File.ReadAllLines(proGuardAppendFile));
+
// End with newline.
lines.Add("");