R8 full mode requires an explicit keep rule for keeping attributes for a
given target (class/method/member). As such, we can set the global rule
for keeping these attributes with minimal cost while reducing the
maintenance burden for adding incremental keep rules.
For a typical Android build, this adds <20KB total to the image.
Bug: 215530220
Test: m
Change-Id: Iad3de32e27da0ca93b618d8a203ee65bae0bb5d1
This rule is a common default rule elsewhere, and should be applied
globally for platform targets rather than relying on per-target rules.
Follow-up work will remove duplicated rules from individual targets.
Bug: 248580093
Test: m
Change-Id: If3cb9fb22d2acf90d87f150f93ad491549bf9090
Some of these -dontwarn settings were added because r8 did not have access to transitive dependencies. Now these dependencies are passed as -libraryjars we can remove some of the -dontwarns.
Test: TARGET_BUILD_VARIANT=userdebug MODULE_BUILD_FROM_SOURCE=true \
UNBUNDLED_BUILD_SDKS_FROM_SOURCE=true \
packages/modules/common/build/mainline_modules_arm64.sh -j120
Bug: 242088131
Change-Id: I408a8f3ac9d11c1bd6608f2a18fd2291db8c9275
Explicitly keep the `LineNumberTable,SourceFile` attributes, ensuring
positional information is preserved for stack traces. While this isn't
required in R8's Proguard compat mode (still the default in soong), it
is needed for R8's full mode or when optimizations are enabled.
Bug: 215530220
Test: m
Change-Id: If1994e92f694c1a82317d79267714ad8114f3d99
Use `-keepclassmembers` instead of `-keep` for Parcelable types
and their CREATOR members. This allows shrinking of Parcelable types
that aren't referenced while still preserving the necessary CREATOR
member when the classes are kept. This saves ~3MB across various
platform targets.
Bug: 238670321
Test: m + presubmit
Change-Id: I13508073dbc07e28aa93bb6604c8f838bcf72646
Most of these annotations are stripped at dex compile-time, and are not
necessarily present in the generated dex library's classpath. As the
classpath is used to inform R8 about `libraryjars`, this can cause
reference failures during R8 execution when warnings are enabled.
For now, suppress the reference warnings. Unrecognized runtime-visible
annotations will still be kept, and this should unblock efforts to
re-enable R8 warnings for many platform targets. A proper solution will
be to ensure the appropriate annotation libs are fed as `-libraryjars`
to R8.
Bug: 242088131
Test: m + `optimize { ignore_warnings: false }`
Change-Id: Ie92db2a9725ff520b311c6b66a50feae79463925
With R8 full mode, these annotations must be explicitly kept as
attributes. Also keep annotation defaults as they may be used at
runtime.
Test: m + presubmit
Bug: 215530220
Change-Id: Ibab630cd8498c5789ebcad6785fda24967df4d61
Some targets rename protobuf.MessageLite with jarjar rules. This change
adds keep rules to keep the fields of renamed classes.
Bug: 233746531
Test: m checkbuild.
Change-Id: Ib487dbd35f69654489aa28577afb47b9fb87c6f6
Merged-In: I986f05455b45651749fb5f819661041d7399f683
Use the `includedescriptorclasses` modifier with the native keep rules
to ensure native method signatures remain preserved. This matches
common native Proguard rules used elsewhere.
Bug: 196084106
Test: m + presubmit
Change-Id: Ie413459ad0f65ce6b8cd6eb34318494c12568c5e
The lite proto runtime uses reflection to access fields based on the names in
the schema, keep all the fields.
Bug: 117607748
Bug: 140062984
Test: m checkbuild
Change-Id: I39bc7d28f619dd2ccaee603e4d407aa7ad33f534
Merged-In: I39bc7d28f619dd2ccaee603e4d407aa7ad33f534
R8 now warns:
Warning in ./build/make/core/proguard_basic_keeps.flags:
Ignoring option: -optimizations
Remove the flags, they are not used by R8.
Fixes: 123401079
Test: m checkbuild
Change-Id: I8b0c558be8bcf943652dddb71802ddc145ae42c1
When an app's LOCAL_SDK_VERSION is lower than the support library's
LOCAL_SDK_VERSION, we artifically raises the "SDK version" "linked"
by ProGuard, to
- suppress ProGuard warnings of referencing symbols unknown to the
lower SDK version.
- prevent ProGuard stripping subclass in the support library that
extends class added in the higher SDK version.
This allows us to remove the dangerous ProGuard flag
"-dontwarn android.support.**".
Notes:
- We don't raise the app's LOCAL_SDK_VERSION, so that the app's own
code is still unable to use the higher SDK version.
- For platform build, we can't just raise to the "current" SDK,
because would break apps that use APIs removed from the current SDK.
We raise it to framework.jar instead, which contains the most complete
symbol set.
Bug: 20658265
Change-Id: I90099073457a65cb8031fbaec6b396d68ce614a7
(cherry picked from commit 8e8d1e7aba)
It seems with that flag Proguard modifies the class files in a way that
Dalvik does not like.
Bug: 10307364
Change-Id: If0cc7552da00ae8a3a3a39a9f2f029819ca3164a
So all most commonly-used flags go to proguard_basic_keeps.flags
and they will still be applied when LOCAL_PROGUARD_ENABLED=nosystem.
Bug: 9203442
Change-Id: If018076dc625ac1efe31898b179dbba850218aaf