Fixed
Status Update
Comments
pl...@gmail.com <pl...@gmail.com> #2
i've only tested 4.4.2 version.
uc...@google.com <uc...@google.com>
ze...@google.com <ze...@google.com>
ze...@google.com <ze...@google.com> #3
Bisected this to an error introduced in 1.4.42 with cherry pick of https://r8.googlesource.com/r8/+/a22d4a13d61b75e026d403c3ae1a5202212cffb5
The replacement of break by return results in only the first visited class having its deserializedLambda method removed.
Regression test and fix will follow shortly.
The replacement of break by return results in only the first visited class having its deserializedLambda method removed.
Regression test and fix will follow shortly.
ze...@google.com <ze...@google.com> #4
And thanks for the detailed report and reproduction!
pl...@kakaobank.com <pl...@kakaobank.com> #5
thank you!! :)b
Is there a way I can try before R8 is fixed?
Is there a way I can try before R8 is fixed?
ze...@google.com <ze...@google.com> #6
Absolutely. I'll post instructions once I have fix landed on master.
ap...@google.com <ap...@google.com> #7
Project: r8
Branch: master
commit d1dd67a48ff1971e28b72e9ba7f361149142818d
Author: Ian Zerny <zerny@google.com>
Date: Tue Feb 04 10:31:48 2020
Remove $deserializeLambda$ from all classes.
Bug: 148734239
Bug: 148831667
Bug: 148836254
Change-Id: If34f2e623097dc7d480108143f80b6b8be1f0e6e
M src/main/java/com/android/tools/r8/ir/desugar/LambdaRewriter.java
M src/test/java/com/android/tools/r8/cf/KeepDeserializeLambdaMethodTest.java
M src/test/java/com/android/tools/r8/cf/KeepDeserializeLambdaMethodTestRunner.java
https://r8-review.googlesource.com/48301
Branch: master
commit d1dd67a48ff1971e28b72e9ba7f361149142818d
Author: Ian Zerny <zerny@google.com>
Date: Tue Feb 04 10:31:48 2020
Remove $deserializeLambda$ from all classes.
Bug: 148734239
Bug: 148831667
Bug: 148836254
Change-Id: If34f2e623097dc7d480108143f80b6b8be1f0e6e
M src/main/java/com/android/tools/r8/ir/desugar/LambdaRewriter.java
M src/test/java/com/android/tools/r8/cf/KeepDeserializeLambdaMethodTest.java
M src/test/java/com/android/tools/r8/cf/KeepDeserializeLambdaMethodTestRunner.java
pl...@gmail.com <pl...@gmail.com> #8
Thank you.
So ...
I don't want to download/modify the r8 source.
Is it not possible to solve only by gradle.properties or build.gradle operation?
So ...
I don't want to download/modify the r8 source.
Is it not possible to solve only by gradle.properties or build.gradle operation?
ap...@google.com <ap...@google.com> #9
Project: r8
Branch: 2.0
commit 0a9b61108fb2922ced3744adbf4e1b8e3924cdc8
Author: Ian Zerny <zerny@google.com>
Date: Tue Feb 04 11:42:48 2020
Version 2.0.27
Cherry-pick: Remove $deserializeLambda$ from all classes.
CL:https://r8-review.googlesource.com/48301
Bug: 148734239
Change-Id: Iab8787cf610b0241e9ebd2a851211073da59160c
M src/main/java/com/android/tools/r8/Version.java
M src/main/java/com/android/tools/r8/ir/desugar/LambdaRewriter.java
M src/test/java/com/android/tools/r8/cf/KeepDeserializeLambdaMethodTest.java
M src/test/java/com/android/tools/r8/cf/KeepDeserializeLambdaMethodTestRunner.java
https://r8-review.googlesource.com/48304
Branch: 2.0
commit 0a9b61108fb2922ced3744adbf4e1b8e3924cdc8
Author: Ian Zerny <zerny@google.com>
Date: Tue Feb 04 11:42:48 2020
Version 2.0.27
Cherry-pick: Remove $deserializeLambda$ from all classes.
CL:
Bug: 148734239
Change-Id: Iab8787cf610b0241e9ebd2a851211073da59160c
M src/main/java/com/android/tools/r8/Version.java
M src/main/java/com/android/tools/r8/ir/desugar/LambdaRewriter.java
M src/test/java/com/android/tools/r8/cf/KeepDeserializeLambdaMethodTest.java
M src/test/java/com/android/tools/r8/cf/KeepDeserializeLambdaMethodTestRunner.java
ap...@google.com <ap...@google.com> #10
Project: r8
Branch: 1.6
commit 31edc0a41a352c473358a51e5efd1bedbd968872
Author: Ian Zerny <zerny@google.com>
Date: Tue Feb 04 12:25:02 2020
Version 1.6.69
Cherry-pick: Remove $deserializeLambda$ from all classes.
CL:https://r8-review.googlesource.com/c/r8/+/48301/
Bug: 148734239
Change-Id: I971506caa4998089b9ea3b081620890a2965e23b
M src/main/java/com/android/tools/r8/Version.java
M src/main/java/com/android/tools/r8/ir/desugar/LambdaRewriter.java
M src/test/java/com/android/tools/r8/cf/KeepDeserializeLambdaMethodTest.java
M src/test/java/com/android/tools/r8/cf/KeepDeserializeLambdaMethodTestRunner.java
https://r8-review.googlesource.com/48305
Branch: 1.6
commit 31edc0a41a352c473358a51e5efd1bedbd968872
Author: Ian Zerny <zerny@google.com>
Date: Tue Feb 04 12:25:02 2020
Version 1.6.69
Cherry-pick: Remove $deserializeLambda$ from all classes.
CL:
Bug: 148734239
Change-Id: I971506caa4998089b9ea3b081620890a2965e23b
M src/main/java/com/android/tools/r8/Version.java
M src/main/java/com/android/tools/r8/ir/desugar/LambdaRewriter.java
M src/test/java/com/android/tools/r8/cf/KeepDeserializeLambdaMethodTest.java
M src/test/java/com/android/tools/r8/cf/KeepDeserializeLambdaMethodTestRunner.java
ze...@google.com <ze...@google.com> #11
A build of our 1.6 branch will be available once the build bots are done creating the jar/archive. Once done, you can enable it locally for your project by updating your top-level build.gradle file with:
buildscript {
repositories {
maven {
url 'https://storage.googleapis.com/r8-releases/raw '
}
}
dependencies {
classpath 'com.android.tools:r8:1.6.69' // Must be before the Gradle Plugin for Android.
classpath 'com.android.tools.build:gradle:X.Y.Z' // Your current AGP version.
}
}
You can also use the 2.0 branch if you want which is what is going into studio 4.0.
buildscript {
repositories {
maven {
url '
}
}
dependencies {
classpath 'com.android.tools:r8:1.6.69' // Must be before the Gradle Plugin for Android.
classpath 'com.android.tools.build:gradle:X.Y.Z' // Your current AGP version.
}
}
You can also use the 2.0 branch if you want which is what is going into studio 4.0.
ze...@google.com <ze...@google.com> #12
The archive for 1.6.69 is available now. I'd be happy to know if this resolves the issue on you end too.
Thanks again!
Thanks again!
pl...@gmail.com <pl...@gmail.com> #13
My mistake changed the file name.
i write for history
- 3.2.1.png -> AGP 3.5.3
- 3.5.3.png -> AGP 3.2.1
---------
And, i'll check it out in a larger project and share it.
i write for history
- 3.2.1.png -> AGP 3.5.3
- 3.5.3.png -> AGP 3.2.1
---------
And, i'll check it out in a larger project and share it.
pl...@gmail.com <pl...@gmail.com> #14
Checked in a few projects.
SerializedLambda is gone.
SerializedLambda is gone.
ze...@google.com <ze...@google.com> #15
Wonderful. I'll close this as resolved. Don't hesitate to file issues should you encounter any others!
Description
I found a problem with a sample that used the Lambda feature to do something specific.
I use Custom Annotation and Class#getDeclaredMethods method to handle Custom Click Listener.
Custom Click can be handled by calling Binder#bind method at runtime.
I was inspired by ButterKnife Binder.
## Issue
- No problem: SerializedLambda was not present in the Dex file when using AGP 3.2.1.
- Crash: SerializedLambda has been added to the Dex file when using AGP 3.5.3.
It seems to be caused by the activation of R8 or D8.
I want to solve the above problem using AGP 3.5.3.
## Config
- Gradle version: 5.6.4
- Android Plugin Version: 3.5.3 / 3.6-rc02 / 4.0-alpha09
- Module Compile Sdk Version: API Level 28 r6
- Module Build Tools Version: 28.0.3
## Error Log
```
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.myapplication, PID: 6701
java.lang.NoClassDefFoundError: java/lang/invoke/SerializedLambda
at java.lang.Class.getDeclaredMethods(Native Method)
at java.lang.Class.getDeclaredMethods(Class.java:656)
at com.example.myapplication.bind.Binder.bind(Binder.java:44)
at com.example.myapplication.bind.Binder.bind(Binder.java:29)
at com.example.myapplication.unit.InnerView.onFinishInflate(InnerView.java:31)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:763)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
at android.view.LayoutInflater.parseInclude(LayoutInflater.java:839)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:745)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555)
at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161)
at com.example.myapplication.MainActivity.onCreate(MainActivity.java:21)
at android.app.Activity.performCreate(Activity.java:5275)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2167)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2253)
at android.app.ActivityThread.access$800(ActivityThread.java:142)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1203)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5120)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: Didn't find class "java.lang.invoke.SerializedLambda" on path: DexPathList[[zip file "/data/app/com.example.myapplication-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.myapplication-1, /vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
at java.lang.Class.getDeclaredMethods(Native Method)
at java.lang.Class.getDeclaredMethods(Class.java:656)
at com.example.myapplication.bind.Binder.bind(Binder.java:44)
at com.example.myapplication.bind.Binder.bind(Binder.java:29)
at com.example.myapplication.unit.InnerView.onFinishInflate(InnerView.java:31)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:763)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
at android.view.LayoutInflater.parseInclude(LayoutInflater.java:839)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:745)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555)
at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161)
at com.example.myapplication.MainActivity.onCreate(MainActivity.java:21)
at android.app.Activity.performCreate(Activity.java:5275)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2167)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2253)
at android.app.ActivityThread.access$800(ActivityThread.java:142)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1203)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5120)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
at dalvik.system.NativeStart.main(Native Method)
```