Fixed
Status Update
Comments
ap...@google.com <ap...@google.com> #2
Project: r8
Branch: main
commit a7d90b42b6a59cef0586dbb696c50d8ccc5c4d00
Author: Ian Zerny <zerny@google.com>
Date: Wed Jan 31 14:34:24 2024
Tests for empty class and keepclasseswithmembers
These tests identify issues in R8 treatment of empty member patterns and
default constructors.
Bug: b/323136645
Change-Id: I1f128ebb7529b16e1023b49c1ba11b176a58aace
A src/test/java/com/android/tools/r8/keepanno/compatissues/DefaultInitClassWithMembersRuleTest.java
A src/test/java/com/android/tools/r8/keepanno/compatissues/EmptyClassWithMembersRuleTest.java
A src/test/java/com/android/tools/r8/keepanno/compatissues/NonDefaultInitClassWithMembersRuleTest.java
https://r8-review.googlesource.com/89080
Branch: main
commit a7d90b42b6a59cef0586dbb696c50d8ccc5c4d00
Author: Ian Zerny <zerny@google.com>
Date: Wed Jan 31 14:34:24 2024
Tests for empty class and keepclasseswithmembers
These tests identify issues in R8 treatment of empty member patterns and
default constructors.
Bug:
Change-Id: I1f128ebb7529b16e1023b49c1ba11b176a58aace
A src/test/java/com/android/tools/r8/keepanno/compatissues/DefaultInitClassWithMembersRuleTest.java
A src/test/java/com/android/tools/r8/keepanno/compatissues/EmptyClassWithMembersRuleTest.java
A src/test/java/com/android/tools/r8/keepanno/compatissues/NonDefaultInitClassWithMembersRuleTest.java
ap...@google.com <ap...@google.com> #3
Project: r8
Branch: main
commit 678b0102e0f5ee9ece6d1a9fbc86534dbdfbd0f2
Author: Ian Zerny <zerny@google.com>
Date: Thu Feb 01 12:29:11 2024
[KeepAnno] Extract class and any members items as a disjoint rule
Bug: b/322104143
Bug: b/323136645
Bug: b/321674067
Change-Id: Ia9617c8fd1e0a469a8e7426f0de864ed02e3cb00
M src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepRuleExtractor.java
M src/test/java/com/android/tools/r8/keepanno/KeepEmptyClassTest.java
M src/test/java/com/android/tools/r8/keepanno/KeepFieldValueApiTest.java
https://r8-review.googlesource.com/89120
Branch: main
commit 678b0102e0f5ee9ece6d1a9fbc86534dbdfbd0f2
Author: Ian Zerny <zerny@google.com>
Date: Thu Feb 01 12:29:11 2024
[KeepAnno] Extract class and any members items as a disjoint rule
Bug:
Bug:
Bug:
Change-Id: Ia9617c8fd1e0a469a8e7426f0de864ed02e3cb00
M src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepRuleExtractor.java
M src/test/java/com/android/tools/r8/keepanno/KeepEmptyClassTest.java
M src/test/java/com/android/tools/r8/keepanno/KeepFieldValueApiTest.java
ap...@google.com <ap...@google.com> #4
Project: r8
Branch: main
commit 7f76aee48af20e328f947b56991a8f2ea08b2985
Author: Ian Zerny <zerny@google.com>
Date: Thu Feb 01 12:29:00 2024
[KeepAnno] Regression test for matching class with any members
The semantics of keepclasseswithmembers does not match the semantics of
"any member" when no members are present.
Bug: b/322104143
Bug: b/323136645
Change-Id: I6008f4f78dff5e19cb53e8f1d8151a91afa644fc
M src/test/java/com/android/tools/r8/ExternalR8TestBuilder.java
M src/test/java/com/android/tools/r8/keepanno/KeepAnnoTestBuilder.java
M src/test/java/com/android/tools/r8/keepanno/KeepAnnoTestUtils.java
A src/test/java/com/android/tools/r8/keepanno/KeepEmptyClassTest.java
https://r8-review.googlesource.com/89081
Branch: main
commit 7f76aee48af20e328f947b56991a8f2ea08b2985
Author: Ian Zerny <zerny@google.com>
Date: Thu Feb 01 12:29:00 2024
[KeepAnno] Regression test for matching class with any members
The semantics of keepclasseswithmembers does not match the semantics of
"any member" when no members are present.
Bug:
Bug:
Change-Id: I6008f4f78dff5e19cb53e8f1d8151a91afa644fc
M src/test/java/com/android/tools/r8/ExternalR8TestBuilder.java
M src/test/java/com/android/tools/r8/keepanno/KeepAnnoTestBuilder.java
M src/test/java/com/android/tools/r8/keepanno/KeepAnnoTestUtils.java
A src/test/java/com/android/tools/r8/keepanno/KeepEmptyClassTest.java
sh...@gmail.com <sh...@gmail.com> #5
43 23 8D 51 2C 1E 5E B2 D6 56 9F 4A 3A FB F5 52 34 18 B8 2E 0A 3E D1 55 27 70 AB B9 A9 C9 CC AB
ch...@google.com <ch...@google.com>
ap...@google.com <ap...@google.com> #6
Project: r8
Branch: main
commit 06e32a8d0d2e7e28bc4e597e4ce96e2e0c229d08
Author: Christoffer Adamsen <christofferqa@google.com>
Date: Tue May 28 08:45:45 2024
Only include default <init>() for empty member rules in compat mode
RELNOTES:
This fixes a bug in R8 full mode where keep rules with absent or empty member rules would implicitly be converted into a stronger keep rule that has a member rule matching the default constructor.
Example:
1. The rule -keep class A would implicitly be converted to -keep class A { void <init>(); }.
2. The rule -keep class A {} would implicitly be converted to -keep class A { void <init>(); }.
For consistency with the R8 full mode documentation in compatibility-faq.md ("The default constructor (<init>()) is not implicitly kept when a class is kept."), this change limits the implicit inclusion of void <init>() to Proguard compatibility mode.
Note that starting with this change, -keepclassmembers rules with no member rules (e.g., -keepclassmembers class A) do no longer have any effect in R8 full mode.
Fixes: b/132318799
Fixes: b/323136645
Change-Id: Ic6049e561bcd35b7a45ee9c8c5b94e1780e538a1
M src/main/java/com/android/tools/r8/R8Command.java
M src/main/java/com/android/tools/r8/shaking/ProguardConfiguration.java
M src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
M src/main/java/com/android/tools/r8/shaking/ProguardKeepRuleBase.java
M src/test/java/com/android/tools/r8/compatproguard/CompatKeepClassMemberNamesTestRunner.java
M src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesExtendsTest.java
M src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesHorizontalMergeTest.java
M src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesIllegalSubclassMergedTest.java
M src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesIllegalSubclassTest.java
M src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesImplementsTest.java
M src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesMergeTest.java
M src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesShrinkingTest.java
M src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesTestAllowPermittedSubclassesRemovalTest.java
M src/test/java/com/android/tools/r8/dexsplitter/DexSplitterFieldTypeStrengtheningTest.java
M src/test/java/com/android/tools/r8/ir/optimize/classinliner/KeptClassInliningTest.java
M src/test/java/com/android/tools/r8/keepanno/compatissues/EmptyClassWithMembersRuleTest.java
M src/test/java/com/android/tools/r8/keepanno/compatissues/NonDefaultInitClassWithMembersRuleTest.java
M src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInClasspathTypeTest.java
M src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInCompanionTest.java
M src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInExtensionFunctionTest.java
M src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInExtensionPropertyTest.java
M src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionTest.java
M src/test/java/com/android/tools/r8/naming/IdentifierNameStringMarkerTest.java
M src/test/java/com/android/tools/r8/repackage/RepackageWithStringIdentifier.java
M src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java
M src/test/java/com/android/tools/r8/shaking/ifrule/ConditionalKeepIfKeptTest.java
M src/test/java/com/android/tools/r8/shaking/ifrule/IfOnStaticFinalFieldTest.java
M src/test/java/com/android/tools/r8/shaking/ifrule/membervaluepropagation/IfWithFieldValuePropagationTest.java
M src/test/java/com/android/tools/r8/shaking/ifrule/membervaluepropagation/IfWithMethodValuePropagationTest.java
M src/test/java/com/android/tools/r8/shaking/methods/interfaces/DefaultInterfaceMethodsTest.java
M src/test/java/com/android/tools/r8/shaking/methods/interfaces/ImplementingMethodInSubclassTest.java
M src/test/java/com/android/tools/r8/shaking/methods/interfaces/InterfaceMethodKeepResolutionTest.java
M src/test/java/com/android/tools/r8/shaking/methods/interfaces/SubTypeOverridesInterfaceMethodTest.java
M src/test/testbase/java/com/android/tools/r8/TestBuilder.java
M src/test/testbase/java/com/android/tools/r8/dexsplitter/SplitterTestBase.java
https://r8-review.googlesource.com/92532
Branch: main
commit 06e32a8d0d2e7e28bc4e597e4ce96e2e0c229d08
Author: Christoffer Adamsen <christofferqa@google.com>
Date: Tue May 28 08:45:45 2024
Only include default <init>() for empty member rules in compat mode
RELNOTES:
This fixes a bug in R8 full mode where keep rules with absent or empty member rules would implicitly be converted into a stronger keep rule that has a member rule matching the default constructor.
Example:
1. The rule -keep class A would implicitly be converted to -keep class A { void <init>(); }.
2. The rule -keep class A {} would implicitly be converted to -keep class A { void <init>(); }.
For consistency with the R8 full mode documentation in compatibility-faq.md ("The default constructor (<init>()) is not implicitly kept when a class is kept."), this change limits the implicit inclusion of void <init>() to Proguard compatibility mode.
Note that starting with this change, -keepclassmembers rules with no member rules (e.g., -keepclassmembers class A) do no longer have any effect in R8 full mode.
Fixes:
Fixes:
Change-Id: Ic6049e561bcd35b7a45ee9c8c5b94e1780e538a1
M src/main/java/com/android/tools/r8/R8Command.java
M src/main/java/com/android/tools/r8/shaking/ProguardConfiguration.java
M src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
M src/main/java/com/android/tools/r8/shaking/ProguardKeepRuleBase.java
M src/test/java/com/android/tools/r8/compatproguard/CompatKeepClassMemberNamesTestRunner.java
M src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesExtendsTest.java
M src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesHorizontalMergeTest.java
M src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesIllegalSubclassMergedTest.java
M src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesIllegalSubclassTest.java
M src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesImplementsTest.java
M src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesMergeTest.java
M src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesShrinkingTest.java
M src/test/java/com/android/tools/r8/desugar/sealed/SealedClassesTestAllowPermittedSubclassesRemovalTest.java
M src/test/java/com/android/tools/r8/dexsplitter/DexSplitterFieldTypeStrengtheningTest.java
M src/test/java/com/android/tools/r8/ir/optimize/classinliner/KeptClassInliningTest.java
M src/test/java/com/android/tools/r8/keepanno/compatissues/EmptyClassWithMembersRuleTest.java
M src/test/java/com/android/tools/r8/keepanno/compatissues/NonDefaultInitClassWithMembersRuleTest.java
M src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInClasspathTypeTest.java
M src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInCompanionTest.java
M src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInExtensionFunctionTest.java
M src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInExtensionPropertyTest.java
M src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionTest.java
M src/test/java/com/android/tools/r8/naming/IdentifierNameStringMarkerTest.java
M src/test/java/com/android/tools/r8/repackage/RepackageWithStringIdentifier.java
M src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java
M src/test/java/com/android/tools/r8/shaking/ifrule/ConditionalKeepIfKeptTest.java
M src/test/java/com/android/tools/r8/shaking/ifrule/IfOnStaticFinalFieldTest.java
M src/test/java/com/android/tools/r8/shaking/ifrule/membervaluepropagation/IfWithFieldValuePropagationTest.java
M src/test/java/com/android/tools/r8/shaking/ifrule/membervaluepropagation/IfWithMethodValuePropagationTest.java
M src/test/java/com/android/tools/r8/shaking/methods/interfaces/DefaultInterfaceMethodsTest.java
M src/test/java/com/android/tools/r8/shaking/methods/interfaces/ImplementingMethodInSubclassTest.java
M src/test/java/com/android/tools/r8/shaking/methods/interfaces/InterfaceMethodKeepResolutionTest.java
M src/test/java/com/android/tools/r8/shaking/methods/interfaces/SubTypeOverridesInterfaceMethodTest.java
M src/test/testbase/java/com/android/tools/r8/TestBuilder.java
M src/test/testbase/java/com/android/tools/r8/dexsplitter/SplitterTestBase.java
ap...@google.com <ap...@google.com> #7
Project: r8
Branch: main
commit 53e3581c06d73f29fdee111b1d75fc540bfa709f
Author: Christoffer Adamsen <christofferqa@google.com>
Date: Mon Jul 01 10:21:18 2024
Transform empty member pattern to pattern that matches default init
Bug: b/323136645
Change-Id: I18b8ea87ba05debaba6b7d9131064d7b315d9f13
M src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParserOptions.java
M src/test/java/com/android/tools/r8/compatproguard/CompatKeepClassMemberNamesTestRunner.java
M src/test/java/com/android/tools/r8/shaking/ifrule/ConditionalKeepIfKeptTest.java
https://r8-review.googlesource.com/94129
Branch: main
commit 53e3581c06d73f29fdee111b1d75fc540bfa709f
Author: Christoffer Adamsen <christofferqa@google.com>
Date: Mon Jul 01 10:21:18 2024
Transform empty member pattern to pattern that matches default init
Bug:
Change-Id: I18b8ea87ba05debaba6b7d9131064d7b315d9f13
M src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParserOptions.java
M src/test/java/com/android/tools/r8/compatproguard/CompatKeepClassMemberNamesTestRunner.java
M src/test/java/com/android/tools/r8/shaking/ifrule/ConditionalKeepIfKeptTest.java
an...@google.com <an...@google.com> #8
Thank you for your patience while our engineering team worked to resolve this issue. A fix for this issue is now available in:
- Android Studio Koala Feature Drop | 2024.1.2 Beta 2
- Android Gradle Plugin 8.6.0-beta02
We encourage you to try the latest update.
If you notice further issues or have questions, please file a new bug report.
Thank you for taking the time to submit feedback — we really appreciate it!
Description
This replacement is wrong for for
keepclasseswithmembers
as the rule now only applies if the class has a default constructor.