Droid-ify / client

F-Droid client with Material UI.
GNU General Public License v3.0
3.96k stars 83 forks source link

[Bug] Crashes at the bottom of a download page. #56

Closed ghost closed 2 years ago

ghost commented 2 years ago

Droid-ify version: v0.4.7 Android 7.1.1 Steps to reproduce:

  1. Open Droid-ify.
  2. Select an app you can download.
  3. Scroll down to the bottom on the download page.
  4. Enjoy the crashing.

Crash info:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.looker.droidify.debug, PID: 6472
    java.lang.NoClassDefFoundError: Failed resolution of: Ljava/time/Instant;
        at com.looker.droidify.ui.adapters.AppDetailAdapter.onBindViewHolder(AppDetailAdapter.kt:1348)
        at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:7337)
        at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:6194)
        at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6460)
        at androidx.recyclerview.widget.GapWorker.prefetchPositionWithDeadline(GapWorker.java:288)
        at androidx.recyclerview.widget.GapWorker.flushTaskWithDeadline(GapWorker.java:345)
        at androidx.recyclerview.widget.GapWorker.flushTasksWithDeadline(GapWorker.java:361)
        at androidx.recyclerview.widget.GapWorker.prefetch(GapWorker.java:368)
        at androidx.recyclerview.widget.GapWorker.run(GapWorker.java:399)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6119)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "java.time.Instant" on path: DexPathList[[zip file "/data/app/com.looker.droidify.debug-1/base.apk"],nativeLibraryDirectories=[/data/app/com.looker.droidify.debug-1/lib/x86, /system/lib, /vendor/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at com.looker.droidify.ui.adapters.AppDetailAdapter.onBindViewHolder(AppDetailAdapter.kt:1348) 
        at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:7337) 
        at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:6194) 
        at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6460) 
        at androidx.recyclerview.widget.GapWorker.prefetchPositionWithDeadline(GapWorker.java:288) 
        at androidx.recyclerview.widget.GapWorker.flushTaskWithDeadline(GapWorker.java:345) 
        at androidx.recyclerview.widget.GapWorker.flushTasksWithDeadline(GapWorker.java:361) 
        at androidx.recyclerview.widget.GapWorker.prefetch(GapWorker.java:368) 
        at androidx.recyclerview.widget.GapWorker.run(GapWorker.java:399) 
        at android.os.Handler.handleCallback(Handler.java:751) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:154) 
        at android.app.ActivityThread.main(ActivityThread.java:6119) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 

The bug seems to appear with commit 9da15a93c61dffb2d6a93d7c32ea7de8cb1aa465.

Iamlooker commented 2 years ago

It seems like u are using a debug build 😜, and this seems to be a case of corrupt dex

Re-compiling and re-installing the apk might fix this

ghost commented 2 years ago

I get the mentioned problem on Android 7 devices with an "official build" from F-Droid. I used self-compiled debug builds for git bisect in the hope it could help with fixing the bug.

Iamlooker commented 2 years ago

What is a git bisect?

ghost commented 2 years ago

Git tool for finding a commit that introduced the bug

Iamlooker commented 2 years ago

Ooh I didn't know that, I will see into this

Can you capture logs from the release build please?

ghost commented 2 years ago

Log when using the release build:

2022-07-23 21:06:46.538 3142-3142/? W/art: Unexpected CPU variant for X86 using defaults: x86
2022-07-23 21:06:46.574 3142-3142/com.looker.droidify W/System: ClassLoader referenced unknown path: /data/app/com.looker.droidify-1/lib/x86
2022-07-23 21:06:46.720 3142-3142/com.looker.droidify W/art: Before Android 4.1, method double java.util.concurrent.ThreadLocalRandom.internalNextDouble(double, double) would have incorrectly overridden the package-private method in java.util.Random
2022-07-23 21:06:46.721 3142-3142/com.looker.droidify W/art: Before Android 4.1, method int java.util.concurrent.ThreadLocalRandom.internalNextInt(int, int) would have incorrectly overridden the package-private method in java.util.Random
2022-07-23 21:06:46.721 3142-3142/com.looker.droidify W/art: Before Android 4.1, method long java.util.concurrent.ThreadLocalRandom.internalNextLong(long, long) would have incorrectly overridden the package-private method in java.util.Random
2022-07-23 21:06:46.772 3142-3142/com.looker.droidify W/JobInfo: Specified flex for 1 is +5m0s0ms. Clamped to +36m0s0ms
2022-07-23 21:06:46.870 3142-3142/com.looker.droidify I/ViewConfigCompat: Could not find method getScaledScrollFactor() on ViewConfiguration
2022-07-23 21:06:46.902 3142-3147/com.looker.droidify I/art: Do partial code cache collection, code=28KB, data=27KB
2022-07-23 21:06:46.903 3142-3147/com.looker.droidify I/art: After code cache collection, code=25KB, data=26KB
2022-07-23 21:06:46.903 3142-3147/com.looker.droidify I/art: Increasing code cache capacity to 128KB
2022-07-23 21:06:46.929 3142-3142/com.looker.droidify D/: HostConnection::get() New Host Connection established 0x9117b900, tid 3142
2022-07-23 21:06:46.971 3142-3178/com.looker.droidify D/: HostConnection::get() New Host Connection established 0x9117bcc0, tid 3178
2022-07-23 21:06:46.972 3142-3178/com.looker.droidify I/OpenGLRenderer: Initialized EGL, version 1.4
2022-07-23 21:06:46.972 3142-3178/com.looker.droidify D/OpenGLRenderer: Swap behavior 1
2022-07-23 21:06:46.972 3142-3178/com.looker.droidify W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
2022-07-23 21:06:46.972 3142-3178/com.looker.droidify D/OpenGLRenderer: Swap behavior 0
2022-07-23 21:06:46.973 3142-3178/com.looker.droidify D/EGL_emulation: eglCreateContext: 0xa3b05540: maj 3 min 1 rcv 4
2022-07-23 21:06:46.988 3142-3142/com.looker.droidify W/art: Before Android 4.1, method android.graphics.drawable.Drawable com.google.android.material.progressindicator.BaseProgressIndicator.getCurrentDrawable() would have incorrectly overridden the package-private method in android.widget.ProgressBar
2022-07-23 21:06:47.000 3142-3142/com.looker.droidify W/View: requestLayout() improperly called by androidx.appcompat.view.menu.ActionMenuItemView{413ba81 VFED..CL. ......ID 0,0-144,144 #7f0801dc app:id/toolbar_search} during layout: running second layout pass
2022-07-23 21:06:47.000 3142-3142/com.looker.droidify W/View: requestLayout() improperly called by androidx.appcompat.view.menu.ActionMenuItemView{fffe726 VFED..CL. ......ID 144,0-288,144 #0} during layout: running second layout pass
2022-07-23 21:06:47.000 3142-3142/com.looker.droidify W/View: requestLayout() improperly called by androidx.appcompat.widget.ActionMenuView{5c72f67 V.E...... ......ID 1788,24-2196,168} during layout: running second layout pass
2022-07-23 21:06:47.000 3142-3142/com.looker.droidify W/View: requestLayout() improperly called by android.widget.FrameLayout{6eac114 V.E...... ......ID 0,144-2196,144 #7f080180 app:id/section_layout} during layout: running second layout pass
2022-07-23 21:06:47.030 3142-3178/com.looker.droidify D/EGL_emulation: eglMakeCurrent: 0xa3b05540: ver 3 1 (tinfo 0xa3b03930)
2022-07-23 21:06:47.033 3142-3178/com.looker.droidify E/eglCodecCommon: glUtilsParamSize: unknow param 0x000082da
2022-07-23 21:06:47.033 3142-3178/com.looker.droidify E/eglCodecCommon: glUtilsParamSize: unknow param 0x000082da
2022-07-23 21:06:47.034 3142-3147/com.looker.droidify I/art: Do partial code cache collection, code=36KB, data=61KB
2022-07-23 21:06:47.038 3142-3147/com.looker.droidify I/art: After code cache collection, code=35KB, data=60KB
2022-07-23 21:06:47.038 3142-3147/com.looker.droidify I/art: Increasing code cache capacity to 256KB
2022-07-23 21:06:47.054 3142-3178/com.looker.droidify D/EGL_emulation: eglMakeCurrent: 0xa3b05540: ver 3 1 (tinfo 0xa3b03930)
2022-07-23 21:06:48.011 3142-3168/com.looker.droidify D/NetworkSecurityConfig: No Network Security Config specified, using platform default
2022-07-23 21:06:48.049 3142-3187/com.looker.droidify W/CursorWindow: Window is full: requested allocation 258 bytes, free space 3 bytes, window size 2097152 bytes
2022-07-23 21:06:48.049 3142-3147/com.looker.droidify I/art: Do full code cache collection, code=115KB, data=125KB
2022-07-23 21:06:48.049 3142-3147/com.looker.droidify I/art: Starting a blocking GC JitCodeCache
2022-07-23 21:06:48.049 3142-3147/com.looker.droidify I/art: After code cache collection, code=91KB, data=74KB
2022-07-23 21:06:48.315 3142-3147/com.looker.droidify I/art: Do partial code cache collection, code=124KB, data=112KB
2022-07-23 21:06:48.315 3142-3147/com.looker.droidify I/art: After code cache collection, code=124KB, data=112KB
2022-07-23 21:06:48.315 3142-3147/com.looker.droidify I/art: Increasing code cache capacity to 512KB
2022-07-23 21:07:15.014 3142-3142/com.looker.droidify W/PropertyValuesHolder: Method set() with type float not found on target class class androidx.coordinatorlayout.widget.CoordinatorLayout
2022-07-23 21:07:15.014 3142-3142/com.looker.droidify W/PropertyValuesHolder: Method get() with type null not found on target class class androidx.coordinatorlayout.widget.CoordinatorLayout
2022-07-23 21:07:15.016 3142-3142/com.looker.droidify W/PropertyValuesHolder: Method setPercentTranslationY() with type float not found on target class class androidx.coordinatorlayout.widget.CoordinatorLayout
2022-07-23 21:07:20.415 3142-3147/com.looker.droidify I/art: Do full code cache collection, code=251KB, data=244KB
2022-07-23 21:07:20.416 3142-3147/com.looker.droidify I/art: Starting a blocking GC JitCodeCache
2022-07-23 21:07:20.416 3142-3147/com.looker.droidify I/art: After code cache collection, code=217KB, data=169KB
2022-07-23 21:07:20.794 3142-3147/com.looker.droidify I/art: Do partial code cache collection, code=244KB, data=214KB
2022-07-23 21:07:20.794 3142-3147/com.looker.droidify I/art: After code cache collection, code=231KB, data=204KB
2022-07-23 21:07:20.794 3142-3147/com.looker.droidify I/art: Increasing code cache capacity to 1024KB
2022-07-23 21:07:24.319 3142-3142/com.looker.droidify I/MaterialCardView: Setting a custom background is not supported.
2022-07-23 21:07:24.320 3142-3142/com.looker.droidify D/AndroidRuntime: Shutting down VM

    --------- beginning of crash
2022-07-23 21:07:24.320 3142-3142/com.looker.droidify E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.looker.droidify, PID: 3142
    java.lang.NoClassDefFoundError: Failed resolution of: Ljava/time/Instant;
        at com.looker.droidify.ui.adapters.AppDetailAdapter.onBindViewHolder(AppDetailAdapter.kt:67)
        at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:178)
        at androidx.recyclerview.widget.GapWorker.prefetchPositionWithDeadline(GapWorker.java:7)
        at androidx.recyclerview.widget.GapWorker.prefetch(GapWorker.java:28)
        at androidx.recyclerview.widget.GapWorker.run(GapWorker.java:13)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6119)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "java.time.Instant" on path: DexPathList[[zip file "/data/app/com.looker.droidify-1/base.apk"],nativeLibraryDirectories=[/data/app/com.looker.droidify-1/lib/x86, /system/lib, /vendor/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at com.looker.droidify.ui.adapters.AppDetailAdapter.onBindViewHolder(AppDetailAdapter.kt:67) 
        at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:178) 
        at androidx.recyclerview.widget.GapWorker.prefetchPositionWithDeadline(GapWorker.java:7) 
        at androidx.recyclerview.widget.GapWorker.prefetch(GapWorker.java:28) 
        at androidx.recyclerview.widget.GapWorker.run(GapWorker.java:13) 
        at android.os.Handler.handleCallback(Handler.java:751) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:154) 
        at android.app.ActivityThread.main(ActivityThread.java:6119) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
Iamlooker commented 2 years ago

Hmm weird, I will reach back soon

Useless-Panda commented 2 years ago

it's also crashing on my android

Iamlooker commented 2 years ago

Btw was you were using github release or fdroid release?

ghost commented 2 years ago

Both official releases (F-Droid and the Github Release) crash on real devices. Bug Demonstration with Debug version (build using v0.4.7 release)

ghost commented 2 years ago

I forgot to say that I got the commit I mentioned previously just from testing with multiple debug builds (older ones worked, newer ones until the release didn't). I also can't really test your patch because builds from the master branch don't run (at least for me), but that's probably another issue.

Iamlooker commented 2 years ago

The patch is probably not merged in the main branch, if you want I can provide you a teat build in mail, I have been testing it since 3 days

chr56 commented 2 years ago

I have the same problems (only) on one of my old Android 7 device as well.

Android's java.time package was added to SDK in Android 8 if I remember correctly. This should be why we got a NoClassDefFoundError: Failed resolution of: Ljava/time/Instant; Besides, It seems that D8 could "desugar" java.time to old java.util.Date if I remember correctly.

Iamlooker commented 2 years ago

Ya that seems to be the issue.

Besides, It seems that D8 could "desugar" java.time to old java.util.Date if I remember correctly.

I honestly don't know what desugar I have seen it at many places but never used it. I would love to learn more about it, it would be very helpful if you can share an article or any resource related to it.

Besides, I am planning to use kotlinx.time so this shouldn't be an issue. But I will share a test build here by tomorrow.