Ensure inner classes of @SystemApi classes are kept
There are several cases where inner classes of @SystemApi-annotated
classes should be kept, but aren't. Add a conditional rule to ensure
this. This is probably overly conservative, but for now should avoid
issues with optimization.
A follow-up change will refactor this to reuse the rules in
system-api.pro, but that requires a bit of build file surgery first.
Bug: 300514883
Change-Id: Ibd561a9098881db1c7e78346d60f4c91d9c75894
Test: m + check services.jar dex diff
diff --git a/services/proguard.flags b/services/proguard.flags
index e11e613..57afac3 100644
--- a/services/proguard.flags
+++ b/services/proguard.flags
@@ -14,13 +14,20 @@
}
# APIs referenced by dependent JAR files and modules
--keep @interface android.annotation.SystemApi
+# TODO(b/300514883): Pull @SystemApi keep rules from system-api.pro.
+-keep interface android.annotation.SystemApi
-keep @android.annotation.SystemApi class * {
public protected *;
}
-keepclasseswithmembers class * {
@android.annotation.SystemApi *;
}
+# Also ensure nested classes are kept. This is overly conservative, but handles
+# cases where such classes aren't explicitly marked @SystemApi.
+-if @android.annotation.SystemApi class *
+-keep public class <1>$** {
+ public protected *;
+}
# Derivatives of SystemService and other services created via reflection
-keep,allowoptimization,allowaccessmodification class * extends com.android.server.SystemService {