Young-Lord / hideRecent

[Xposed] Hide app from Recent task list
https://github.com/Xposed-Modules-Repo/moe.lyniko.hiderecent
MIT License
4 stars 1 forks source link

Crash on Android 14, HyperOS, Xiaomi 14 #5

Closed sgpublic closed 4 months ago

sgpublic commented 4 months ago

Android 14(HyperOS 1.0.26.0/小米14),LSPosed 1.9.2,第一次启动正常,授予读取应用列表权限后第二次启动崩溃。

日志是 clone 下来关掉混淆打的,类型和 message 和原本的一样,所以应该跟混淆无关。

11:29:48.144 AndroidRuntime                  E  FATAL EXCEPTION: main
                                                Process: moe.lyniko.hiderecent, PID: 11342
                                                android.os.BadParcelableException: Failure retrieving array; only received 390 of 526
                                                    at android.content.pm.BaseParceledListSlice.<init>(BaseParceledListSlice.java:104)
                                                    at android.content.pm.ParceledListSlice.<init>(ParceledListSlice.java:42)
                                                    at android.content.pm.ParceledListSlice.<init>(Unknown Source:0)
                                                    at android.content.pm.ParceledListSlice$1.createFromParcel(ParceledListSlice.java:80)
                                                    at android.content.pm.ParceledListSlice$1.createFromParcel(ParceledListSlice.java:78)
                                                    at android.os.Parcel.readTypedObject(Parcel.java:4025)
                                                    at android.content.pm.IPackageManager$Stub$Proxy.getInstalledPackages(IPackageManager.java:5070)
                                                    at android.app.ApplicationPackageManager.getInstalledPackagesAsUser(ApplicationPackageManager.java:1226)
                                                    at android.app.ApplicationPackageManager.getInstalledPackages(ApplicationPackageManager.java:1210)
                                                    at android.app.ApplicationPackageManager.getInstalledPackages(ApplicationPackageManager.java:1204)
                                                    at moe.lyniko.hiderecent.utils.AppUtils$appForSingleUser$2.invoke(AppUtils.kt:44)
                                                    at moe.lyniko.hiderecent.utils.AppUtils$appForSingleUser$2.invoke(AppUtils.kt:43)
                                                    at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
                                                    at moe.lyniko.hiderecent.utils.AppUtils.getAppForSingleUser(AppUtils.kt:43)
                                                    at moe.lyniko.hiderecent.utils.AppUtils.access$getAppForSingleUser(AppUtils.kt:15)
                                                    at moe.lyniko.hiderecent.utils.AppUtils$allApps$2.invoke(AppUtils.kt:40)
                                                    at moe.lyniko.hiderecent.utils.AppUtils$allApps$2.invoke(AppUtils.kt:33)
                                                    at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
                                                    at moe.lyniko.hiderecent.utils.AppUtils.getAllApps(AppUtils.kt:33)
                                                    at moe.lyniko.hiderecent.utils.AppUtils.access$getAllApps(AppUtils.kt:15)
                                                    at moe.lyniko.hiderecent.utils.AppUtils$appsFiltered$2.invoke(AppUtils.kt:107)
                                                    at moe.lyniko.hiderecent.utils.AppUtils$appsFiltered$2.invoke(AppUtils.kt:104)
                                                    at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
                                                    at moe.lyniko.hiderecent.utils.AppUtils.getAppsFiltered(AppUtils.kt:104)
                                                    at moe.lyniko.hiderecent.utils.AppUtils.access$getAppsFiltered(AppUtils.kt:15)
                                                    at moe.lyniko.hiderecent.utils.AppUtils$parsedApps$2.invoke(AppUtils.kt:117)
                                                    at moe.lyniko.hiderecent.utils.AppUtils$parsedApps$2.invoke(AppUtils.kt:116)
                                                    at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
                                                    at moe.lyniko.hiderecent.utils.AppUtils.getParsedApps(AppUtils.kt:116)
                                                    at moe.lyniko.hiderecent.ui.HomeViewKt.getDisplayApps(HomeView.kt:173)
                                                    at moe.lyniko.hiderecent.ui.HomeViewKt.access$getDisplayApps(HomeView.kt:1)
                                                    at moe.lyniko.hiderecent.ui.ComposableSingletons$HomeViewKt$lambda-1$1.invoke(HomeView.kt:142)
                                                    at moe.lyniko.hiderecent.ui.ComposableSingletons$HomeViewKt$lambda-1$1.invoke(HomeView.kt:141)
                                                    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:117)
                                                    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35)
                                                    at androidx.compose.material3.ScaffoldKt$ScaffoldLayout$1$1$1$bodyContentPlaceables$1.invoke(Scaffold.kt:239)
                                                    at androidx.compose.material3.ScaffoldKt$ScaffoldLayout$1$1$1$bodyContentPlaceables$1.invoke(Scaffold.kt:221)
                                                    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:108)
                                                    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35)
                                                    at androidx.compose.ui.layout.LayoutNodeSubcompositionsState$subcompose$3$1$1.invoke(SubcomposeLayout.kt:1067)
                                                    at androidx.compose.ui.layout.LayoutNodeSubcompositionsState$subcompose$3$1$1.invoke(SubcomposeLayout.kt:701)
                                                    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:108)
                                                    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35)
                                                    at androidx.compose.runtime.ActualJvm_jvmKt.invokeComposable(ActualJvm.jvm.kt:78)
                                                    at androidx.compose.runtime.ComposerImpl.doCompose(Composer.kt:3340)
                                                    at androidx.compose.runtime.ComposerImpl.composeContent$runtime_release(Composer.kt:3273)
Young-Lord commented 4 months ago

啊? 无法理解为什么会有这种问题,感觉可能是 MIUI / HyperOS 的锅,暂时修不了 两个可能的 workaround,可能可以临时缓解一下:

  1. 在设置里开启“用 Shizuku 获取应用列表”
  2. 完全不授予“读取应用列表”权限,进入后直接按如下格式导入设置:
# version=1
+com.example.package
+com.example.package2
sgpublic commented 4 months ago

1.1.0 是没问题的,可能从这方面找找线索?

sgpublic commented 4 months ago
  1. 在设置里开启“用 Shizuku 获取应用列表”

使用 Shizuku 也是同样原因崩溃,日志如下:

13:28:29.370 LSPosed-Bridge                  I  Crash unexpectedly: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
                                                    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1013)
                                                Caused by: java.lang.reflect.InvocationTargetException
                                                    at java.lang.reflect.Method.invoke(Native Method)
                                                    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:561)
                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1013) 
                                                Caused by: java.lang.reflect.InvocationTargetException
                                                    at java.lang.reflect.Method.invoke(Native Method)
                                                    at org.lsposed.hiddenapibypass.HiddenApiBypass.invoke(Unknown Source:102)
                                                    at moe.lyniko.hiderecent.utils.AppUtils.getInstalledPackagesAsUser(AppUtils.kt:80)
                                                    at moe.lyniko.hiderecent.utils.AppUtils.access$getInstalledPackagesAsUser(AppUtils.kt:15)
                                                    at moe.lyniko.hiderecent.utils.AppUtils$appForAllUser$2.invoke(AppUtils.kt:52)
                                                    at moe.lyniko.hiderecent.utils.AppUtils$appForAllUser$2.invoke(AppUtils.kt:47)
                                                    at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
                                                    at moe.lyniko.hiderecent.utils.AppUtils.getAppForAllUser(AppUtils.kt:47)
                                                    at moe.lyniko.hiderecent.utils.AppUtils.access$getAppForAllUser(AppUtils.kt:15)
                                                    at moe.lyniko.hiderecent.utils.AppUtils$allApps$2.invoke(AppUtils.kt:40)
                                                    at moe.lyniko.hiderecent.utils.AppUtils$allApps$2.invoke(AppUtils.kt:33)
                                                    at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
                                                    at moe.lyniko.hiderecent.utils.AppUtils.getAllApps(AppUtils.kt:33)
                                                    at moe.lyniko.hiderecent.utils.AppUtils.access$getAllApps(AppUtils.kt:15)
                                                    at moe.lyniko.hiderecent.utils.AppUtils$appsFiltered$2.invoke(AppUtils.kt:107)
                                                    at moe.lyniko.hiderecent.utils.AppUtils$appsFiltered$2.invoke(AppUtils.kt:104)
                                                    at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
                                                    at moe.lyniko.hiderecent.utils.AppUtils.getAppsFiltered(AppUtils.kt:104)
                                                    at moe.lyniko.hiderecent.utils.AppUtils.access$getAppsFiltered(AppUtils.kt:15)
                                                    at moe.lyniko.hiderecent.utils.AppUtils$parsedApps$2.invoke(AppUtils.kt:117)
                                                    at moe.lyniko.hiderecent.utils.AppUtils$parsedApps$2.invoke(AppUtils.kt:116)
                                                    at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
                                                    at moe.lyniko.hiderecent.utils.AppUtils.getParsedApps(AppUtils.kt:116)
                                                    at moe.lyniko.hiderecent.ui.HomeViewKt.getDisplayApps(HomeView.kt:173)
                                                    at moe.lyniko.hiderecent.ui.HomeViewKt.access$getDisplayApps(HomeView.kt:1)
                                                    at moe.lyniko.hiderecent.ui.ComposableSingletons$HomeViewKt$lambda-1$1.invoke(HomeView.kt:142)
                                                    at moe.lyniko.hiderecent.ui.ComposableSingletons$HomeViewKt$lambda-1$1.invoke(HomeView.kt:141)
                                                    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:117)
                                                    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35)
                                                    ...
                                                Caused by: android.os.BadParcelableException: Failure retrieving array; only received 391 of 526
                                                    at android.content.pm.BaseParceledListSlice.<init>(BaseParceledListSlice.java:104)
                                                    at android.content.pm.ParceledListSlice.<init>(ParceledListSlice.java:42)
                                                    at android.content.pm.ParceledListSlice.<init>(Unknown Source:0)
                                                    at android.content.pm.ParceledListSlice$1.createFromParcel(ParceledListSlice.java:80)
                                                    at android.content.pm.ParceledListSlice$1.createFromParcel(ParceledListSlice.java:78)
                                                    at android.os.Parcel.readTypedObject(Parcel.java:4025)
                                                    at android.content.pm.IPackageManager$Stub$Proxy.getInstalledPackages(IPackageManager.java:5070)
                                                    ... 314 more
  1. 完全不授予“读取应用列表”权限,进入后直接按如下格式导入设置:

导入配置有效。

Young-Lord commented 4 months ago

1.1.0 是没问题的,可能从这方面找找线索?

一个是 targetSdk 33 升到了 34, 对应的 revert 是这个 https://github.com/Young-Lord/hideRecent/actions/runs/7326999689 一个是过滤掉了没有 activity 的包,对应的 revert 是这个 https://github.com/Young-Lord/hideRecent/actions/runs/7327002818

Young-Lord commented 4 months ago

方便试下 ci build 吗?

sgpublic commented 4 months ago

方便试下 ci build 吗?

target 改 34 没有区别,PackageManager.GET_ACTIVITIES 删掉貌似不是过滤没有 activity 的包的意思,,,删掉之后列表空了

sgpublic commented 4 months ago

最小化代码如下:MainActivity.kt#L29

...
                        packageManager.getInstalledPackages(
                            PackageManager.GET_ACTIVITIES or PackageManager.GET_META_DATA
                        )
...

在其他机子上跑没问题,就我的小米 14 有这个问题,我把 magisk 刷掉看看

sgpublic commented 4 months ago

在其他机子上跑没问题,就我的小米 14 有这个问题,我把 magisk 刷掉看看

刷掉也不行,我去社区提一下看是不是系统的问题

Young-Lord commented 4 months ago

方便试下 ci build 吗?

target 改 34 没有区别,PackageManager.GET_ACTIVITIES 删掉貌似不是过滤没有 activity 的包的意思,,,删掉之后列表空了

啊,我这两个其实指的是 1.1.0 -> 2.0.x 的变化,最新两个 ci 分别是对应撤销这两个更改的版本 PackageManager.GET_ACTIVITIES删掉后列表空了的话,貌似说明就是这个flag的问题,具体来说是这样的: 只有GET_META_DATA是不获取activity信息的,这样会显示所有应用——直到下面链接这个commit用GET_ACTIVITIES获取activity列表 然后我那个ci build只删了flag,忘删对应判空的代码了;但既然没报错,那就说明至少这句没问题 试试最新ci,理想情况是能全部显示

Young-Lord commented 4 months ago

ci build 里 catch 了一下

Young-Lord commented 4 months ago

现在 ci build 的行为是会 fallback 到全部显示,并用 snackbar 通知用户

sgpublic commented 1 week ago

确实系统问题,小米14 HyperOS 1.0.36.0已不再报错