platform_build/core/proguard.flags
Jared Duke cb3505c1be Ensure special Dalvik annotations are kept
These optimization annotations are special in that we don't want them
to have RUNTIME retention, but we do want them to be visible to ART.
R8 already has special rules to handle them, but with R8 full mode
it still requires a minimal keep rule for the given reference.

This allows usage of annotations like @NeverCompile from fully optimized
platform targets like SystemUI.

Bug: 215417388
Test: m + compare SystemUIGoogle.odex w/ @NeverCompile annotations
Change-Id: Id14bcc7b6d0d6dd385c60cfbe4d31f295cbaa5dc
2023-09-01 21:27:30 +00:00

63 lines
2.4 KiB
Text

# We have moved -dontobfuscate and -dontoptimize to the makefiles.
# dex does not like code run through proguard optimize and preverify steps.
# -dontoptimize
-dontpreverify
# Don't obfuscate. We only need dead code striping.
# -dontobfuscate
# Add this flag in your package's own configuration if it's needed.
#-flattenpackagehierarchy
# Keep classes and members with the platform-defined @VisibleForTesting annotation.
-keep @com.android.internal.annotations.VisibleForTesting class *
-keepclassmembers class * {
@com.android.internal.annotations.VisibleForTesting *;
}
# Keep classes and members with non-platform @VisibleForTesting annotations, but
# only within platform-defined packages. This avoids keeping external, library-specific
# test code that isn't actually needed for platform testing.
# TODO(b/239961360): Migrate away from androidx.annotation.VisibleForTesting
# and com.google.common.annotations.VisibleForTesting use in platform code.
-keep @**.VisibleForTesting class android.**,com.android.**,com.google.android.**
-keepclassmembers class android.**,com.android.**,com.google.android.** {
@**.VisibleForTesting *;
}
# Keep rule for members that are needed solely to keep alive downstream weak
# references, and could otherwise be removed after tree shaking optimizations.
-keepclassmembers,allowaccessmodification,allowobfuscation,allowshrinking class * {
@com.android.internal.annotations.KeepForWeakReference <fields>;
}
# Understand the common @Keep annotation from various Android packages:
# * android.support.annotation
# * androidx.annotation
# * com.android.internal.annotations
-keep class **android**.annotation*.Keep
-keep @**android**.annotation*.Keep class * { *; }
-keepclasseswithmembers class * {
@**android**.annotation*.Keep <methods>;
}
-keepclasseswithmembers class * {
@**android**.annotation*.Keep <fields>;
}
-keepclasseswithmembers class * {
@**android**.annotation*.Keep <init>(...);
}
# Keep Dalvik optimization annotations. These annotations are special in that
# 1) we want them preserved for visibility with ART, but 2) they don't have
# RUNTIME retention. These minimal keep rules ensure they're not stripped by R8.
# TODO(b/215417388): Export this rule from the owning library, core-libart,
# via export_proguard_flags_files.
-keepclassmembers,allowshrinking,allowoptimization,allowobfuscation,allowaccessmodification class * {
@dalvik.annotation.optimization.** *;
}
-include proguard_basic_keeps.flags