From 2fee7409a22c23f4d75034ae697051d9aade6578 Mon Sep 17 00:00:00 2001 From: Jared Duke Date: Mon, 18 Oct 2021 14:35:04 -0700 Subject: Allow flag-guarded Java optimizations for SystemUI Introduce a set of optional Java optimization settings for SystemUI, based on the Soong variable added in aosp/1896612. Opting in to optimizations can be achieved with either: * Env: export SYSTEM_OPTIMIZE_JAVA=true * Make: $(call add_soong_config_var_value,ANDROID,SYSTEM_OPTIMIZE_JAVA,true) As these optimizations can change the resulting stack traces, a parallel effort is working to simplify retracing of stack traces for more accurate debugging and diagnostics. Additional stabilization and testing will occur before any effort to enable these optimizations by default for specific targets. Also note that there are no plans to enable obfuscation. Preliminary results (w/ `SYSTEM_OPTIMIZE_JAVA=true`): * SystemUI.apk (31MB -> 26MB) Bug: 203472868 Test: SYSTEM_OPTIMIZE_JAVA=true m (validate SystemUI.apk) Change-Id: Idd8d5ef32c06e992ad35846eb5fab67ecb58830a --- packages/SystemUI/Android.bp | 33 ++++++++++++++++++++++++++++----- packages/SystemUI/proguard.flags | 12 ++++++++---- 2 files changed, 36 insertions(+), 9 deletions(-) diff --git a/packages/SystemUI/Android.bp b/packages/SystemUI/Android.bp index 2f117fc72468..559c31a92004 100644 --- a/packages/SystemUI/Android.bp +++ b/packages/SystemUI/Android.bp @@ -234,9 +234,36 @@ android_library { plugins: ["dagger2-compiler"], } +soong_config_module_type_import { + from: "frameworks/base/services/Android.bp", + module_types: ["system_optimized_java_defaults"], +} + +system_optimized_java_defaults { + name: "SystemUI_app_defaults", + soong_config_variables: { + SYSTEM_OPTIMIZE_JAVA: { + optimize: { + enabled: true, + optimize: true, + shrink: true, + proguard_flags_files: ["proguard.flags"], + }, + conditions_default: { + optimize: { + proguard_flags_files: ["proguard.flags"], + }, + }, + }, + }, +} + android_app { name: "SystemUI", - defaults: ["platform_app_defaults"], + defaults: [ + "platform_app_defaults", + "SystemUI_app_defaults", + ], static_libs: [ "SystemUI-core", ], @@ -247,10 +274,6 @@ android_app { certificate: "platform", privileged: true, - optimize: { - proguard_flags_files: ["proguard.flags"], - }, - kotlincflags: ["-Xjvm-default=enable"], dxflags: ["--multi-dex"], diff --git a/packages/SystemUI/proguard.flags b/packages/SystemUI/proguard.flags index 3517ebae10bf..ce63b446efb7 100644 --- a/packages/SystemUI/proguard.flags +++ b/packages/SystemUI/proguard.flags @@ -33,10 +33,14 @@ *; } --keep class com.android.systemui.dagger.GlobalRootComponent { *; } --keep class com.android.systemui.dagger.GlobalRootComponent$SysUIComponentImpl { *; } --keep class com.android.systemui.dagger.Dagger** { *; } --keep class com.android.systemui.tv.Dagger** { *; } +-keep,allowoptimization,allowaccessmodification class com.android.systemui.dagger.GlobalRootComponent { !synthetic *; } +-keep,allowoptimization,allowaccessmodification class com.android.systemui.dagger.GlobalRootComponent$SysUIComponentImpl { !synthetic *; } +-keep,allowoptimization,allowaccessmodification class com.android.systemui.dagger.Dagger** { !synthetic *; } +-keep,allowoptimization,allowaccessmodification class com.android.systemui.tv.Dagger** { !synthetic *; } + +# Allows proguard to make private and protected methods and fields public as +# part of optimization. This lets proguard inline trivial getter/setter methods. +-allowaccessmodification # Removes runtime checks added through Kotlin to JVM code genereration to # avoid linear growth as more Kotlin code is converted / added to the codebase. -- cgit v1.2.3-59-g8ed1b