Fixed
Status Update
Comments
my...@gmail.com <my...@gmail.com> #2
After disabling android.enableR8.fullMode=true:
com.github.shadowsocks.net.HttpsTest
|- is referenced in keep rule:
| ~/.gradle/caches/transforms-2/files-2.1/8bf3e22f613928517e5477b7d4c20103/lifecycle-viewmodel-2.2.0-rc03/proguard.txt:1:1
void com.github.shadowsocks.net.HttpsTest.<init>()
|- is referenced in keep rule:
| ~/.gradle/caches/transforms-2/files-2.1/8bf3e22f613928517e5477b7d4c20103/lifecycle-viewmodel-2.2.0-rc03/proguard.txt:1:1
void androidx.lifecycle.ViewModel.<init>()
|- is referenced in keep rule:
| ~/.gradle/caches/transforms-2/files-2.1/8bf3e22f613928517e5477b7d4c20103/lifecycle-viewmodel-2.2.0-rc03/proguard.txt:1:1
Nothing is keeping void java.lang.Object.<init>()
com.github.shadowsocks.net.HttpsTest
|- is referenced in keep rule:
| ~/.gradle/caches/transforms-2/files-2.1/8bf3e22f613928517e5477b7d4c20103/lifecycle-viewmodel-2.2.0-rc03/proguard.txt:1:1
void com.github.shadowsocks.net.HttpsTest.<init>()
|- is referenced in keep rule:
| ~/.gradle/caches/transforms-2/files-2.1/8bf3e22f613928517e5477b7d4c20103/lifecycle-viewmodel-2.2.0-rc03/proguard.txt:1:1
void androidx.lifecycle.ViewModel.<init>()
|- is referenced in keep rule:
| ~/.gradle/caches/transforms-2/files-2.1/8bf3e22f613928517e5477b7d4c20103/lifecycle-viewmodel-2.2.0-rc03/proguard.txt:1:1
Nothing is keeping void java.lang.Object.<init>()
sg...@google.com <sg...@google.com>
va...@gmail.com <va...@gmail.com> #4
In meanwhile following rule can be used:
-keepclasseswithmembers class * extends androidx.lifecycle.ViewModel {
<init>(...);
}
-keepclasseswithmembers class * extends androidx.lifecycle.ViewModel {
<init>(...);
}
ch...@google.com <ch...@google.com>
ap...@google.com <ap...@google.com> #5
Project: r8
Branch: master
commit f379c05704e3e724d99b58b7b2ca404a700f907a
Author: Christoffer Quist Adamsen <christofferqa@google.com>
Date: Tue Feb 25 11:29:23 2020
Mark types with dependent instance constructor as instantiated
Bug: 149729626, 147972078
Change-Id: Ia030c8c90715fc73ac7ab4c6201bd316725b156b
M src/main/java/com/android/tools/r8/shaking/Enqueuer.java
M src/main/java/com/android/tools/r8/shaking/RootSetBuilder.java
M src/test/java/com/android/tools/r8/compatproguard/CompatKeepClassMemberNamesTestRunner.java
M src/test/java/com/android/tools/r8/shaking/annotations/B149729626.java
M src/test/java/com/android/tools/r8/shaking/ifrule/ConditionalKeepIfKeptTest.java
https://r8-review.googlesource.com/49085
Branch: master
commit f379c05704e3e724d99b58b7b2ca404a700f907a
Author: Christoffer Quist Adamsen <christofferqa@google.com>
Date: Tue Feb 25 11:29:23 2020
Mark types with dependent instance constructor as instantiated
Bug: 149729626, 147972078
Change-Id: Ia030c8c90715fc73ac7ab4c6201bd316725b156b
M src/main/java/com/android/tools/r8/shaking/Enqueuer.java
M src/main/java/com/android/tools/r8/shaking/RootSetBuilder.java
M src/test/java/com/android/tools/r8/compatproguard/CompatKeepClassMemberNamesTestRunner.java
M src/test/java/com/android/tools/r8/shaking/annotations/B149729626.java
M src/test/java/com/android/tools/r8/shaking/ifrule/ConditionalKeepIfKeptTest.java
ap...@google.com <ap...@google.com> #6
Project: r8
Branch: 2.0
commit 7e8955152326cf60d772eca65803326eff56eb02
Author: Christoffer Quist Adamsen <christofferqa@google.com>
Date: Thu Feb 27 08:16:56 2020
Version 2.0.39
Cherry pick: Mark types with dependent instance constructor as instantiated
CL:https://r8-review.googlesource.com/c/r8/+/49085
Cherry pick: Also consider referenced fields in if rule evaluator
CL:https://r8-review.googlesource.com/c/r8/+/49089
Bug: 150189783, 149729626, 147972078
Change-Id: I52855f85275708631a765f2c806cda7db82fd9d7
M src/main/java/com/android/tools/r8/Version.java
M src/main/java/com/android/tools/r8/shaking/Enqueuer.java
M src/main/java/com/android/tools/r8/shaking/IfRuleEvaluator.java
M src/main/java/com/android/tools/r8/shaking/RootSetBuilder.java
M src/test/java/com/android/tools/r8/TestShrinkerBuilder.java
M src/test/java/com/android/tools/r8/compatproguard/CompatKeepClassMemberNamesTestRunner.java
A src/test/java/com/android/tools/r8/shaking/annotations/B149729626.java
M src/test/java/com/android/tools/r8/shaking/ifrule/ConditionalKeepIfKeptTest.java
A src/test/java/com/android/tools/r8/shaking/ifrule/KeepClassesWithAnnotatedFieldsTest.java
https://r8-review.googlesource.com/49180
Branch: 2.0
commit 7e8955152326cf60d772eca65803326eff56eb02
Author: Christoffer Quist Adamsen <christofferqa@google.com>
Date: Thu Feb 27 08:16:56 2020
Version 2.0.39
Cherry pick: Mark types with dependent instance constructor as instantiated
CL:
Cherry pick: Also consider referenced fields in if rule evaluator
CL:
Bug: 150189783, 149729626, 147972078
Change-Id: I52855f85275708631a765f2c806cda7db82fd9d7
M src/main/java/com/android/tools/r8/Version.java
M src/main/java/com/android/tools/r8/shaking/Enqueuer.java
M src/main/java/com/android/tools/r8/shaking/IfRuleEvaluator.java
M src/main/java/com/android/tools/r8/shaking/RootSetBuilder.java
M src/test/java/com/android/tools/r8/TestShrinkerBuilder.java
M src/test/java/com/android/tools/r8/compatproguard/CompatKeepClassMemberNamesTestRunner.java
A src/test/java/com/android/tools/r8/shaking/annotations/B149729626.java
M src/test/java/com/android/tools/r8/shaking/ifrule/ConditionalKeepIfKeptTest.java
A src/test/java/com/android/tools/r8/shaking/ifrule/KeepClassesWithAnnotatedFieldsTest.java
ch...@google.com <ch...@google.com> #7
This is fixed in 2.0.39 and will also go into 2.1.9-dev.
my...@gmail.com <my...@gmail.com> #8
I assume this is the version code of r8? How do we know which Android gradle plugin version does it correspond to?
mk...@google.com <mk...@google.com> #9
It will take some time before it goes into AGP. 2.0.X branch corresponds to releases targeting Android Studio (and AGP 4.0) 4.0 and 2.1.X corresponds to Android Studio 4.1 (and AGP 4.1). I think we missed beta 2 so if you would like to have the bug fix now, you can try out 2.0.39 by adding the following to your top-level build.gradle file:
buildscript {
repositories {
maven {
url 'https://storage.googleapis.com/r8-releases/raw'
}
}
dependencies {
classpath 'com.android.tools:r8:2.0.39' // Must be before the Gradle Plugin for Android.
classpath 'com.android.tools.build:gradle:X.Y.Z' // Your current AGP version.
}
}
[Deleted User] <[Deleted User]> #10
Thank you! r8:2.0.39 worked fine.
ch...@google.com <ch...@google.com> #11
Reopening this until the fix is merged to 1.6.
ap...@google.com <ap...@google.com> #12
Project: r8
Branch: 1.6
commit d3f778aefbac3b9b82f4cb7cb663b0971a402931
Author: Christoffer Quist Adamsen <christofferqa@google.com>
Date: Sun Mar 01 12:20:38 2020
Version 1.6.79
Cherry pick: Mark types with dependent instance constructor as instantiated
CL:https://r8-review.googlesource.com/c/r8/+/49085
Change-Id: Ieab0d65eff4bf2e2d161c0598ecc013a738ccac5
Bug: 149729626, 147972078
M src/main/java/com/android/tools/r8/Version.java
M src/main/java/com/android/tools/r8/shaking/Enqueuer.java
M src/main/java/com/android/tools/r8/shaking/RootSetBuilder.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/49323
Branch: 1.6
commit d3f778aefbac3b9b82f4cb7cb663b0971a402931
Author: Christoffer Quist Adamsen <christofferqa@google.com>
Date: Sun Mar 01 12:20:38 2020
Version 1.6.79
Cherry pick: Mark types with dependent instance constructor as instantiated
CL:
Change-Id: Ieab0d65eff4bf2e2d161c0598ecc013a738ccac5
Bug: 149729626, 147972078
M src/main/java/com/android/tools/r8/Version.java
M src/main/java/com/android/tools/r8/shaking/Enqueuer.java
M src/main/java/com/android/tools/r8/shaking/RootSetBuilder.java
M src/test/java/com/android/tools/r8/compatproguard/CompatKeepClassMemberNamesTestRunner.java
M src/test/java/com/android/tools/r8/shaking/ifrule/ConditionalKeepIfKeptTest.java
Description
Full source code available:
Using `-printconfiguration` in Proguard rules I can see that this is present as expected, even in full mode:
-keepclassmembers,allowobfuscation class * extends androidx.lifecycle.ViewModel {
<init>();
}
When running compiled release version, it crashes with `Cannot create an instance of class com.github.shadowsocks.net.HttpsTest`, which extends ViewModel.
Output of -whyareyoukeeping class com.github.shadowsocks.net.HttpsTest { <init>(); }:
com.github.shadowsocks.net.HttpsTest
|- is referenced from:
| void com.github.shadowsocks.widget.StatsBar.testConnection()
|- is invoked from:
| boolean com.github.shadowsocks.MainActivity.onKeyShortcut(int,android.view.KeyEvent)
|- is defined in library method overridden by:
| com.github.shadowsocks.MainActivity
|- is referenced in keep rule:
| ./mobile/build/intermediates/aapt_proguard_file/release/aapt_rules.txt:18:1
Nothing is keeping void com.github.shadowsocks.net.HttpsTest.<init>()
Related but closed issue: