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("");