Fixed
Status Update
Comments
p....@catenacyber.fr <p....@catenacyber.fr> #2
Could you let us know which version of AGP you're using?
Also, could you please try the latest version of R8? You need to change the top-level build.gradle as follows:
buildscript {
repositories {
maven {
url 'http://storage.googleapis.com/r8-releases/raw '
}
}
dependencies {
classpath 'com.android.tools:r8:1.4.71' // Must be before the Gradle Plugin for Android.
classpath 'com.android.tools.build:gradle:...'
}
}
Also, could you please try the latest version of R8? You need to change the top-level build.gradle as follows:
buildscript {
repositories {
maven {
url '
}
}
dependencies {
classpath 'com.android.tools:r8:1.4.71' // Must be before the Gradle Plugin for Android.
classpath 'com.android.tools.build:gradle:...'
}
}
ja...@google.com <ja...@google.com> #3
Btw, thank you for the report!
According to the stack trace, I can spot `com.example...` Do you have a reproducible sample project that you can share with us? That would be really helpful. If it's not a sample, but your own project, and if you don't prefer to post it publicly, you can send a project to jsjeon@google.com.
Thanks!
According to the stack trace, I can spot `com.example...` Do you have a reproducible sample project that you can share with us? That would be really helpful. If it's not a sample, but your own project, and if you don't prefer to post it publicly, you can send a project to jsjeon@google.com.
Thanks!
p....@catenacyber.fr <p....@catenacyber.fr> #4
Just for the records. We had an issue regarding slf4j a year ago: issue 76025099 , but at that time, it was IllegalAccessError. At least, similar instance field `name` does matter here: https://www.slf4j.org/api/org/slf4j/impl/JDK14LoggerAdapter.html#name (or https://android.googlesource.com/platform/external/slf4j/+/495cf23/src/java/org/slf4j/impl/JDK14LoggerAdapter.java#58 )
The stack trace and the workaround (-keepnames) reminded me of issue 123068484 (similar workaround until the fix is ready: https://issuetracker.google.com/issues/123068484#comment7 ) So, depending on the AGP/R8 version, this might be a dup of that issue.
The stack trace and the workaround (-keepnames) reminded me of
p....@catenacyber.fr <p....@catenacyber.fr> #5
AGP version is 3.3.2.
I don't have a sample. I renamed the package to com.example.
I'll see if I can create a sample project that reproduces the issue.
I tried the latest R8 version you referred and now the app crashes at startup with the following stacktrace:
2019-03-11 09:57:52.532 14065-14065/com.example. W/id..debu: Zip open failed: Failure to verify dex file '/data/app/com.example.-9uMWDOxoF68ciHzJS2zc7A==/base.apk!classes3.dex': Out-of-order field_ids
2019-03-11 09:57:52.571 14065-14065/com.example. E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example., PID: 14065
java.lang.NoClassDefFoundError: Failed resolution of: Lkotlin/j/b/a/d/b;
at kotlin.j.b.a.r.<clinit>(kClassCache.kt:27)
at kotlin.j.b.a.r.a(Unknown Source:0)
at kotlin.j.b.a._a.a(ReflectionFactoryImpl.java:45)
at kotlin.f.b.D.a(Reflection.java:50)
at com.example.Application.<clinit>(Unknown Source:7)
at java.lang.Class.newInstance(Native Method)
at android.app.AppComponentFactory.instantiateApplication(AppComponentFactory.java:50)
at androidx.core.app.CoreComponentFactory.instantiateApplication(CoreComponentFactory.java:49)
at android.app.Instrumentation.newApplication(Instrumentation.java:1120)
at android.app.LoadedApk.makeApplication(LoadedApk.java:1061)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5891)
at android.app.ActivityThread.access$1100(ActivityThread.java:200)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1656)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6718)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: java.lang.ClassNotFoundException: Didn't find class "kotlin.j.b.a.d.b" on path: DexPathList[[zip file "/system/framework/org.apache.http.legacy.boot.jar", zip file "/data/app/com.example.-9uMWDOxoF68ciHzJS2zc7A==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.-9uMWDOxoF68ciHzJS2zc7A==/lib/arm, /data/app/com.example.-9uMWDOxoF68ciHzJS2zc7A==/base.apk!/lib/armeabi-v7a, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at kotlin.j.b.a.r.<clinit>(kClassCache.kt:27)
at kotlin.j.b.a.r.a(Unknown Source:0)
at kotlin.j.b.a._a.a(ReflectionFactoryImpl.java:45)
at kotlin.f.b.D.a(Reflection.java:50)
at com.example.Application.<clinit>(Unknown Source:7)
at java.lang.Class.newInstance(Native Method)
at android.app.AppComponentFactory.instantiateApplication(AppComponentFactory.java:50)
at androidx.core.app.CoreComponentFactory.instantiateApplication(CoreComponentFactory.java:49)
at android.app.Instrumentation.newApplication(Instrumentation.java:1120)
at android.app.LoadedApk.makeApplication(LoadedApk.java:1061)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5891)
at android.app.ActivityThread.access$1100(ActivityThread.java:200)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1656)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6718)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
I don't have a sample. I renamed the package to com.example.
I'll see if I can create a sample project that reproduces the issue.
I tried the latest R8 version you referred and now the app crashes at startup with the following stacktrace:
2019-03-11 09:57:52.532 14065-14065/com.example. W/id..debu: Zip open failed: Failure to verify dex file '/data/app/com.example.-9uMWDOxoF68ciHzJS2zc7A==/base.apk!classes3.dex': Out-of-order field_ids
2019-03-11 09:57:52.571 14065-14065/com.example. E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example., PID: 14065
java.lang.NoClassDefFoundError: Failed resolution of: Lkotlin/j/b/a/d/b;
at kotlin.j.b.a.r.<clinit>(kClassCache.kt:27)
at kotlin.j.b.a.r.a(Unknown Source:0)
at kotlin.j.b.a._a.a(ReflectionFactoryImpl.java:45)
at kotlin.f.b.D.a(Reflection.java:50)
at com.example.Application.<clinit>(Unknown Source:7)
at java.lang.Class.newInstance(Native Method)
at android.app.AppComponentFactory.instantiateApplication(AppComponentFactory.java:50)
at androidx.core.app.CoreComponentFactory.instantiateApplication(CoreComponentFactory.java:49)
at android.app.Instrumentation.newApplication(Instrumentation.java:1120)
at android.app.LoadedApk.makeApplication(LoadedApk.java:1061)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5891)
at android.app.ActivityThread.access$1100(ActivityThread.java:200)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1656)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6718)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: java.lang.ClassNotFoundException: Didn't find class "kotlin.j.b.a.d.b" on path: DexPathList[[zip file "/system/framework/org.apache.http.legacy.boot.jar", zip file "/data/app/com.example.-9uMWDOxoF68ciHzJS2zc7A==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.-9uMWDOxoF68ciHzJS2zc7A==/lib/arm, /data/app/com.example.-9uMWDOxoF68ciHzJS2zc7A==/base.apk!/lib/armeabi-v7a, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at kotlin.j.b.a.r.<clinit>(kClassCache.kt:27)
at kotlin.j.b.a.r.a(Unknown Source:0)
at kotlin.j.b.a._a.a(ReflectionFactoryImpl.java:45)
at kotlin.f.b.D.a(Reflection.java:50)
at com.example.Application.<clinit>(Unknown Source:7)
at java.lang.Class.newInstance(Native Method)
at android.app.AppComponentFactory.instantiateApplication(AppComponentFactory.java:50)
at androidx.core.app.CoreComponentFactory.instantiateApplication(CoreComponentFactory.java:49)
at android.app.Instrumentation.newApplication(Instrumentation.java:1120)
at android.app.LoadedApk.makeApplication(LoadedApk.java:1061)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5891)
at android.app.ActivityThread.access$1100(ActivityThread.java:200)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1656)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6718)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
sc...@gmail.com <sc...@gmail.com> #6
Project: r8
Branch: master
commit 7e2e1235f3d029ebdd4c006bce0b3db38d66ffdb
Author: Jinseong Jeon <jsjeon@google.com>
Date: Tue Mar 12 13:02:35 2019
Disallow direct manipulation of field arrays.
Also, verify the absence of duplicate fields.
These are `field` version of the followings:
*https://r8-review.googlesource.com/c/r8/+/33929
*https://r8-review.googlesource.com/c/r8/+/33930
*https://r8-review.googlesource.com/c/r8/+/34123
plus a couple more clean up regarding array copy/manipulation.
Bug: 127932803
Change-Id: Id246f1a725a567a5b3d24f2bbfb6ef83cc4bf9ad
M src/main/java/com/android/tools/r8/ResourceShrinker.java
M src/main/java/com/android/tools/r8/dex/FileWriter.java
M src/main/java/com/android/tools/r8/graph/DexAnnotationDirectory.java
M src/main/java/com/android/tools/r8/graph/DexClass.java
M src/main/java/com/android/tools/r8/graph/DexProgramClass.java
M src/main/java/com/android/tools/r8/ir/optimize/SwitchMapCollector.java
M src/main/java/com/android/tools/r8/ir/optimize/classinliner/InlineCandidateProcessor.java
M src/main/java/com/android/tools/r8/ir/optimize/lambda/CaptureSignature.java
M src/main/java/com/android/tools/r8/ir/optimize/lambda/LambdaGroup.java
M src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/JStyleLambdaGroup.java
M src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/KStyleLambdaGroup.java
M src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/KotlinLambdaClassValidator.java
M src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/KotlinLambdaGroupIdFactory.java
M src/main/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizer.java
M src/main/java/com/android/tools/r8/ir/optimize/staticizer/StaticizingProcessor.java
M src/main/java/com/android/tools/r8/naming/MinifiedNameMapPrinter.java
M src/main/java/com/android/tools/r8/shaking/StaticClassMerger.java
M src/main/java/com/android/tools/r8/shaking/TreePruner.java
M src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
M src/test/java/com/android/tools/r8/invalid/DuplicateDefinitionsTest.java
M src/test/java/com/android/tools/r8/kotlin/KotlinLambdaMergingTest.java
M src/test/java/com/android/tools/r8/naming/IdentifierMinifierTest.java
M src/test/java/com/android/tools/r8/utils/codeinspector/FoundClassSubject.java
https://r8-review.googlesource.com/35700
Branch: master
commit 7e2e1235f3d029ebdd4c006bce0b3db38d66ffdb
Author: Jinseong Jeon <jsjeon@google.com>
Date: Tue Mar 12 13:02:35 2019
Disallow direct manipulation of field arrays.
Also, verify the absence of duplicate fields.
These are `field` version of the followings:
*
*
*
plus a couple more clean up regarding array copy/manipulation.
Bug: 127932803
Change-Id: Id246f1a725a567a5b3d24f2bbfb6ef83cc4bf9ad
M src/main/java/com/android/tools/r8/ResourceShrinker.java
M src/main/java/com/android/tools/r8/dex/FileWriter.java
M src/main/java/com/android/tools/r8/graph/DexAnnotationDirectory.java
M src/main/java/com/android/tools/r8/graph/DexClass.java
M src/main/java/com/android/tools/r8/graph/DexProgramClass.java
M src/main/java/com/android/tools/r8/ir/optimize/SwitchMapCollector.java
M src/main/java/com/android/tools/r8/ir/optimize/classinliner/InlineCandidateProcessor.java
M src/main/java/com/android/tools/r8/ir/optimize/lambda/CaptureSignature.java
M src/main/java/com/android/tools/r8/ir/optimize/lambda/LambdaGroup.java
M src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/JStyleLambdaGroup.java
M src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/KStyleLambdaGroup.java
M src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/KotlinLambdaClassValidator.java
M src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/KotlinLambdaGroupIdFactory.java
M src/main/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizer.java
M src/main/java/com/android/tools/r8/ir/optimize/staticizer/StaticizingProcessor.java
M src/main/java/com/android/tools/r8/naming/MinifiedNameMapPrinter.java
M src/main/java/com/android/tools/r8/shaking/StaticClassMerger.java
M src/main/java/com/android/tools/r8/shaking/TreePruner.java
M src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
M src/test/java/com/android/tools/r8/invalid/DuplicateDefinitionsTest.java
M src/test/java/com/android/tools/r8/kotlin/KotlinLambdaMergingTest.java
M src/test/java/com/android/tools/r8/naming/IdentifierMinifierTest.java
M src/test/java/com/android/tools/r8/utils/codeinspector/FoundClassSubject.java
p....@catenacyber.fr <p....@catenacyber.fr> #7
Thank you for trying the R8 version I mentioned. It seems to me that your initial issue ( comment #1 ) is fixed between 1.3 and 1.4, so I believe it *was* a dup of issue 123068484 .
Now, in 1.4, it seems there are two issues.
* Out-of-order field_ids
comment #6 is trying to nail down in which step we may introduce duplicate fields. I'm afraid if it's accidentally fixed in master (1.5), so, instead of using comment #6 , could you please find the attached r8.jar and run it with assertion enabled? You can use the pre-built r8.jar as follows:
buildscript {
repositories {
maven {
url 'https://kotlin.bintray.com/kotlinx/ '
}
}
dependencies {
classpath files($PATH_TO_R8_JAR) // Must be before the Gradle Plugin for Android.
classpath 'com.android.tools.build:gradle:3.0.1'
}
}
$ JAVA_OPTS="-ea" ./gradlew clean assembleRelease --no-daemon --stacktrace
Just to note, that one is built withhttps://r8-review.googlesource.com/c/r8/+/35800 (R8 version 1.4.73, cherry-picking comment #6 )
* NoClassDefFoundError
According to the stack trace, it looks like Kotlin reflection failed to find some of its own class, `kotlin.reflect.jvm.internal.pcollections.HashPMap`:
https://github.com/JetBrains/kotlin/blob/master/libraries/stdlib/jvm/runtime/kotlin/jvm/internal/Reflection.java#L46
-->https://github.com/JetBrains/kotlin/blob/master/core/reflection.jvm/src/kotlin/reflect/jvm/internal/kClassCache.kt#L27
But I'm not sure how this is possible. According to the following lines, though, I suspect you have a static field that stores Kotlin class name or something?
at kotlin.f.b.D.a(Reflection.java:50)
at com.example.Application.<clinit>(Unknown Source:7)
If you don't mind, is it possible for you to share how the code around that place looks like? Again, you can send an email to me directly. Thanks!
Now, in 1.4, it seems there are two issues.
* Out-of-order field_ids
buildscript {
repositories {
maven {
url '
}
}
dependencies {
classpath files($PATH_TO_R8_JAR) // Must be before the Gradle Plugin for Android.
classpath 'com.android.tools.build:gradle:3.0.1'
}
}
$ JAVA_OPTS="-ea" ./gradlew clean assembleRelease --no-daemon --stacktrace
Just to note, that one is built with
* NoClassDefFoundError
According to the stack trace, it looks like Kotlin reflection failed to find some of its own class, `kotlin.reflect.jvm.internal.pcollections.HashPMap`:
-->
But I'm not sure how this is possible. According to the following lines, though, I suspect you have a static field that stores Kotlin class name or something?
at kotlin.f.b.D.a(Reflection.java:50)
at com.example.Application.<clinit>(Unknown Source:7)
If you don't mind, is it possible for you to share how the code around that place looks like? Again, you can send an email to me directly. Thanks!
p....@catenacyber.fr <p....@catenacyber.fr> #8
> classpath 'com.android.tools.build:gradle:3.0.1'
Oops, pointed too old version. As long as the path to r8.jar appears before AGP, you can use any versions you want.
Oops, pointed too old version. As long as the path to r8.jar appears before AGP, you can use any versions you want.
mr...@google.com <mr...@google.com> #9
I sent you an email with the result. Shortly, the crash still occurs with the r8.jar you attached.
pi...@gmail.com <pi...@gmail.com> #10
I haven't mentioned it, but the way I'm testing R8 is with debug build where I have the following Gradle setup:
app/build.gradle:
buildTypes {
debug {
minifyEnabled true
useProguard = false
proguardFiles = proguardFilenames()
proguardFile getDefaultProguardFile("proguard-android.txt")
My gradle.properties:
org.gradle.jvmargs=-Dfile.encoding=UTF-8 -Xmx9g -Xms512m -XX:MaxPermSize=1024m
org.gradle.parallel=true
org.gradle.daemon=true
org.gradle.caching=true
org.gradle.configureondemand=false
kapt.use.worker.api=true
android.useAndroidX=true
android.enableJetifier=true
android.enableUnitTestBinaryResources=true
android.enableSeparateAnnotationProcessing=true
android.enableSeparateRClassCompilation=true
android.enableR8 = true
app/build.gradle:
buildTypes {
debug {
minifyEnabled true
useProguard = false
proguardFiles = proguardFilenames()
proguardFile getDefaultProguardFile("proguard-android.txt")
My gradle.properties:
org.gradle.jvmargs=-Dfile.encoding=UTF-8 -Xmx9g -Xms512m -XX:MaxPermSize=1024m
org.gradle.parallel=true
org.gradle.daemon=true
org.gradle.caching=true
org.gradle.configureondemand=false
kapt.use.worker.api=true
android.useAndroidX=true
android.enableJetifier=true
android.enableUnitTestBinaryResources=true
android.enableSeparateAnnotationProcessing=true
android.enableSeparateRClassCompilation=true
android.enableR8 = true
pi...@gmail.com <pi...@gmail.com> #11
Project: r8
Branch: d8-1.4
commit fd9fcdf19cb6600145852215dd45f7ecbb949255
Author: Jinseong Jeon <jsjeon@google.com>
Date: Wed Mar 13 14:24:48 2019
Version 1.4.75
Cherry-pick:
Disallow direct manipulation of field arrays.
Also, verify the absence of duplicate fields.
CL:https://r8-review.googlesource.com/35700
Cherry-pick:
Remove a wrong logging.
CL:https://r8-review.googlesource.com/c/r8/+/35801
Bug: 127932803
Change-Id: I7ba45c73fe7b464ab271194acf737e6aa1da023e
M src/main/java/com/android/tools/r8/ResourceShrinker.java
M src/main/java/com/android/tools/r8/Version.java
M src/main/java/com/android/tools/r8/dex/FileWriter.java
M src/main/java/com/android/tools/r8/graph/DexAnnotationDirectory.java
M src/main/java/com/android/tools/r8/graph/DexClass.java
M src/main/java/com/android/tools/r8/graph/DexProgramClass.java
M src/main/java/com/android/tools/r8/ir/optimize/SwitchMapCollector.java
M src/main/java/com/android/tools/r8/ir/optimize/classinliner/InlineCandidateProcessor.java
M src/main/java/com/android/tools/r8/ir/optimize/lambda/CaptureSignature.java
M src/main/java/com/android/tools/r8/ir/optimize/lambda/LambdaGroup.java
M src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/JStyleLambdaGroup.java
M src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/KStyleLambdaGroup.java
M src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/KotlinLambdaClassValidator.java
M src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/KotlinLambdaGroupIdFactory.java
M src/main/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizer.java
M src/main/java/com/android/tools/r8/ir/optimize/staticizer/StaticizingProcessor.java
M src/main/java/com/android/tools/r8/naming/MinifiedNameMapPrinter.java
M src/main/java/com/android/tools/r8/naming/ProguardMapApplier.java
M src/main/java/com/android/tools/r8/shaking/StaticClassMerger.java
M src/main/java/com/android/tools/r8/shaking/TreePruner.java
M src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
M src/test/java/com/android/tools/r8/invalid/DuplicateDefinitionsTest.java
M src/test/java/com/android/tools/r8/kotlin/KotlinLambdaMergingTest.java
M src/test/java/com/android/tools/r8/naming/IdentifierMinifierTest.java
M src/test/java/com/android/tools/r8/shaking/PrintUsageTest.java
M src/test/java/com/android/tools/r8/utils/codeinspector/FoundClassSubject.java
https://r8-review.googlesource.com/35800
Branch: d8-1.4
commit fd9fcdf19cb6600145852215dd45f7ecbb949255
Author: Jinseong Jeon <jsjeon@google.com>
Date: Wed Mar 13 14:24:48 2019
Version 1.4.75
Cherry-pick:
Disallow direct manipulation of field arrays.
Also, verify the absence of duplicate fields.
CL:
Cherry-pick:
Remove a wrong logging.
CL:
Bug: 127932803
Change-Id: I7ba45c73fe7b464ab271194acf737e6aa1da023e
M src/main/java/com/android/tools/r8/ResourceShrinker.java
M src/main/java/com/android/tools/r8/Version.java
M src/main/java/com/android/tools/r8/dex/FileWriter.java
M src/main/java/com/android/tools/r8/graph/DexAnnotationDirectory.java
M src/main/java/com/android/tools/r8/graph/DexClass.java
M src/main/java/com/android/tools/r8/graph/DexProgramClass.java
M src/main/java/com/android/tools/r8/ir/optimize/SwitchMapCollector.java
M src/main/java/com/android/tools/r8/ir/optimize/classinliner/InlineCandidateProcessor.java
M src/main/java/com/android/tools/r8/ir/optimize/lambda/CaptureSignature.java
M src/main/java/com/android/tools/r8/ir/optimize/lambda/LambdaGroup.java
M src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/JStyleLambdaGroup.java
M src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/KStyleLambdaGroup.java
M src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/KotlinLambdaClassValidator.java
M src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/KotlinLambdaGroupIdFactory.java
M src/main/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizer.java
M src/main/java/com/android/tools/r8/ir/optimize/staticizer/StaticizingProcessor.java
M src/main/java/com/android/tools/r8/naming/MinifiedNameMapPrinter.java
M src/main/java/com/android/tools/r8/naming/ProguardMapApplier.java
M src/main/java/com/android/tools/r8/shaking/StaticClassMerger.java
M src/main/java/com/android/tools/r8/shaking/TreePruner.java
M src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
M src/test/java/com/android/tools/r8/invalid/DuplicateDefinitionsTest.java
M src/test/java/com/android/tools/r8/kotlin/KotlinLambdaMergingTest.java
M src/test/java/com/android/tools/r8/naming/IdentifierMinifierTest.java
M src/test/java/com/android/tools/r8/shaking/PrintUsageTest.java
M src/test/java/com/android/tools/r8/utils/codeinspector/FoundClassSubject.java
p....@catenacyber.fr <p....@catenacyber.fr> #12
Project: r8
Branch: master
commit 726699812df490fe2e907da17ec671632e22bc95
Author: Christoffer Quist Adamsen <christofferqa@google.com>
Date: Thu Mar 14 12:58:32 2019
Verify order of field ids
Bug: 127932803
Change-Id: If72fb5cf51cd6721d94498240fa1da9f6daa3aef
M src/main/java/com/android/tools/r8/dex/DexParser.java
https://r8-review.googlesource.com/35922
Branch: master
commit 726699812df490fe2e907da17ec671632e22bc95
Author: Christoffer Quist Adamsen <christofferqa@google.com>
Date: Thu Mar 14 12:58:32 2019
Verify order of field ids
Bug: 127932803
Change-Id: If72fb5cf51cd6721d94498240fa1da9f6daa3aef
M src/main/java/com/android/tools/r8/dex/DexParser.java
ja...@google.com <ja...@google.com> #13
Project: r8
Branch: master
commit a419118a876157efb9b02f74e42fc249f6d9d4d9
Author: Christoffer Quist Adamsen <christofferqa@google.com>
Date: Fri Mar 15 08:47:25 2019
Verify minifier traversal is consistent with the class hierarchy
Bug: 127932803
Change-Id: Ifb84c442f42abaeac8376e76bc692c062c648d50
M src/main/java/com/android/tools/r8/naming/FieldNameMinifier.java
https://r8-review.googlesource.com/35943
Branch: master
commit a419118a876157efb9b02f74e42fc249f6d9d4d9
Author: Christoffer Quist Adamsen <christofferqa@google.com>
Date: Fri Mar 15 08:47:25 2019
Verify minifier traversal is consistent with the class hierarchy
Bug: 127932803
Change-Id: Ifb84c442f42abaeac8376e76bc692c062c648d50
M src/main/java/com/android/tools/r8/naming/FieldNameMinifier.java
p....@catenacyber.fr <p....@catenacyber.fr> #14
Project: r8
Branch: master
commit 983508b3490eea7b8665f80e3f26871cae6b7ef2
Author: Christoffer Quist Adamsen <christofferqa@google.com>
Date: Fri Mar 15 13:06:05 2019
Enable logging of field minification states
Bug: 127932803
Change-Id: I784b8bd5414617976f4a07f737e59c6da574d46d
M src/main/java/com/android/tools/r8/naming/FieldNameMinifier.java
M src/main/java/com/android/tools/r8/naming/MethodNameMinifier.java
M src/main/java/com/android/tools/r8/naming/Minifier.java
M src/main/java/com/android/tools/r8/naming/NamingState.java
M src/main/java/com/android/tools/r8/utils/InternalOptions.java
https://r8-review.googlesource.com/35980
Branch: master
commit 983508b3490eea7b8665f80e3f26871cae6b7ef2
Author: Christoffer Quist Adamsen <christofferqa@google.com>
Date: Fri Mar 15 13:06:05 2019
Enable logging of field minification states
Bug: 127932803
Change-Id: I784b8bd5414617976f4a07f737e59c6da574d46d
M src/main/java/com/android/tools/r8/naming/FieldNameMinifier.java
M src/main/java/com/android/tools/r8/naming/MethodNameMinifier.java
M src/main/java/com/android/tools/r8/naming/Minifier.java
M src/main/java/com/android/tools/r8/naming/NamingState.java
M src/main/java/com/android/tools/r8/utils/InternalOptions.java
ma...@gmail.com <ma...@gmail.com> #15
Thank you Nimrod for running ToT R8 with extensive field minification logging. It seems to me that there are no more duplicate fields, and the apk built on ToT doesn't have duplicate fields anymore:
$ ~/projects/d8/tools/dex2oat.py based-on-983508b3490eea7b8665f80e3f26871cae6b7ef2.apk
Running: /usr/local/google/home/jsjeon/projects/d8/tools/linux/art/bin/dex2oat --android-root=/usr/local/google/home/jsjeon/projects/d8/tools/linux/art/product/angler/system --runtime-arg -Xnorelocate --dex-file=based-on-983508b3490eea7b8665f80e3f26871cae6b7ef2.apk --oat-file=/tmp/tmp9mrNpc/out.oat --instruction-set=arm64
dex2oat I 03-15 14:52:19 48660 48660 dex2oat.cc:3108] /usr/local/google/home/jsjeon/projects/d8/tools/linux/art/bin/dex2oat --android-root=/usr/local/google/home/jsjeon/projects/d8/tools/linux/art/product/angler/system --runtime-arg -Xnorelocate --dex-file=based-on-983508b3490eea7b8665f80e3f26871cae6b7ef2.apk --oat-file=/tmp/tmp9mrNpc/out.oat --instruction-set=arm64
dex2oat I 03-15 14:52:21 48660 48660 dex2oat.cc:2808] dex2oat took 2.137s (52.051s cpu) (threads: 72) arena alloc=40MB (42973392B) java alloc=22MB (23607088B) native alloc=97MB (102247648B) free=67MB (70779680B)
To make sure comment #13 fixed the issue, could you try running the attached r8.jar one more time? It's simply manual cherry-picking of comment #14 to add logging messages regarding field minification. Just in case, I attached the diff as well. Please refer to comment #7 about how to use local r8.jar. Also, refer to Christoffer's email about running r8 while leaving specific logging message for field minification.
Thanks!
$ ~/projects/d8/tools/dex2oat.py based-on-983508b3490eea7b8665f80e3f26871cae6b7ef2.apk
Running: /usr/local/google/home/jsjeon/projects/d8/tools/linux/art/bin/dex2oat --android-root=/usr/local/google/home/jsjeon/projects/d8/tools/linux/art/product/angler/system --runtime-arg -Xnorelocate --dex-file=based-on-983508b3490eea7b8665f80e3f26871cae6b7ef2.apk --oat-file=/tmp/tmp9mrNpc/out.oat --instruction-set=arm64
dex2oat I 03-15 14:52:19 48660 48660 dex2oat.cc:3108] /usr/local/google/home/jsjeon/projects/d8/tools/linux/art/bin/dex2oat --android-root=/usr/local/google/home/jsjeon/projects/d8/tools/linux/art/product/angler/system --runtime-arg -Xnorelocate --dex-file=based-on-983508b3490eea7b8665f80e3f26871cae6b7ef2.apk --oat-file=/tmp/tmp9mrNpc/out.oat --instruction-set=arm64
dex2oat I 03-15 14:52:21 48660 48660 dex2oat.cc:2808] dex2oat took 2.137s (52.051s cpu) (threads: 72) arena alloc=40MB (42973392B) java alloc=22MB (23607088B) native alloc=97MB (102247648B) free=67MB (70779680B)
To make sure
Thanks!
ja...@google.com <ja...@google.com> #16
Project: r8
Branch: master
commit a6631581394f6851eb8f09ffed688a11bd15c16b
Author: Christoffer Quist Adamsen <christofferqa@google.com>
Date: Mon Mar 18 14:54:00 2019
Reproduce collision bug in field name minifier
Bug: 127932803
Change-Id: Ic54e42d7290ada97ea6ed974deddd28f88df7393
A src/test/java/com/android/tools/r8/naming/FieldMinificationCollisionTest.java
https://r8-review.googlesource.com/36012
Branch: master
commit a6631581394f6851eb8f09ffed688a11bd15c16b
Author: Christoffer Quist Adamsen <christofferqa@google.com>
Date: Mon Mar 18 14:54:00 2019
Reproduce collision bug in field name minifier
Bug: 127932803
Change-Id: Ic54e42d7290ada97ea6ed974deddd28f88df7393
A src/test/java/com/android/tools/r8/naming/FieldMinificationCollisionTest.java
ka...@gmail.com <ka...@gmail.com> #17
Project: r8
Branch: master
commit 10c83b9dbd149cb7839a95fb255a7c54a006ce13
Author: Christoffer Quist Adamsen <christofferqa@google.com>
Date: Thu Mar 21 08:59:20 2019
Tests for field minification in presence of reserved names
The tests verify that names that are explicitly reserved via keep rules are taken into account by the field name minifier, and that field names in the library are also treated as being implicitly reserved.
Bug: 128973195, 127932803, 128656974, 128600647
Change-Id: Ic7560780cafadbbc8543d86dd8628e2866fc508a
A src/test/java/com/android/tools/r8/naming/ReservedFieldNameInSubClassTest.java
A src/test/java/com/android/tools/r8/naming/ReservedFieldNameInSubInterfaceTest.java
A src/test/java/com/android/tools/r8/naming/ReservedFieldNameInSuperClassTest.java
A src/test/java/com/android/tools/r8/naming/ReservedFieldNameInSuperInterfaceTest.java
https://r8-review.googlesource.com/36106
Branch: master
commit 10c83b9dbd149cb7839a95fb255a7c54a006ce13
Author: Christoffer Quist Adamsen <christofferqa@google.com>
Date: Thu Mar 21 08:59:20 2019
Tests for field minification in presence of reserved names
The tests verify that names that are explicitly reserved via keep rules are taken into account by the field name minifier, and that field names in the library are also treated as being implicitly reserved.
Bug: 128973195, 127932803, 128656974, 128600647
Change-Id: Ic7560780cafadbbc8543d86dd8628e2866fc508a
A src/test/java/com/android/tools/r8/naming/ReservedFieldNameInSubClassTest.java
A src/test/java/com/android/tools/r8/naming/ReservedFieldNameInSubInterfaceTest.java
A src/test/java/com/android/tools/r8/naming/ReservedFieldNameInSuperClassTest.java
A src/test/java/com/android/tools/r8/naming/ReservedFieldNameInSuperInterfaceTest.java
Description
The reward for this fix being accepted upstream has been set at $300.
Original Report:
Hello graphviz team,
As part of our fuzzing efforts at Google, we have identified an issue affecting
graphviz (tested with revision * master 510f40d71448f7b8df18df1c2c3520787fcdadc5).
To reproduce, we are attaching a Dockerfile which compiles the project with
LLVM, taking advantage of the sanitizers that it offers. More information about
how to use the attached Dockerfile can be found here:
TL;DR instructions:
* `mkdir project`
* `cp Dockerfile /path/to/project`
* `docker build --no-cache /path/to/project`
* `docker run -it image_id_from_docker_build`
From another terminal, outside the container:
`docker cp /path/to/attached/reproducer running_container_hostname:/fuzzing/reproducer`
(reference:
And, back inside the container:
`/fuzzing/repro.sh /fuzzing/reproducer`
Alternatively, and depending on the bug, you could use gcc, valgrind or other
instrumentation tools to aid in the investigation. The sanitizer error that we
encountered is here:
ASAN:DEADLYSIGNAL
=================================================================
==11==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000010 (pc 0x7fc440d68cc0 bp 0x7ffd25eda360 sp 0x7ffd25eda300 T0)
==11==The signal is caused by a READ memory access.
==11==Hint: address points to the zero page.
#0 0x7fc440d68cbf in rebuild_vlists /fuzzing/graphviz/lib/dotgen/conc.c:162:32
#1 0x7fc440d6935c in rebuild_vlists /fuzzing/graphviz/lib/dotgen/conc.c:194:2
#2 0x7fc440d6707c in dot_concentrate /fuzzing/graphviz/lib/dotgen/conc.c:242:2
#3 0x7fc440d88943 in dot_position /fuzzing/graphviz/lib/dotgen/position.c:127:2
#4 0x7fc440d74a16 in dotLayout /fuzzing/graphviz/lib/dotgen/dotinit.c:326:9
#5 0x7fc440d74117 in doDot /fuzzing/graphviz/lib/dotgen/dotinit.c:463:2
#6 0x7fc440d74019 in dot_layout /fuzzing/graphviz/lib/dotgen/dotinit.c:509:22
#7 0x7fc441786ac3 in gvLayoutJobs /fuzzing/graphviz/lib/gvc/gvlayout.c:85:2
#8 0x7fc441797c43 in gvLayout /fuzzing/graphviz/lib/gvc/gvc.c:65:9
#9 0x51d62b in LLVMFuzzerTestOneInput /fuzzing/graphviz/./fuzzer.cc:13:18
#10 0x50f9cc in fuzzer::Fuzzer::ExecuteCallback(unsigned char const*, unsigned long) (/fuzzing/graphviz/fuzzer+0x50f9cc)
#11 0x50f18e in fuzzer::Fuzzer::RunOne(unsigned char const*, unsigned long) (/fuzzing/graphviz/fuzzer+0x50f18e)
#12 0x508fed in fuzzer::RunOneTest(fuzzer::Fuzzer*, char const*) (/fuzzing/graphviz/fuzzer+0x508fed)
#13 0x50a4bf in fuzzer::FuzzerDriver(int*, char***, int (*)(unsigned char const*, unsigned long)) (/fuzzing/graphviz/fuzzer+0x50a4bf)
#14 0x508e9c in main (/fuzzing/graphviz/fuzzer+0x508e9c)
#15 0x7fc43f7232b0 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x202b0)
#16 0x41e5a9 in _start (/fuzzing/graphviz/fuzzer+0x41e5a9)
AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV /fuzzing/graphviz/lib/dotgen/conc.c:162:32 in rebuild_vlists
==11==ABORTING
We will gladly work with you so you can successfully confirm and reproduce this
issue. Do let us know if you have any feedback surrounding the documentation.
Once you have reproduced the issue, we'd appreciate to learn your expected
timeline for an update to be released. With any fix, please attribute the report
to "Google Autofuzz project".
We are also pleased to inform you that your project is eligible for inclusion to
the OSS-Fuzz project, which can provide additional continuous fuzzing, and
encourage you to investigate integration options.
Don't hesitate to let us know if you have any questions!
Google AutoFuzz Team