Status Update
Comments
sg...@google.com <sg...@google.com>
ag...@google.com <ag...@google.com> #2
Just for context: ViewModel has a final package-private method named clear. That method is unrelated to any method defined in another package in a subclass called clear
. Have we accidentally messed that up. We would not be the first ones to do so. In fact any sub class of ViewModel that has a clear
method will not work on Dalvik:
mk...@google.com <mk...@google.com> #3
The override of package private final methods was something I looked at earlier and we should handle the case correctly - except for the case where we have -allowaccessmodification. That seem to not be the case for this example so I will take a closer look.
ap...@google.com <ap...@google.com> #4
Branch: master
commit 55fcc18a27c5ed93acf6fe9db359a28ed5bbeab2
Author: Morten Krogh-Jespersen <mkroghj@google.com>
Date: Fri Oct 23 10:45:51 2020
Test for accessibility of override before caching in seen set
Bug: 171369796
Change-Id: Ic284dd68f1293eec0b3590349d7c6bfec562c7d0
M src/main/java/com/android/tools/r8/shaking/Enqueuer.java
M src/test/java/com/android/tools/r8/resolution/virtualtargets/PackagePrivateFinalOverrideInterfaceTest.java
ap...@google.com <ap...@google.com> #5
Branch: master
commit 32646725161fc43ba803e46e0e8cc0ce9bd61b6e
Author: Morten Krogh-Jespersen <mkroghj@google.com>
Date: Fri Oct 23 10:45:30 2020
Add test for package private final override with interface error
Bug: 171369796
Change-Id: I5ecddb4173e3eceda57a489f0ba9f2f5dce5d3fc
A src/test/java/com/android/tools/r8/resolution/virtualtargets/PackagePrivateFinalOverrideInterfaceTest.java
ap...@google.com <ap...@google.com> #6
Branch: 2.1
commit 85253f5168006f580f091f4850e8e9bf23e379fd
Author: Morten Krogh-Jespersen <mkroghj@google.com>
Date: Fri Oct 23 11:46:33 2020
Test for accessibility of override before caching in seen set
Bug: 171369796
Change-Id: Ic284dd68f1293eec0b3590349d7c6bfec562c7d0
M src/main/java/com/android/tools/r8/shaking/Enqueuer.java
M src/test/java/com/android/tools/r8/resolution/virtualtargets/PackagePrivateFinalOverrideInterfaceTest.java
ap...@google.com <ap...@google.com> #7
Branch: 2.1
commit dd62fec5fdde149c8b8c72ca919e6ac59369f9db
Author: Morten Krogh-Jespersen <mkroghj@google.com>
Date: Fri Oct 23 11:46:12 2020
Add test for package private final override with interface error
Bug: 171369796
Change-Id: I5ecddb4173e3eceda57a489f0ba9f2f5dce5d3fc
A src/test/java/com/android/tools/r8/resolution/virtualtargets/PackagePrivateFinalOverrideInterfaceTest.java
ap...@google.com <ap...@google.com> #8
Branch: 2.1
commit 252de63548eedfd025840a3fa7eb1af601657c59
Author: Morten Krogh-Jespersen <mkroghj@google.com>
Date: Fri Oct 23 11:46:59 2020
Version 2.1.76
Cherry-pick: Add test for package private final override with
interface error
CL:
Cherry-pick: Test for accessibility of override before caching in seen
set
CL:
Bug: 171369796
Change-Id: I27e62a04ee8284b6256e6cc4d24f5794b9365287
M src/main/java/com/android/tools/r8/Version.java
ap...@google.com <ap...@google.com> #9
Branch: 2.2
commit f7c7b77b042f5ac6dcd503b0b35c47d85e314c24
Author: Morten Krogh-Jespersen <mkroghj@google.com>
Date: Fri Oct 23 11:33:14 2020
Add test for package private final override with interface error
Bug: 171369796
Change-Id: I5ecddb4173e3eceda57a489f0ba9f2f5dce5d3fc
A src/test/java/com/android/tools/r8/resolution/virtualtargets/PackagePrivateFinalOverrideInterfaceTest.java
ap...@google.com <ap...@google.com> #10
Branch: 2.2
commit db2132c30daadd5be66bde9c665d3e132e659a43
Author: Morten Krogh-Jespersen <mkroghj@google.com>
Date: Fri Oct 23 11:39:59 2020
Version 2.2.33
Cherry-pick: Add test for package private final override with
interface error
CL:
Cherry-pick: Test for accessibility of override before caching in seen
set
CL:
Bug: 171369796
Change-Id: Ia703d6c6b379d9365f110464ad5f5c0f9b8badfe
M src/main/java/com/android/tools/r8/Version.java
ap...@google.com <ap...@google.com> #11
Branch: 2.2
commit 915de223437a556e57e8ca8bb449f45e8f22e78c
Author: Morten Krogh-Jespersen <mkroghj@google.com>
Date: Fri Oct 23 11:34:03 2020
Test for accessibility of override before caching in seen set
Bug: 171369796
Change-Id: Ic284dd68f1293eec0b3590349d7c6bfec562c7d0
M src/main/java/com/android/tools/r8/shaking/Enqueuer.java
M src/test/java/com/android/tools/r8/resolution/virtualtargets/PackagePrivateFinalOverrideInterfaceTest.java
ap...@google.com <ap...@google.com> #12
Branch: 2.1
commit 85253f5168006f580f091f4850e8e9bf23e379fd
Author: Morten Krogh-Jespersen <mkroghj@google.com>
Date: Fri Oct 23 11:46:33 2020
Test for accessibility of override before caching in seen set
Bug: 171369796
Change-Id: Ic284dd68f1293eec0b3590349d7c6bfec562c7d0
M src/main/java/com/android/tools/r8/shaking/Enqueuer.java
M src/test/java/com/android/tools/r8/resolution/virtualtargets/PackagePrivateFinalOverrideInterfaceTest.java
ap...@google.com <ap...@google.com> #13
Branch: 2.1
commit dd62fec5fdde149c8b8c72ca919e6ac59369f9db
Author: Morten Krogh-Jespersen <mkroghj@google.com>
Date: Fri Oct 23 11:46:12 2020
Add test for package private final override with interface error
Bug: 171369796
Change-Id: I5ecddb4173e3eceda57a489f0ba9f2f5dce5d3fc
A src/test/java/com/android/tools/r8/resolution/virtualtargets/PackagePrivateFinalOverrideInterfaceTest.java
mk...@google.com <mk...@google.com> #14
OK, so this was an error on our part - we had some caching that prevented us from marking the method live and we therefore pruned it (by inserting throw null). I have backported fixes to the 2.1 and 2.2. branch. For trying out the patch to 2.1 add 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.1.76' // Must be before the Gradle Plugin for Android.
classpath 'com.android.tools.build:gradle:X.Y.Z' // Your current AGP version.
}
}
Description
In our codebase, we had a Kotlin interface with a method named
clear()
. The implementing class was derived fromViewModel
(misusing theViewModel
pattern a bit, yes).In regular builds the method worked fine, but in R8 minified builds calling the method threw null and the app crashed with
java.lang.NullPointerException: throw with null exception
. The setup is roughly as follows:We verified from the byte code in the APK that the code was indeed throwing null:
A full Android app for demonstrating is available at:https://github.com/teemu-rossi/R8TestApp . The project is configured to be minified also in debug builds.
It's using Kotlin 1.4.10, AGP 4.1.0.