New issue
Advanced search Search tips

Issue 922132 link

Starred by 1 user

Issue metadata

Status: Assigned
Owner:
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Android
Pri: 1
Type: Bug
DFM



Sign in to add a comment

Chrome Modern bundle crashes on startup without VR module

Project Member Reported by tiborg@chromium.org, Jan 15

Issue description

With a release build of public Chrome Modern I get the following error when starting Chrome without the VR module installed:

01-15 17:23:25.789: E/AndroidRuntime(9586): FATAL EXCEPTION: main
01-15 17:23:25.789: E/AndroidRuntime(9586): Process: org.chromium.chrome, PID: 9586
01-15 17:23:25.789: E/AndroidRuntime(9586): java.lang.NoClassDefFoundError: Failed resolution of: LRrb;
01-15 17:23:25.789: E/AndroidRuntime(9586): 	at rMa.d(PG:13)
01-15 17:23:25.789: E/AndroidRuntime(9586): 	at rMa.a(PG:17)
01-15 17:23:25.789: E/AndroidRuntime(9586): 	at ZLa.onCreate(PG:34)
01-15 17:23:25.789: E/AndroidRuntime(9586): 	at android.app.Activity.performCreate(Activity.java:7144)
01-15 17:23:25.789: E/AndroidRuntime(9586): 	at android.app.Activity.performCreate(Activity.java:7135)
01-15 17:23:25.789: E/AndroidRuntime(9586): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
01-15 17:23:25.789: E/AndroidRuntime(9586): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2894)
01-15 17:23:25.789: E/AndroidRuntime(9586): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3049)
01-15 17:23:25.789: E/AndroidRuntime(9586): 	at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
01-15 17:23:25.789: E/AndroidRuntime(9586): 	at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
01-15 17:23:25.789: E/AndroidRuntime(9586): 	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
01-15 17:23:25.789: E/AndroidRuntime(9586): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1809)
01-15 17:23:25.789: E/AndroidRuntime(9586): 	at android.os.Handler.dispatchMessage(Handler.java:106)
01-15 17:23:25.789: E/AndroidRuntime(9586): 	at android.os.Looper.loop(Looper.java:193)
01-15 17:23:25.789: E/AndroidRuntime(9586): 	at android.app.ActivityThread.main(ActivityThread.java:6680)
01-15 17:23:25.789: E/AndroidRuntime(9586): 	at java.lang.reflect.Method.invoke(Native Method)
01-15 17:23:25.789: E/AndroidRuntime(9586): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
01-15 17:23:25.789: E/AndroidRuntime(9586): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
01-15 17:23:25.789: E/AndroidRuntime(9586): Caused by: java.lang.ClassNotFoundException: Didn't find class "Rrb" on path: DexPathList[[zip file "/data/app/org.chromium.chrome-u4cq8iyvWpda-250_zQwCA==/base.apk", zip file "/data/app/org.chromium.chrome-u4cq8iyvWpda-250_zQwCA==/split_config.en.apk"],nativeLibraryDirectories=[/data/app/org.chromium.chrome-u4cq8iyvWpda-250_zQwCA==/lib/arm, /data/app/org.chromium.chrome-u4cq8iyvWpda-250_zQwCA==/base.apk!/lib/armeabi-v7a, /data/app/org.chromium.chrome-u4cq8iyvWpda-250_zQwCA==/split_config.en.apk!/lib/armeabi-v7a, /system/lib]]
01-15 17:23:25.789: E/AndroidRuntime(9586): 	at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
01-15 17:23:25.789: E/AndroidRuntime(9586): 	at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
01-15 17:23:25.789: E/AndroidRuntime(9586): 	at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
01-15 17:23:25.789: E/AndroidRuntime(9586): 	... 18 more
01-15 17:23:25.789: E/AndroidRuntime(9586): 	Suppressed: java.io.IOException: No original dex files found for dex location /data/app/org.chromium.chrome-u4cq8iyvWpda-250_zQwCA==/split_config.en.apk
01-15 17:23:25.789: E/AndroidRuntime(9586): 		at dalvik.system.DexFile.openDexFileNative(Native Method)
01-15 17:23:25.789: E/AndroidRuntime(9586): 		at dalvik.system.DexFile.openDexFile(DexFile.java:354)
01-15 17:23:25.789: E/AndroidRuntime(9586): 		at dalvik.system.DexFile.<init>(DexFile.java:101)
01-15 17:23:25.789: E/AndroidRuntime(9586): 		at dalvik.system.DexFile.<init>(DexFile.java:75)
01-15 17:23:25.789: E/AndroidRuntime(9586): 		at dalvik.system.DexPathList.loadDexFile(DexPathList.java:394)
01-15 17:23:25.789: E/AndroidRuntime(9586): 		at dalvik.system.DexPathList.makeDexElements(DexPathList.java:354)
01-15 17:23:25.789: E/AndroidRuntime(9586): 		at dalvik.system.DexPathList.<init>(DexPathList.java:164)
01-15 17:23:25.789: E/AndroidRuntime(9586): 		at dalvik.system.BaseDexClassLoader.<init>(BaseDexClassLoader.java:74)
01-15 17:23:25.789: E/AndroidRuntime(9586): 		at dalvik.system.BaseDexClassLoader.<init>(BaseDexClassLoader.java:65)
01-15 17:23:25.789: E/AndroidRuntime(9586): 		at dalvik.system.PathClassLoader.<init>(PathClassLoader.java:64)
01-15 17:23:25.789: E/AndroidRuntime(9586): 		at com.android.internal.os.ClassLoaderFactory.createClassLoader(ClassLoaderFactory.java:73)
01-15 17:23:25.789: E/AndroidRuntime(9586): 		at com.android.internal.os.ClassLoaderFactory.createClassLoader(ClassLoaderFactory.java:88)
01-15 17:23:25.789: E/AndroidRuntime(9586): 		at android.app.ApplicationLoaders.getClassLoader(ApplicationLoaders.java:74)
01-15 17:23:25.789: E/AndroidRuntime(9586): 		at android.app.ApplicationLoaders.getClassLoader(ApplicationLoaders.java:40)
01-15 17:23:25.789: E/AndroidRuntime(9586): 		at android.app.LoadedApk.createOrUpdateClassLoaderLocked(LoadedApk.java:727)
01-15 17:23:25.789: E/AndroidRuntime(9586): 		at android.app.LoadedApk.getClassLoader(LoadedApk.java:810)
01-15 17:23:25.789: E/AndroidRuntime(9586): 		at android.app.LoadedApk.getResources(LoadedApk.java:1032)
01-15 17:23:25.789: E/AndroidRuntime(9586): 		at android.app.ContextImpl.createAppContext(ContextImpl.java:2345)
01-15 17:23:25.789: E/AndroidRuntime(9586): 		at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5760)
01-15 17:23:25.789: E/AndroidRuntime(9586): 		at android.app.ActivityThread.access$1100(ActivityThread.java:200)
01-15 17:23:25.789: E/AndroidRuntime(9586): 		at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1651)
01-15 17:23:25.789: E/AndroidRuntime(9586): 		... 6 more
01-15 17:23:25.802: I/cr_LogcatExtraction(9586): Trying to extract logcat for minidump chromium-browser-minidump-12d839ee352042ba.dmp.
01-15 17:23:26.389: I/cr_LogcatExtraction(9586): Succeeded extracting logcat to chromium-browser-minidump-12d839ee352042ba.dmp.try0.

rMa is org.chromium.chrome.browser.init.ChromeBrowserInitializer. Rrb is org.chromium.chrome.browser.vr.VrFeedbackStatus and lives in the VR module. My suspicion is that R8 merged some VR code into base that is calling this class. Assigning to you, smaier@.
 
Chrome starts fine if the VR module is installed.
Cc: estevenson@chromium.org
This might(?) be related to multidex stuff, I think multidex was just turned on yesterday for bundles. I won't be able to look at this today (interview training), but I can pick it up tomorrow.
Deobfuscated stack:

01-15 17:23:25.789: E/AndroidRuntime(9586): FATAL EXCEPTION: main
01-15 17:23:25.789: E/AndroidRuntime(9586): Process: org.chromium.chrome, PID: 9586
01-15 17:23:25.789: E/AndroidRuntime(9586): java.lang.NoClassDefFoundError: Failed resolution of: Lorg/chromium/chrome/browser/vr/VrFeedbackStatus;
01-15 17:23:25.789: E/AndroidRuntime(9586): at org.chromium.content_public.browser.DeviceUtils.addDeviceSpecificUserAgentSwitch(DeviceUtils.java:19)
01-15 17:23:25.789: E/AndroidRuntime(9586): at org.chromium.chrome.browser.init.ChromeBrowserInitializer.preInflationStartup(ChromeBrowserInitializer.java:247)
01-15 17:23:25.789: E/AndroidRuntime(9586): at org.chromium.chrome.browser.init.ChromeBrowserInitializer.handlePreNativeStartup(ChromeBrowserInitializer.java:176)
01-15 17:23:25.789: E/AndroidRuntime(9586): at org.chromium.chrome.browser.init.AsyncInitializationActivity.onCreateInternal(AsyncInitializationActivity.java:325)
01-15 17:23:25.789: E/AndroidRuntime(9586): at org.chromium.chrome.browser.init.AsyncInitializationActivity.onCreate(AsyncInitializationActivity.java:258)
01-15 17:23:25.789: E/AndroidRuntime(9586): at android.app.Activity.performCreate(Activity.java:7144)
01-15 17:23:25.789: E/AndroidRuntime(9586): at android.app.Activity.performCreate(Activity.java:7135)
01-15 17:23:25.789: E/AndroidRuntime(9586): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
01-15 17:23:25.789: E/AndroidRuntime(9586): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2894)
01-15 17:23:25.789: E/AndroidRuntime(9586): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3049)
01-15 17:23:25.789: E/AndroidRuntime(9586): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
01-15 17:23:25.789: E/AndroidRuntime(9586): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
01-15 17:23:25.789: E/AndroidRuntime(9586): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
01-15 17:23:25.789: E/AndroidRuntime(9586): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1809)
01-15 17:23:25.789: E/AndroidRuntime(9586): at android.os.Handler.dispatchMessage(Handler.java:106)
01-15 17:23:25.789: E/AndroidRuntime(9586): at android.os.Looper.loop(Looper.java:193)
01-15 17:23:25.789: E/AndroidRuntime(9586): at android.app.ActivityThread.main(ActivityThread.java:6680)
01-15 17:23:25.789: E/AndroidRuntime(9586): at java.lang.reflect.Method.invoke(Method.java)
01-15 17:23:25.789: E/AndroidRuntime(9586): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
01-15 17:23:25.789: E/AndroidRuntime(9586): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
I think multidex was only turned on for the internal monochrome bundle. This is happening on a public chrome modern bundle.
FWIW, adding a 

-keep class org.chromium.chrome.browser.vr.VrFeedbackStatus

makes it work.
Filed an r8 bug for this: https://b.corp.google.com/issues/122902374

Possible that a valid work-around would be to do a -keep **.vr.** in order to prevent any merging from happening.

Sign in to add a comment