1*d57664e9SAndroid Build Coastguard Worker# TODO(b/210510433): Refine and optimize this configuration. Note that this 2*d57664e9SAndroid Build Coastguard Worker# configuration is only used when `SOONG_CONFIG_ANDROID_SYSTEM_OPTIMIZE_JAVA=true`. 3*d57664e9SAndroid Build Coastguard Worker 4*d57664e9SAndroid Build Coastguard Worker# Preserve line number information for debugging stack traces. 5*d57664e9SAndroid Build Coastguard Worker-keepattributes SourceFile,LineNumberTable 6*d57664e9SAndroid Build Coastguard Worker 7*d57664e9SAndroid Build Coastguard Worker# Allows making private and protected methods/fields public as part of 8*d57664e9SAndroid Build Coastguard Worker# optimization. This enables inlining of trivial getter/setter methods. 9*d57664e9SAndroid Build Coastguard Worker-allowaccessmodification 10*d57664e9SAndroid Build Coastguard Worker 11*d57664e9SAndroid Build Coastguard Worker# Process entrypoint 12*d57664e9SAndroid Build Coastguard Worker-keep class com.android.server.SystemServer { 13*d57664e9SAndroid Build Coastguard Worker public static void main(java.lang.String[]); 14*d57664e9SAndroid Build Coastguard Worker} 15*d57664e9SAndroid Build Coastguard Worker 16*d57664e9SAndroid Build Coastguard Worker# APIs referenced by dependent JAR files and modules 17*d57664e9SAndroid Build Coastguard Worker# TODO(b/300514883): Pull @SystemApi keep rules from system-api.pro. 18*d57664e9SAndroid Build Coastguard Worker-keep interface android.annotation.SystemApi 19*d57664e9SAndroid Build Coastguard Worker-keep @android.annotation.SystemApi class * { 20*d57664e9SAndroid Build Coastguard Worker public protected *; 21*d57664e9SAndroid Build Coastguard Worker} 22*d57664e9SAndroid Build Coastguard Worker-keepclasseswithmembers class * { 23*d57664e9SAndroid Build Coastguard Worker @android.annotation.SystemApi *; 24*d57664e9SAndroid Build Coastguard Worker} 25*d57664e9SAndroid Build Coastguard Worker# Also ensure nested classes are kept. This is overly conservative, but handles 26*d57664e9SAndroid Build Coastguard Worker# cases where such classes aren't explicitly marked @SystemApi. 27*d57664e9SAndroid Build Coastguard Worker-if @android.annotation.SystemApi class * 28*d57664e9SAndroid Build Coastguard Worker-keep public class <1>$** { 29*d57664e9SAndroid Build Coastguard Worker public protected *; 30*d57664e9SAndroid Build Coastguard Worker} 31*d57664e9SAndroid Build Coastguard Worker 32*d57664e9SAndroid Build Coastguard Worker# Accessed from com.android.compos APEX 33*d57664e9SAndroid Build Coastguard Worker-keep,allowoptimization,allowaccessmodification class com.android.internal.art.ArtStatsLog { 34*d57664e9SAndroid Build Coastguard Worker public static void write(...); 35*d57664e9SAndroid Build Coastguard Worker} 36*d57664e9SAndroid Build Coastguard Worker 37*d57664e9SAndroid Build Coastguard Worker# Various classes subclassed in or referenced via JNI in ethernet-service 38*d57664e9SAndroid Build Coastguard Worker-keep public class android.net.** { *; } 39*d57664e9SAndroid Build Coastguard Worker-keep,allowoptimization,allowaccessmodification class com.android.net.module.util.* { *; } 40*d57664e9SAndroid Build Coastguard Worker-keep,allowoptimization,allowaccessmodification public class com.android.server.net.IpConfigStore { *; } 41*d57664e9SAndroid Build Coastguard Worker-keep,allowoptimization,allowaccessmodification public class com.android.server.net.BaseNetworkObserver { *; } 42*d57664e9SAndroid Build Coastguard Worker-keep,allowoptimization,allowaccessmodification class com.android.server.display.feature.DisplayManagerFlags { *; } 43*d57664e9SAndroid Build Coastguard Worker-keep,allowoptimization,allowaccessmodification class android.app.admin.flags.FeatureFlagsImpl { *; } 44*d57664e9SAndroid Build Coastguard Worker-keep,allowoptimization,allowaccessmodification class com.android.server.input.NativeInputManagerService$NativeImpl { *; } 45*d57664e9SAndroid Build Coastguard Worker-keep,allowoptimization,allowaccessmodification class com.android.server.ThreadPriorityBooster { *; } 46*d57664e9SAndroid Build Coastguard Worker 47*d57664e9SAndroid Build Coastguard Worker# allow invoking start-service using class name in both apex and services jar. 48*d57664e9SAndroid Build Coastguard Worker-keep,allowoptimization,allowaccessmodification class com.android.server.ondeviceintelligence.OnDeviceIntelligenceManagerService { *; } 49*d57664e9SAndroid Build Coastguard Worker 50*d57664e9SAndroid Build Coastguard Worker# Keep all aconfig Flag class as they might be statically referenced by other packages 51*d57664e9SAndroid Build Coastguard Worker# An merge or inlining could lead to missing dependencies that cause run time errors 52*d57664e9SAndroid Build Coastguard Worker-keepclassmembernames class android.**.Flags, com.android.**.Flags { public *; } 53*d57664e9SAndroid Build Coastguard Worker 54*d57664e9SAndroid Build Coastguard Worker# Referenced via CarServiceHelperService in car-frameworks-service (avoid removing) 55*d57664e9SAndroid Build Coastguard Worker-keep public class com.android.server.utils.Slogf { *; } 56*d57664e9SAndroid Build Coastguard Worker 57*d57664e9SAndroid Build Coastguard Worker# Referenced in wear-service 58*d57664e9SAndroid Build Coastguard Worker-keep public class com.android.server.wm.WindowManagerInternal { *; } 59*d57664e9SAndroid Build Coastguard Worker 60*d57664e9SAndroid Build Coastguard Worker# JNI keep rules 61*d57664e9SAndroid Build Coastguard Worker# The global keep rule for native methods allows stripping of such methods if they're unreferenced 62*d57664e9SAndroid Build Coastguard Worker# in Java. However, because system_server explicitly registers these methods from native code, 63*d57664e9SAndroid Build Coastguard Worker# stripping them in Java can cause runtime issues. As such, conservatively keep all such methods in 64*d57664e9SAndroid Build Coastguard Worker# system_server subpackages as long as the containing class is also kept or referenced. 65*d57664e9SAndroid Build Coastguard Worker-keepclassmembers class com.android.server.** { 66*d57664e9SAndroid Build Coastguard Worker native <methods>; 67*d57664e9SAndroid Build Coastguard Worker} 68*d57664e9SAndroid Build Coastguard Worker# TODO(b/210510433): Revisit and fix with @Keep, or consider auto-generating from 69*d57664e9SAndroid Build Coastguard Worker# frameworks/base/services/core/jni/onload.cpp. 70*d57664e9SAndroid Build Coastguard Worker-keep,allowoptimization,allowaccessmodification class com.android.server.broadcastradio.hal1.BroadcastRadioService { *; } 71*d57664e9SAndroid Build Coastguard Worker-keep,allowoptimization,allowaccessmodification class com.android.server.broadcastradio.hal1.Convert { *; } 72*d57664e9SAndroid Build Coastguard Worker-keep,allowoptimization,allowaccessmodification class com.android.server.broadcastradio.hal1.Tuner { *; } 73*d57664e9SAndroid Build Coastguard Worker-keep,allowoptimization,allowaccessmodification class com.android.server.broadcastradio.hal1.TunerCallback { *; } 74*d57664e9SAndroid Build Coastguard Worker-keep,allowoptimization,allowaccessmodification class com.android.server.location.gnss.GnssConfiguration$HalInterfaceVersion { *; } 75*d57664e9SAndroid Build Coastguard Worker-keep,allowoptimization,allowaccessmodification class com.android.server.location.gnss.GnssPowerStats { *; } 76*d57664e9SAndroid Build Coastguard Worker-keep,allowoptimization,allowaccessmodification class com.android.server.location.gnss.hal.GnssNative { *; } 77*d57664e9SAndroid Build Coastguard Worker-keep,allowoptimization,allowaccessmodification class com.android.server.pm.PackageManagerShellCommandDataLoader { *; } 78*d57664e9SAndroid Build Coastguard Worker-keep,allowoptimization,allowaccessmodification class com.android.server.sensors.SensorManagerInternal$RuntimeSensorCallback { *; } 79*d57664e9SAndroid Build Coastguard Worker-keep,allowoptimization,allowaccessmodification class com.android.server.sensors.SensorManagerInternal$ProximityActiveListener { *; } 80*d57664e9SAndroid Build Coastguard Worker-keep,allowoptimization,allowaccessmodification class com.android.server.sensors.SensorService { *; } 81*d57664e9SAndroid Build Coastguard Worker-keep,allowoptimization,allowaccessmodification class com.android.server.soundtrigger_middleware.SoundTriggerMiddlewareImpl$AudioSessionProvider$AudioSession { *; } 82*d57664e9SAndroid Build Coastguard Worker-keep,allowoptimization,allowaccessmodification class com.android.server.soundtrigger_middleware.ExternalCaptureStateTracker { *; } 83*d57664e9SAndroid Build Coastguard Worker-keep,allowoptimization,allowaccessmodification class com.android.server.storage.AppFuseBridge { *; } 84*d57664e9SAndroid Build Coastguard Worker-keep,allowoptimization,allowaccessmodification class com.android.server.tv.TvInputHal { *; } 85*d57664e9SAndroid Build Coastguard Worker-keep,allowoptimization,allowaccessmodification class com.android.server.usb.UsbAlsaJackDetector { *; } 86*d57664e9SAndroid Build Coastguard Worker-keep,allowoptimization,allowaccessmodification class com.android.server.usb.UsbAlsaMidiDevice { *; } 87*d57664e9SAndroid Build Coastguard Worker-keep,allowoptimization,allowaccessmodification class com.android.server.vibrator.VibratorController$OnVibrationCompleteListener { *; } 88*d57664e9SAndroid Build Coastguard Worker-keep,allowoptimization,allowaccessmodification class com.android.server.vibrator.VibratorManagerService$VibratorManagerNativeCallbacks { *; } 89*d57664e9SAndroid Build Coastguard Worker-keepclasseswithmembers,allowoptimization,allowaccessmodification class com.android.server.** { 90*d57664e9SAndroid Build Coastguard Worker *** *FromNative(...); 91*d57664e9SAndroid Build Coastguard Worker} 92*d57664e9SAndroid Build Coastguard Worker-keep,allowoptimization,allowaccessmodification class com.android.server.input.InputManagerService { 93*d57664e9SAndroid Build Coastguard Worker <methods>; 94*d57664e9SAndroid Build Coastguard Worker} 95*d57664e9SAndroid Build Coastguard Worker-keep,allowoptimization,allowaccessmodification class com.android.server.usb.UsbHostManager { 96*d57664e9SAndroid Build Coastguard Worker *** usbDeviceRemoved(...); 97*d57664e9SAndroid Build Coastguard Worker *** usbDeviceAdded(...); 98*d57664e9SAndroid Build Coastguard Worker} 99*d57664e9SAndroid Build Coastguard Worker-keep,allowoptimization,allowaccessmodification class **.*NativeWrapper* { *; } 100*d57664e9SAndroid Build Coastguard Worker 101*d57664e9SAndroid Build Coastguard Worker# Miscellaneous reflection keep rules 102*d57664e9SAndroid Build Coastguard Worker# TODO(b/210510433): Revisit and fix with @Keep. 103*d57664e9SAndroid Build Coastguard Worker-keep,allowoptimization,allowaccessmodification class android.hardware.usb.gadget.** { *; } 104*d57664e9SAndroid Build Coastguard Worker 105*d57664e9SAndroid Build Coastguard Worker# Needed when optimizations enabled 106*d57664e9SAndroid Build Coastguard Worker# TODO(b/210510433): Revisit and fix with @Keep. 107*d57664e9SAndroid Build Coastguard Worker-keep,allowoptimization,allowaccessmodification class com.android.server.SystemService { *; } 108*d57664e9SAndroid Build Coastguard Worker-keep,allowoptimization,allowaccessmodification class com.android.server.SystemService$TargetUser { *; } 109*d57664e9SAndroid Build Coastguard Worker-keep,allowoptimization,allowaccessmodification class com.android.server.usage.StorageStatsManagerLocal { *; } 110*d57664e9SAndroid Build Coastguard Worker 111*d57664e9SAndroid Build Coastguard Worker# Prevent optimizations of any statically linked code that may shadow code in 112*d57664e9SAndroid Build Coastguard Worker# the bootclasspath. See also StrictJavaPackagesTest for details on exceptions. 113*d57664e9SAndroid Build Coastguard Worker# TODO(b/222468116): Resolve such collisions in the build system. 114*d57664e9SAndroid Build Coastguard Worker-keep public class android.gsi.** { *; } 115*d57664e9SAndroid Build Coastguard Worker-keep public class android.hidl.base.** { *; } 116*d57664e9SAndroid Build Coastguard Worker-keep public class android.hidl.manager.** { *; } 117*d57664e9SAndroid Build Coastguard Worker-keep public class android.os.** { *; } 118*d57664e9SAndroid Build Coastguard Worker-keep public class com.android.internal.util.** { *; } 119*d57664e9SAndroid Build Coastguard Worker-keep public class com.android.modules.utils.build.** { *; } 120*d57664e9SAndroid Build Coastguard Worker# Also suppress related duplicate type warnings for the above kept classes. 121*d57664e9SAndroid Build Coastguard Worker-dontwarn android.gsi.** 122*d57664e9SAndroid Build Coastguard Worker-dontwarn android.hidl.base.** 123*d57664e9SAndroid Build Coastguard Worker-dontwarn android.hidl.manager.** 124*d57664e9SAndroid Build Coastguard Worker-dontwarn android.os.** 125*d57664e9SAndroid Build Coastguard Worker-dontwarn com.android.internal.util.** 126*d57664e9SAndroid Build Coastguard Worker-dontwarn com.android.modules.utils.build.** 127*d57664e9SAndroid Build Coastguard Worker 128*d57664e9SAndroid Build Coastguard Worker# CoverageService guards optional jacoco class references with a runtime guard, so we can safely 129*d57664e9SAndroid Build Coastguard Worker# suppress build-time warnings. 130*d57664e9SAndroid Build Coastguard Worker-dontwarn org.jacoco.agent.rt.* 131