Giter Club home page Giter Club logo

ryensx / mediabox Goto Github PK

View Code? Open in Web Editor NEW
945.0 15.0 47.0 16.71 MB

全能媒体容器,插件化网罗天下媒体,畅快浏览视频、漫画和任何你想要的媒体数据。A universal media container, aggregating media through plugins to browse videos, comics and any media data you want.

Home Page: https://ryensx.github.io/MediaBoxPluginRepository

License: GNU General Public License v3.0

Kotlin 100.00%
android kotlin anime video manga hacktoberfest jetpack plugin-system manga-reader

mediabox's Introduction

媒体盒子

GitHub release (latest by date) GitHub all downloads Android version GitHub license GitHub license

全能媒体容器,插件化网罗天下媒体,畅快学习软件开发。


概述

实现了类似微信小程序的框架,只需要简单实现插件API提供数据到容器即可快速成型,方便学习爬虫、APP开发等。

容器主要为插件提供以下服务:

  • 数据自动渲染到UI(视图组件)
  • 媒体收藏/历史记录
  • 周期性媒体数据检查服务(插件只需要实现媒体检查更新组件即可被主动检查更新)
  • 视频播放组件(播放器),支持手势控制/夜间模式/弹幕/倍速控制/多集聚合/横竖旋转适应等
  • 私有可视化KV存储(插件私有配置)
  • 个人数据/插件云端备份(WebDav,开发中)
  • ...

如实现一个看视频的APP、一个看漫画的APP,并且多个插件内容可聚合

截图

下载&使用

官网网站

支持开发

  • Star鼓励开发者

  • 👁️Watch关注开发进度

  • 📇Pull requests(请尽量贴合项目的源码和commit风格)

  • 💡加入群组讨论反馈

安全说明

请勿私自传播APK安装包,Github仓库为唯一长期仓库,请仅在Github仓库下载安装包,请勿下载来历不明的插件,谨防恶意代码!

免责声明

  1. 此软件只负责数据展示,本身不提供任何数据,和普通浏览器功能类似。
  2. 此软件显示的所有内容,其版权归原作者所有。
  3. 此软件仅可用作学习交流,未经授权,禁止用于其他用途,请在下载24小时内删除
  4. 因使用此软件产生的版权、安全、政策等问题,软件作者概不负责。

相关项目

构建相关

  • secret.gradle - 构建秘钥文件,请自行添加到项目跟目录
  • notice.iml - 使用协议等,请自行添加到res/raw

许可证

使用此软件代码需遵循以下许可证协议

GNU General Public License v3.0

mediabox's People

Contributors

adp-p-p avatar ryensx avatar skyd666 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mediabox's Issues

崩溃

CrashInfo:
java.lang.NullPointerException: mUrl must not be null
at com.su.mediabox.view.activity.y.onClick(:1)
at android.view.View.performClick(View.java:5655)
at android.view.View$PerformClick.run(View.java:22633)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:159)
at android.app.ActivityThread.main(ActivityThread.java:6378)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1099)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:886)

应用崩溃

Version:2.44(47)
Crash:java.lang.RuntimeException: Unable to start activity ComponentInfo{com.su.mediabox/com.su.mediabox.view.activity.MediaSearchActivity}: java.lang.RuntimeException: 获取当前插件信息错误!
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3308)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3457)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2044)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:224)
at android.app.ActivityThread.main(ActivityThread.java:7562)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
Caused by: java.lang.RuntimeException: 获取当前插件信息错误!
at com.su.mediabox.database.AppDatabaseKt.getAppDataBase(Unknown Source:25)
at com.su.mediabox.viewmodel.MediaSearchViewModel.(Unknown Source:29)
at java.lang.Class.newInstance(Native Method)
at androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(Unknown Source:2)
at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(Unknown Source:123)
at androidx.lifecycle.SavedStateViewModelFactory.create(Unknown Source:29)
at androidx.lifecycle.ViewModelProvider.get(Unknown Source:32)
at androidx.lifecycle.ViewModelProvider.get(Unknown Source:23)
at androidx.lifecycle.ViewModelLazy.getValue(Unknown Source:31)
at androidx.lifecycle.ViewModelLazy.getValue(Unknown Source:0)
at com.su.mediabox.view.activity.MediaSearchActivity.getViewModel(Unknown Source:2)
at com.su.mediabox.view.activity.MediaSearchActivity.onCreate(Unknown Source:202)
at android.app.Activity.performCreate(Activity.java:7893)
at android.app.Activity.performCreate(Activity.java:7880)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3283)
... 11 more

Phone:BOARD=sdm845
BOOTLOADER=unknown
BRAND=Xiaomi
CPU_ABI=arm64-v8a
CPU_ABI2=
DEVICE=dipper
DISPLAY=QKQ1.190828.002 test-keys
FINGERPRINT=Xiaomi/dipper/dipper:10/QKQ1.190828.002/V12.5.2.0.QEACNXM:user/release-keys
HARDWARE=qcom
HOST=c5-miui-ota-bd38.bj
ID=QKQ1.190828.002
IS_DEBUGGABLE=false
IS_EMULATOR=false
MANUFACTURER=Xiaomi
MODEL=MI 8
PERMISSIONS_REVIEW_REQUIRED=true
PRODUCT=dipper
RADIO=unknown
SERIAL=unknown
SUPPORTED_32_BIT_ABIS=[Ljava.lang.String;@ffca4c1
SUPPORTED_64_BIT_ABIS=[Ljava.lang.String;@70b2466
SUPPORTED_ABIS=[Ljava.lang.String;@1b9c3a7
TAGS=release-keys
TIME=1635404500000
TYPE=user
UNKNOWN=unknown
USER=builder

收藏排列有问题

SVID_20230102_215821_1.mp4

排列变成了第一格是空的,而不是最后的那个

媒体更新数据组件

  • 每次打开媒体记录页面触发检查
  • 检测到有更新则更新记录再生成一条更新记录(旧纪录->新纪录)
  • 移除收藏时移除所有相关更新记录
  • 每日定时检查更新并发送结果到通知栏(每个插件可独立开关)

关于音画不同步问题

出现在樱花动漫的两个插件中,播放半分钟左右后会出现画面暂停声音继续导致音画不同步问题,复现率很高,望开发者检查一下

crash log

Version:2.51(49)
Crash:android.database.CursorWindowAllocationException: Could not allocate CursorWindow '/data/user/0/com.su.mediabox/databases/media_plugin_data_com.su.sakuraanime2plugin#863237f24cbf4c99634babbc61d11b078f41d2.db' of size 2097152 due to error -24.
at android.database.CursorWindow.nativeCreate(Native Method)
at android.database.CursorWindow.(CursorWindow.java:139)
at android.database.CursorWindow.(CursorWindow.java:120)
at android.database.AbstractWindowedCursor.clearOrCreateWindow(AbstractWindowedCursor.java:202)
at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:147)
at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:140)
at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:232)
at android.database.AbstractCursor.moveToNext(AbstractCursor.java:281)
at androidx.room.InvalidationTracker$1.checkUpdatedTable(Unknown Source:20)
at androidx.room.InvalidationTracker$1.run(Unknown Source:96)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:929)

Phone:BOARD=BAH3-W59
BOOTLOADER=unknown
BRAND=HUAWEI
CPU_ABI=arm64-v8a
CPU_ABI2=
DEVICE=HWBAH3-H
DISPLAY=BAH3-W59 2.0.0.250(C636E1R1P1)
FINGERPRINT=HUAWEI/BAH3-W59NM/HWBAH3-H:10/HUAWEIBAH3-W59/102.0.0.250C636:user/release-keys
FINGERPRINTEX=HUAWEI/BAH3-W59NM/HWBAH3-H:10/HUAWEIBAH3-W59/102.0.0.250C636:user/release-keys
HARDWARE=kirin820
HOST=cn-central-hcd-2a-3f35cfb661656639379956-59448c8987-kchqr
HWFINGERPRINT=///BAH3-LGRP8-OVS 2.0.0.250/BAH3-W59-CUST 2.0.0.1(C636)/BAH3-W59-PRELOAD 2.0.0.1(C636R1)//
ID=HUAWEIBAH3-W59
IS_DEBUGGABLE=false
IS_EMULATOR=false
MANUFACTURER=HUAWEI
MODEL=BAH3-W59
PERMISSIONS_REVIEW_REQUIRED=true
PRODUCT=BAH3-W59NM
RADIO=unknown
SERIAL=unknown
SUPPORTED_32_BIT_ABIS=[Ljava.lang.String;@4b739cd
SUPPORTED_64_BIT_ABIS=[Ljava.lang.String;@72e4282
SUPPORTED_ABIS=[Ljava.lang.String;@9821d93
TAGS=release-keys
TIME=1656643489000
TYPE=user
UNKNOWN=unknown
USER=test

后台再切回来时调用glyma影视失败

Version:2.3(42)
Crash:java.lang.RuntimeException: Unable to start activity ComponentInfo{com.su.mediabox/com.su.mediabox.view.activity.MediaSearchActivity}: java.lang.RuntimeException: 获取当前插件信息错误!
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3782)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3949)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:106)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2327)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:210)
at android.os.Looper.loop(Looper.java:299)
at android.app.ActivityThread.main(ActivityThread.java:8301)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:577)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1073)
Caused by: java.lang.RuntimeException: 获取当前插件信息错误!
at com.su.mediabox.database.AppDatabaseKt.getAppDataBase(Unknown Source:25)
at com.su.mediabox.viewmodel.MediaSearchViewModel.(Unknown Source:29)
at java.lang.Class.newInstance(Native Method)
at androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(Unknown Source:2)
at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(Unknown Source:123)
at androidx.lifecycle.SavedStateViewModelFactory.create(Unknown Source:29)
at androidx.lifecycle.ViewModelProvider.get(Unknown Source:32)
at androidx.lifecycle.ViewModelProvider.get(Unknown Source:23)
at androidx.lifecycle.ViewModelLazy.getValue(Unknown Source:31)
at androidx.lifecycle.ViewModelLazy.getValue(Unknown Source:0)
at com.su.mediabox.view.activity.MediaSearchActivity.getViewModel(Unknown Source:2)
at com.su.mediabox.view.activity.MediaSearchActivity.onCreate(Unknown Source:194)
at android.app.Activity.performCreate(Activity.java:8181)
at android.app.Activity.performCreate(Activity.java:8147)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1329)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3755)
... 12 more

Phone:BOARD=matisse
BOOTLOADER=unknown
BRAND=Redmi
CPU_ABI=arm64-v8a
CPU_ABI2=
DEVICE=matisse
DISPLAY=SP1A.210812.016
FINGERPRINT=Redmi/matisse/matisse:12/SP1A.210812.016/V13.0.2.0.SLKCNXM:user/release-keys
HARDWARE=mt6983
HOST=m1-xm-ota-bd355.bj.idc.xiaomi.com
ID=SP1A.210812.016
IS_DEBUGGABLE=false
IS_EMULATOR=false
IS_MIUI=true
MANUFACTURER=Xiaomi
MODEL=22011211C
ODM_SKU=matisse
PERMISSIONS_REVIEW_REQUIRED=true
PRODUCT=matisse
RADIO=unknown
SERIAL=unknown
SKU=unknown
SOC_MANUFACTURER=Mediatek
SOC_MODEL=MT6983
SUPPORTED_32_BIT_ABIS=[Ljava.lang.String;@50a923f
SUPPORTED_64_BIT_ABIS=[Ljava.lang.String;@9c9a70c
SUPPORTED_ABIS=[Ljava.lang.String;@b09f855
TAGS=release-keys
TIME=1646404952000
TYPE=user
UNKNOWN=unknown
USER=builder

哦呼,樱花动漫崩溃了!快去Github 提Issue吧

CrashInfo:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.su.mediabox/com.su.mediabox.view.activity.MainActivity}: java.lang.RuntimeException: 插件信息读取错误
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3539)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3699)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2135)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:236)
at android.app.ActivityThread.main(ActivityThread.java:8056)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:656)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:967)
Caused by: java.lang.RuntimeException: 插件信息读取错误
at com.su.mediabox.PluginManager.getPluginInfo(Unknown Source:77)
at com.su.mediabox.view.activity.MainActivity.onCreate(Unknown Source:19)
at android.app.Activity.performCreate(Activity.java:8157)
at android.app.Activity.performCreate(Activity.java:8129)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1310)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3512)
... 11 more
java.lang.RuntimeException: 插件信息读取错误
at com.su.mediabox.PluginManager.getPluginInfo(Unknown Source:77)
at com.su.mediabox.view.activity.MainActivity.onCreate(Unknown Source:19)
at android.app.Activity.performCreate(Activity.java:8157)
at android.app.Activity.performCreate(Activity.java:8129)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1310)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3512)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3699)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2135)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:236)
at android.app.ActivityThread.main(ActivityThread.java:8056)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:656)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:967)

崩溃日志

Version:2.53(53)
Crash:java.lang.IllegalStateException: Cannot call this method while RecyclerView is computing a layout or scrolling androidx.recyclerview.widget.RecyclerView{81d5b8b VFED.V... ......ID 0,0-2322,656 #7f0a027a app:id/recycler_view}, adapter:androidx.preference.PreferenceGroupAdapter@d3d63bd, layout:androidx.recyclerview.widget.LinearLayoutManager@8b53db2, context:com.su.mediabox.view.activity.MainActivity@292848d
at androidx.recyclerview.widget.RecyclerView.assertNotInLayoutOrScroll(Unknown Source:20)
at androidx.recyclerview.widget.RecyclerView$RecyclerViewDataObserver.onItemRangeChanged(Unknown Source:3)
at androidx.recyclerview.widget.RecyclerView$AdapterDataObservable.notifyItemRangeChanged(Unknown Source:18)
at androidx.recyclerview.widget.RecyclerView$Adapter.notifyItemChanged(Unknown Source:3)
at androidx.preference.PreferenceGroupAdapter.onPreferenceChange(Unknown Source:9)
at androidx.preference.Preference.notifyChanged(Unknown Source:4)
at androidx.preference.Preference.setTitle(Unknown Source:10)
at com.su.mediabox.view.preference.PreferenceDslKt.titleRes(Unknown Source:23)
at com.su.mediabox.view.fragment.page.SettingsPageFragment$onCreatePreferences$1$5$1$2.invokeSuspend(Unknown Source:60)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(Unknown Source:11)
at kotlinx.coroutines.DispatchedTask.run(Unknown Source:88)
at kotlinx.coroutines.internal.LimitedDispatcher.run(Unknown Source:12)
at kotlinx.coroutines.scheduling.TaskImpl.run(Unknown Source:2)
at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(Unknown Source:0)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(Unknown Source:14)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(Unknown Source:28)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(Unknown Source:0)
Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@3fa79cc, Dispatchers.IO]

Phone:BOARD=rubens
BOOTLOADER=unknown
BRAND=Redmi
CPU_ABI=arm64-v8a
CPU_ABI2=
DEVICE=rubens
DISPLAY=SP1A.210812.016
FINGERPRINT=Redmi/rubens/rubens:12/SP1A.210812.016/V13.0.23.0.SLNCNXM:user/release-keys
HARDWARE=mt6895
HOST=m1-xm-ota-bd307.bj.idc.xiaomi.com
ID=SP1A.210812.016
IS_DEBUGGABLE=false
IS_EMULATOR=false
IS_MIUI=true
MANUFACTURER=Xiaomi
MODEL=22041211AC
ODM_SKU=rubens
PERMISSIONS_REVIEW_REQUIRED=true
PRODUCT=rubens
RADIO=unknown
SERIAL=unknown
SKU=unknown
SOC_MANUFACTURER=Mediatek
SOC_MODEL=MT6895Z/TCZA
SUPPORTED_32_BIT_ABIS=[Ljava.lang.String;@1496dfe
SUPPORTED_64_BIT_ABIS=[Ljava.lang.String;@c3b695f
SUPPORTED_ABIS=[Ljava.lang.String;@de0ffac
TAGS=release-keys
TIME=1662296110000
TYPE=user
UNKNOWN=unknown
USER=builder

T

Version:2.5(48)
Crash:android.view.WindowManager$InvalidDisplayException: Unable to add window android.view.OplusViewRootImplHooks$ColorW@e375efe -- the specified display can not be found
at android.view.ViewRootImpl.setView(ViewRootImpl.java:1379)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:405)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
at android.widget.ToastPresenter.addToastView(ToastPresenter.java:306)
at android.widget.ToastPresenter.show(ToastPresenter.java:231)
at android.widget.ToastPresenter.show(ToastPresenter.java:214)
at android.widget.Toast$TN.handleShow(Toast.java:702)
at android.widget.Toast$TN$1.handleMessage(Toast.java:634)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:240)
at android.os.Looper.loop(Looper.java:351)
at android.app.ActivityThread.main(ActivityThread.java:8355)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:584)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1013)

Phone:BOARD=kona
BOOTLOADER=unknown
BRAND=OnePlus
CPU_ABI=arm64-v8a
CPU_ABI2=
DEVICE=OnePlus8
DISPLAY=IN2010_11_F.10
FINGERPRINT=OnePlus/OnePlus8_CH/OnePlus8:13/RKQ1.211119.001/Q.202210030833:user/release-keys
HARDWARE=qcom
HOST=dg02-pool03-kvm236
ID=RKQ1.211119.001
IS_DEBUGGABLE=false
IS_EMULATOR=false
MANUFACTURER=OnePlus
MODEL=IN2010
ODM_SKU=unknown
PERMISSIONS_REVIEW_REQUIRED=true
PRODUCT=OnePlus8_CH
RADIO=unknown
SERIAL=unknown
SKU=unknown
SOC_MANUFACTURER=Qualcomm
SOC_MODEL=SM8250
SUPPORTED_32_BIT_ABIS=[Ljava.lang.String;@12c0759
SUPPORTED_64_BIT_ABIS=[Ljava.lang.String;@1d26f1e
SUPPORTED_ABIS=[Ljava.lang.String;@3a8a3ff
TAGS=release-keys
TIME=1665196989000
TYPE=user
UNKNOWN=unknown
USER=root

优化多类型RecycerView的实现

目前直接在Adapter::onBindViewHolder里根据VH类型判断逻辑使Adapter过于臃肿且可读性查
另外AnimeCoverBean等通过type生成不同View导致VH内逻辑也过于臃肿

适配外接键盘

适配外接键盘控制

  • space-暂停/播放
  • left-回退15s
  • right-快进15s
  • m-静音(mute)
  • s/shift+left-慢放
  • f/shift+right-快放

或可自定键位

换集导致进度条不正确bug反馈

bug描述:假设视频第一集看到片尾(我不想看片尾),直接切换第二集的时候,第二集进度条会定位到片尾,而不是片头。

环境是:Android 12
OPPO find x2pro

crash log

Version:2.51(49)
Crash:java.lang.IllegalStateException: Cannot call this method while RecyclerView is computing a layout or scrolling androidx.recyclerview.widget.RecyclerView{877433c VFED.V... ......ID 0,0-2000,904 #7f0a0277 app:id/recycler_view}, adapter:androidx.preference.PreferenceGroupAdapter@194cbbe, layout:androidx.recyclerview.widget.LinearLayoutManager@562d41f, context:com.su.mediabox.view.activity.MainActivity@cb32f68
at androidx.recyclerview.widget.RecyclerView.assertNotInLayoutOrScroll(Unknown Source:20)
at androidx.recyclerview.widget.RecyclerView$RecyclerViewDataObserver.onItemRangeChanged(Unknown Source:3)
at androidx.recyclerview.widget.RecyclerView$AdapterDataObservable.notifyItemRangeChanged(Unknown Source:18)
at androidx.recyclerview.widget.RecyclerView$Adapter.notifyItemChanged(Unknown Source:3)
at androidx.preference.PreferenceGroupAdapter.onPreferenceChange(Unknown Source:9)
at androidx.preference.Preference.notifyChanged(Unknown Source:4)
at androidx.preference.Preference.setTitle(Unknown Source:10)
at com.su.mediabox.util.PreferenceDslKt.titleRes(Unknown Source:23)
at com.su.mediabox.view.fragment.page.SettingsPageFragment$onCreatePreferences$1$5$1$2.invokeSuspend(Unknown Source:60)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(Unknown Source:11)
at kotlinx.coroutines.DispatchedTask.run(Unknown Source:88)
at kotlinx.coroutines.internal.LimitedDispatcher.run(Unknown Source:12)
at kotlinx.coroutines.scheduling.TaskImpl.run(Unknown Source:2)
at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(Unknown Source:0)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(Unknown Source:14)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(Unknown Source:28)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(Unknown Source:0)
Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@dffbde, Dispatchers.IO]

Phone:BOARD=BAH3-W59
BOOTLOADER=unknown
BRAND=HUAWEI
CPU_ABI=arm64-v8a
CPU_ABI2=
DEVICE=HWBAH3-H
DISPLAY=BAH3-W59 2.0.0.250(C636E1R1P1)
FINGERPRINT=HUAWEI/BAH3-W59NM/HWBAH3-H:10/HUAWEIBAH3-W59/102.0.0.250C636:user/release-keys
FINGERPRINTEX=HUAWEI/BAH3-W59NM/HWBAH3-H:10/HUAWEIBAH3-W59/102.0.0.250C636:user/release-keys
HARDWARE=kirin820
HOST=cn-central-hcd-2a-3f35cfb661656639379956-59448c8987-kchqr
HWFINGERPRINT=///BAH3-LGRP8-OVS 2.0.0.250/BAH3-W59-CUST 2.0.0.1(C636)/BAH3-W59-PRELOAD 2.0.0.1(C636R1)//
ID=HUAWEIBAH3-W59
IS_DEBUGGABLE=false
IS_EMULATOR=false
MANUFACTURER=HUAWEI
MODEL=BAH3-W59
PERMISSIONS_REVIEW_REQUIRED=true
PRODUCT=BAH3-W59NM
RADIO=unknown
SERIAL=unknown
SUPPORTED_32_BIT_ABIS=[Ljava.lang.String;@d175d7c
SUPPORTED_64_BIT_ABIS=[Ljava.lang.String;@b56c605
SUPPORTED_ABIS=[Ljava.lang.String;@126065a
TAGS=release-keys
TIME=1656643489000
TYPE=user
UNKNOWN=unknown
USER=test

切换后台后报错

Version:2.51(49)
Crash:java.lang.RuntimeException: Unable to start activity ComponentInfo{com.su.mediabox/com.su.mediabox.view.activity.MediaSearchActivity}: java.lang.RuntimeException: 获取当前插件信息错误!
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4111)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4277)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2443)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8751)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
Caused by: java.lang.RuntimeException: 获取当前插件信息错误!
at com.su.mediabox.database.AppDatabaseKt.getAppDataBase(Unknown Source:25)
at com.su.mediabox.viewmodel.MediaSearchViewModel.(Unknown Source:29)
at java.lang.Class.newInstance(Native Method)
at androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(Unknown Source:2)
at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(Unknown Source:123)
at androidx.lifecycle.SavedStateViewModelFactory.create(Unknown Source:29)
at androidx.lifecycle.ViewModelProvider.get(Unknown Source:32)
at androidx.lifecycle.ViewModelProvider.get(Unknown Source:23)
at androidx.lifecycle.ViewModelLazy.getValue(Unknown Source:31)
at androidx.lifecycle.ViewModelLazy.getValue(Unknown Source:0)
at com.su.mediabox.view.activity.MediaSearchActivity.getViewModel(Unknown Source:2)
at com.su.mediabox.view.activity.MediaSearchActivity.onCreate(Unknown Source:202)
at android.app.Activity.performCreate(Activity.java:8290)
at android.app.Activity.performCreate(Activity.java:8270)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1329)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4085)
... 12 more

Phone:BOARD=lahaina
BOOTLOADER=G9980ZCS2CVI4
BRAND=samsung
CPU_ABI=arm64-v8a
CPU_ABI2=
DEVICE=p3q
DISPLAY=SP1A.210812.016.G9980ZCS2CVI4
FINGERPRINT=samsung/p3qzcx/p3q:12/SP1A.210812.016/G9980ZCS2CVI4:user/release-keys
HARDWARE=qcom
HOST=21DJ6B20
ID=SP1A.210812.016
IS_DEBUGGABLE=false
IS_EMULATOR=false
MANUFACTURER=samsung
MODEL=SM-G9980
ODM_SKU=unknown
PERMISSIONS_REVIEW_REQUIRED=true
PRODUCT=p3qzcx
RADIO=unknown
SERIAL=unknown
SKU=unknown
SOC_MANUFACTURER=QTI
SOC_MODEL=SM8350
SUPPORTED_32_BIT_ABIS=[Ljava.lang.String;@7087eed
SUPPORTED_64_BIT_ABIS=[Ljava.lang.String;@d987122
SUPPORTED_ABIS=[Ljava.lang.String;@eacb7b3
TAGS=release-keys
TIME=1664158973000
TYPE=user
UNKNOWN=unknown
USER=dpi

下载功能

将影片缓存,供没网或移动网络是使用。

應用奔潰

Version:2.3(42)
Crash:java.lang.RuntimeException: Unable to start activity ComponentInfo{com.su.mediabox/com.su.mediabox.view.activity.MediaSearchActivity}: java.lang.RuntimeException: 获取当前插件信息错误!
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3767)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3934)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2314)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:210)
at android.os.Looper.loop(Looper.java:299)
at android.app.ActivityThread.main(ActivityThread.java:8256)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:576)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1073)
Caused by: java.lang.RuntimeException: 获取当前插件信息错误!
at com.su.mediabox.database.AppDatabaseKt.getAppDataBase(Unknown Source:25)
at com.su.mediabox.viewmodel.MediaSearchViewModel.(Unknown Source:29)
at java.lang.Class.newInstance(Native Method)
at androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(Unknown Source:2)
at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(Unknown Source:123)
at androidx.lifecycle.SavedStateViewModelFactory.create(Unknown Source:29)
at androidx.lifecycle.ViewModelProvider.get(Unknown Source:32)
at androidx.lifecycle.ViewModelProvider.get(Unknown Source:23)
at androidx.lifecycle.ViewModelLazy.getValue(Unknown Source:31)
at androidx.lifecycle.ViewModelLazy.getValue(Unknown Source:0)
at com.su.mediabox.view.activity.MediaSearchActivity.getViewModel(Unknown Source:2)
at com.su.mediabox.view.activity.MediaSearchActivity.onCreate(Unknown Source:194)
at android.app.Activity.performCreate(Activity.java:8178)
at android.app.Activity.performCreate(Activity.java:8146)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1329)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3740)
... 12 more

Phone:BOARD=chopin
BOOTLOADER=unknown
BRAND=Redmi
CPU_ABI=arm64-v8a
CPU_ABI2=
DEVICE=chopin
DISPLAY=SP1A.210812.016
FINGERPRINT=Redmi/chopin/chopin:12/SP1A.210812.016/V13.0.4.0.SKPCNXM:user/release-keys
HARDWARE=mt6893
HOST=c5-xm-ota-bd018.bj
ID=SP1A.210812.016
IS_DEBUGGABLE=false
IS_EMULATOR=false
IS_MIUI=true
MANUFACTURER=Xiaomi
MODEL=M2104K10AC
ODM_SKU=chopin
PERMISSIONS_REVIEW_REQUIRED=true
PRODUCT=chopin
RADIO=unknown
SERIAL=unknown
SKU=unknown
SOC_MANUFACTURER=Mediatek
SOC_MODEL=MT6891
SUPPORTED_32_BIT_ABIS=[Ljava.lang.String;@94e81ac
SUPPORTED_64_BIT_ABIS=[Ljava.lang.String;@8f7ce75
SUPPORTED_ABIS=[Ljava.lang.String;@5e8be0a
TAGS=release-keys
TIME=1647753533000
TYPE=user
UNKNOWN=unknown
USER=builder

点击樱花进入后

CrashInfo:
java.lang.NoSuchMethodError: No direct method (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;Lcom/su/mediabox/pluginapi/been/AnimeEpisodeDataBean;Lcom/su/mediabox/pluginapi/been/AnimeAreaBean;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/util/List;Ljava/util/List;Lcom/su/mediabox/pluginapi/been/AnimeInfoBean;ILkotlin/jvm/internal/DefaultConstructorMarker;)V in class Lcom/su/mediabox/pluginapi/been/AnimeCoverBean; or its super classes (declaration of 'com.su.mediabox.pluginapi.been.AnimeCoverBean' appears in base.apk)
at com.su.mediabox.plugin.ParseHtmlUtil.parseHeroWrap(ParseHtmlUtil.kt:44)
at com.su.mediabox.plugin.ParseHtmlUtil.parseHeroWrap$default(ParseHtmlUtil.kt:17)
at com.su.mediabox.plugin.CustomAnimeShowModel.getAnimeShowData(CustomAnimeShowModel.kt:31)
at com.su.mediabox.viewmodel.AnimeShowViewModel$getAnimeShowData$1.invokeSusp

插件独立记录数据

目前不同插件还是使用同一个数据库,这会导致切换插件时已有记录无效(不包括播放视频进度)
因此将根据插件的packageName+签名信息独立记录数据

崩溃

CrashInfo:
java.lang.ClassCastException: com.su.mediabox.bean.MediaSearchHistory cannot be cast to com.su.mediabox.bean.DefaultEmpty
at com.su.mediabox.view.viewcomponents.inner.DefaultEmptyViewHolder.onBind(Unknown Source:0)
at com.su.mediabox.view.adapter.type.TypeViewHolder.onBind(Unknown Source:5)
at com.su.mediabox.view.adapter.type.TypeAdapter.k(:1)
at androidx.recyclerview.widget.RecyclerView$r.k(:64)
at androidx.recyclerview.widget.RecyclerView$r.e(:1)
at androidx.recyclerview.widget.LinearLayoutManager$c.c(:2)
at androidx.recyclerview.widget.GridLayoutManager.v1(Unknown Source:94)
at androidx.recyclerview.widget.LinearLayoutManager.g1(:2)
at androidx.recyclerview.widget.LinearLayoutManager.y0(:17)
at androidx.recyclerview.widget.GridLayoutManager.y0(:7)
at androidx.recyclerview.widget.RecyclerView.s(:2)
at androidx.recyclerview.widget.RecyclerView.q(:7)
at androidx.recyclerview.widget.RecyclerView.onLayout(:2)
at android.view.View.layout(View.java:23727)
at android.view.ViewGroup.layout(ViewGroup.java:6522)
at com.scwang.smart.refresh.layout.SmartRefreshLayout.onLayout(:4)
at android.view.View.layout(View.java:23727)
at android.view.ViewGroup.layout(ViewGroup.java:6522)
at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1103)
at android.view.View.layout(View.java:23727)
at android.view.ViewGroup.layout(ViewGroup.java:6522)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
at android.view.View.layout(View.java:23727)
at android.view.ViewGroup.layout(ViewGroup.java:6522)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
at android.view.View.layout(View.java:23727)
at android.view.ViewGroup.layout(ViewGroup.java:6522)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
at android.view.View.layout(View.java:23727)
at android.view.ViewGroup.layout(ViewGroup.java:6522)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
at android.view.View.layout(View.java:23727)
at android.view.ViewGroup.layout(ViewGroup.java:6522)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
at com.android.internal.policy.DecorView.onLayout(DecorView.java:866)
at android.view.View.layout(View.java:23727)
at android.view.ViewGroup.layout(ViewGroup.java:6522)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:4045)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3464)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2381)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:9359)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1152)
at android.view.Choreographer.doCallbacks(Choreographer.java:918)
at android.view.Choreographer.doFrame(Choreographer.java:833)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1137)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:210)
at android.os.Looper.loop(Looper.java:299)
at android.app.ActivityThread.main(ActivityThread.java:8307)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:577)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1073)

更易用的临时倍速

允许用户预设一个倍速,在观看过程中长按画面以临时启用,避免现有交互对画面的遮挡

出bug

Version:2.5(48)
Crash:java.lang.IllegalStateException: Cannot call this method while RecyclerView is computing a layout or scrolling androidx.recyclerview.widget.RecyclerView{ef84ff2 VFED.V... ......ID 0,0-1440,2516 #7f0a0275 app:id/recycler_view}, adapter:androidx.preference.PreferenceGroupAdapter@4aac86b, layout:androidx.recyclerview.widget.LinearLayoutManager@38a1fc8, context:com.su.mediabox.view.activity.MainActivity@57796ff
at androidx.recyclerview.widget.RecyclerView.assertNotInLayoutOrScroll(Unknown Source:20)
at androidx.recyclerview.widget.RecyclerView$RecyclerViewDataObserver.onItemRangeChanged(Unknown Source:3)
at androidx.recyclerview.widget.RecyclerView$AdapterDataObservable.notifyItemRangeChanged(Unknown Source:18)
at androidx.recyclerview.widget.RecyclerView$Adapter.notifyItemChanged(Unknown Source:3)
at androidx.preference.PreferenceGroupAdapter.onPreferenceChange(Unknown Source:9)
at androidx.preference.Preference.notifyChanged(Unknown Source:4)
at androidx.preference.Preference.setTitle(Unknown Source:10)
at com.su.mediabox.util.PreferenceDslKt.titleRes(Unknown Source:23)
at com.su.mediabox.view.fragment.page.SettingsPageFragment$onCreatePreferences$1$5$1$2.invokeSuspend(Unknown Source:60)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(Unknown Source:11)
at kotlinx.coroutines.DispatchedTask.run(Unknown Source:88)
at kotlinx.coroutines.internal.LimitedDispatcher.run(Unknown Source:12)
at kotlinx.coroutines.scheduling.TaskImpl.run(Unknown Source:2)
at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(Unknown Source:0)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(Unknown Source:14)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(Unknown Source:28)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(Unknown Source:0)
Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@f49215b, Dispatchers.IO]

Phone:BOARD=kona
BOOTLOADER=unknown
BRAND=OPPO
CPU_ABI=arm64-v8a
CPU_ABI2=
DEVICE=OP4A7A
DISPLAY=PDEM30_11_F.21
FINGERPRINT=OPPO/PDEM30/OP4A7A:12/RKQ1.211103.002/Q.202208101905:user/release-keys
HARDWARE=qcom
HOST=dg02-pool03-kvm282
ID=RKQ1.211103.002
IS_DEBUGGABLE=false
IS_EMULATOR=false
MANUFACTURER=OPPO
MODEL=PDEM30
ODM_SKU=unknown
PERMISSIONS_REVIEW_REQUIRED=true
PRODUCT=PDEM30
RADIO=unknown
SERIAL=unknown
SKU=unknown
SOC_MANUFACTURER=Qualcomm
SOC_MODEL=SM8250
SUPPORTED_32_BIT_ABIS=[Ljava.lang.String;@14dac05
SUPPORTED_64_BIT_ABIS=[Ljava.lang.String;@959f45a
SUPPORTED_ABIS=[Ljava.lang.String;@b5ca68b
TAGS=release-keys
TIME=1659690498000
TYPE=user
UNKNOWN=unknown
USER=root

需求和碰到的问题

终端设备:MUI13
版本: 2.42 debug

  1. 黑色主题(夜间模式)
  2. 拖动进度条的时候左下角的播放暂停键会闪烁1秒。
  3. 在播放视频的时候切换到后台 再次进入退出到详情页,正常来说应该保留活动。(系统没有杀后台)

应用崩溃

Version:2.5(48)
Crash:java.lang.IllegalStateException: Cannot call this method while RecyclerView is computing a layout or scrolling androidx.recyclerview.widget.RecyclerView{b60f4f8 VFED.V... ......ID 0,0-1080,1949 #7f0a0275 app:id/recycler_view}, adapter:androidx.preference.PreferenceGroupAdapter@65693d3, layout:androidx.recyclerview.widget.LinearLayoutManager@c196b10, context:com.su.mediabox.view.activity.MainActivity@c0aca4e
at androidx.recyclerview.widget.RecyclerView.assertNotInLayoutOrScroll(Unknown Source:20)
at androidx.recyclerview.widget.RecyclerView$RecyclerViewDataObserver.onItemRangeChanged(Unknown Source:3)
at androidx.recyclerview.widget.RecyclerView$AdapterDataObservable.notifyItemRangeChanged(Unknown Source:18)
at androidx.recyclerview.widget.RecyclerView$Adapter.notifyItemChanged(Unknown Source:3)
at androidx.preference.PreferenceGroupAdapter.onPreferenceChange(Unknown Source:9)
at androidx.preference.Preference.notifyChanged(Unknown Source:4)
at androidx.preference.Preference.setTitle(Unknown Source:10)
at com.su.mediabox.util.PreferenceDslKt.titleRes(Unknown Source:23)
at com.su.mediabox.view.fragment.page.SettingsPageFragment$onCreatePreferences$1$5$1$2.invokeSuspend(Unknown Source:60)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(Unknown Source:11)
at kotlinx.coroutines.DispatchedTask.run(Unknown Source:88)
at kotlinx.coroutines.internal.LimitedDispatcher.run(Unknown Source:12)
at kotlinx.coroutines.scheduling.TaskImpl.run(Unknown Source:2)
at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(Unknown Source:0)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(Unknown Source:14)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(Unknown Source:28)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(Unknown Source:0)
Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@30cde83, Dispatchers.IO]

Phone:BOARD=kona
BOOTLOADER=unknown
BRAND=OnePlus
CPU_ABI=arm64-v8a
CPU_ABI2=
DEVICE=OnePlus9R
DISPLAY=LE2100_11_F.07
FINGERPRINT=OnePlus/OnePlus9R_CH/OnePlus9R:13/TP1A.220905.001/R.a2f826-2+1:user/release-keys
HARDWARE=qcom
HOST=dg02-pool03-kvm15
ID=TP1A.220905.001
IS_DEBUGGABLE=false
IS_EMULATOR=false
MANUFACTURER=OnePlus
MODEL=LE2100
ODM_SKU=unknown
PERMISSIONS_REVIEW_REQUIRED=true
PRODUCT=OnePlus9R_CH
RADIO=unknown
SERIAL=unknown
SKU=unknown
SOC_MANUFACTURER=Qualcomm
SOC_MODEL=SM8250
SUPPORTED_32_BIT_ABIS=[Ljava.lang.String;@95524d9
SUPPORTED_64_BIT_ABIS=[Ljava.lang.String;@350fe9e
SUPPORTED_ABIS=[Ljava.lang.String;@344bd7f
TAGS=release-keys
TIME=1663070451000
TYPE=user
UNKNOWN=unknown
USER=root

F-Droid

请问是否可以在 F-Droid 发布应用?

退出投屏经常跳这个,樱花动漫

Version:2.3(42)
Crash:java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionDlnaViewHolder{3ca6ee7 position=1 id=-1, oldPos=0, pLpos:0 scrap [attachedScrap] tmpDetached no parent} androidx.recyclerview.widget.RecyclerView{e22b9ec VFED..... ......I. 0,113-1080,221 #7f0a028c app:id/rv_dlna_activity_device}, adapter:com.su.mediabox.view.adapter.type.TypeAdapter@1f741b5, layout:androidx.recyclerview.widget.LinearLayoutManager@34a504a, context:com.su.mediabox.view.activity.DlnaActivity@c033207
at androidx.recyclerview.widget.RecyclerView$Recycler.validateViewHolderForOffsetPosition(Unknown Source:110)
at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(Unknown Source:49)
at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(Unknown Source:5)
at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(Unknown Source:1)
at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(Unknown Source:11)
at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(Unknown Source:0)
at androidx.recyclerview.widget.LinearLayoutManager.fill(Unknown Source:38)
at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(Unknown Source:356)
at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep1(Unknown Source:196)
at androidx.recyclerview.widget.RecyclerView.onMeasure(Unknown Source:55)
at android.view.View.measure(View.java:26390)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7095)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
at android.view.View.measure(View.java:26390)
at androidx.core.widget.NestedScrollView.measureChildWithMargins(Unknown Source:38)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at androidx.core.widget.NestedScrollView.onMeasure(Unknown Source:0)
at android.view.View.measure(View.java:26390)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:735)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:481)
at android.view.View.measure(View.java:26390)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7095)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at androidx.appcompat.widget.ContentFrameLayout.onMeasure(Unknown Source:154)
at android.view.View.measure(View.java:26390)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7095)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
at android.view.View.measure(View.java:26390)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7095)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.view.View.measure(View.java:26390)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7095)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
at android.view.View.measure(View.java:26390)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7095)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at com.android.internal.policy.DecorView.onMeasure(DecorView.java:830)
at android.view.View.measure(View.java:26390)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:3952)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:2652)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2950)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2369)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:9345)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1121)
at android.view.Choreographer.doCallbacks(Choreographer.java:918)
at android.view.Choreographer.doFrame(Choreographer.java:832)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1106)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:210)
at android.os.Looper.loop(Looper.java:299)
at android.app.ActivityThread.main(ActivityThread.java:8256)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:576)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1073)

Phone:BOARD=chopin
BOOTLOADER=unknown
BRAND=Redmi
CPU_ABI=arm64-v8a
CPU_ABI2=
DEVICE=chopin
DISPLAY=SP1A.210812.016
FINGERPRINT=Redmi/chopin/chopin:12/SP1A.210812.016/V13.0.7.0.SKPCNXM:user/release-keys
HARDWARE=mt6893
HOST=c5-xm-ota-bd017.bj
ID=SP1A.210812.016
IS_DEBUGGABLE=false
IS_EMULATOR=false
IS_MIUI=true
MANUFACTURER=Xiaomi
MODEL=M2104K10AC
ODM_SKU=chopin
PERMISSIONS_REVIEW_REQUIRED=true
PRODUCT=chopin
RADIO=unknown
SERIAL=unknown
SKU=unknown
SOC_MANUFACTURER=Mediatek
SOC_MODEL=MT6891
SUPPORTED_32_BIT_ABIS=[Ljava.lang.String;@b73096b
SUPPORTED_64_BIT_ABIS=[Ljava.lang.String;@9bccc8
SUPPORTED_ABIS=[Ljava.lang.String;@56b5161
TAGS=release-keys
TIME=1652184101000
TYPE=user
UNKNOWN=unknown
USER=builder

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.