Tencent / Shadow

零反射全动态Android插件框架
BSD 3-Clause "New" or "Revised" License
7.43k stars 1.3k forks source link

Android 15 Beta版本 Sample Demo 启动插件稳定崩溃: java.lang.RuntimeException: AssetManager has been closed #1335

Open yangxy112683 opened 3 months ago

yangxy112683 commented 3 months ago

在 Google Pixel 6 的机器, 对应系统为 Android 15 , 运行 Sample 中的 Demo 示例稳定崩溃, 其崩溃堆栈如下:

2024-06-26 13:51:51.968 12950-12950 WebViewFactory com.tencent.shadow.sample.host E error instantiating provider
        java.lang.RuntimeException: AssetManager has been closed
        at android.content.res.AssetManager.ensureOpenLocked(AssetManager.java:548)
        at android.content.res.AssetManager.addAssetPathInternal(AssetManager.java:487)
        at android.content.res.AssetManager.addSharedLibraryPaths(AssetManager.java:480)
        at android.content.res.ResourcesImpl.<init>(ResourcesImpl.java:212)
        at android.app.ResourcesManager.redirectAllResourcesToNewImplLocked(ResourcesManager.java:1750)
        at android.app.ResourcesManager.appendLibAssetsLocked(ResourcesManager.java:1582)
        at android.app.ResourcesManager.registerResourcePaths(ResourcesManager.java:158)
        at android.content.res.Resources.registerResourcePaths(Resources.java:2862)
        at android.webkit.WebViewFactory.getProviderClass(WebViewFactory.java:553)
        at android.webkit.WebViewFactory.getProvider(WebViewFactory.java:362)
        at android.webkit.WebView.getFactory(WebView.java:2606)
        at android.webkit.WebView.ensureProviderCreated(WebView.java:2600)
        at android.webkit.WebView.setOverScrollMode(WebView.java:2668)
        at android.view.View.<init>(View.java:5821)
        at android.view.View.<init>(View.java:5962)
        at android.view.ViewGroup.<init>(ViewGroup.java:705)
        at android.widget.AbsoluteLayout.<init>(AbsoluteLayout.java:56)
        at android.webkit.WebView.<init>(WebView.java:422)
        at android.webkit.WebView.<init>(WebView.java:364)
        at android.webkit.WebView.<init>(WebView.java:346)
        at android.webkit.WebView.<init>(WebView.java:333)
        at android.webkit.WebView.<init>(WebView.java:323)
        at com.tencent.shadow.core.loader.blocs.CreateResourceBloc$create$1.run(Unknown Source:4)
        at android.os.Handler.handleCallback(Handler.java:959)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loopOnce(Looper.java:232)
        at android.os.Looper.loop(Looper.java:317)
        at android.app.ActivityThread.main(ActivityThread.java:8674)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:886)

企业微信截图_97bff8e8-d8ef-435a-b962-4537f0333d9a

请麻烦看下是否是构造插件Resources的方案在高版本上已失效, 是否有新方案?

shifujun commented 3 months ago

AP31.240426.023.B4

https://developer.android.com/about/versions/15/release-notes

你至少先装个最新的Beta 3再测吧?其实你改标题就能看出来你根本不在意是什么版本。

这些Beta版本系统没什么测试意义,bug会非常多。

你这个堆栈可能也没仔细看,那不就是new一个WebView就挂了么?如果你仔细看了应该在issue中指出来这一点,并且给出你测试new Webview的结果。

yangxy112683 commented 3 months ago

AP31.240426.023.B4

https://developer.android.com/about/versions/15/release-notes

你至少先装个最新的Beta 3再测吧?其实你改标题就能看出来你根本不在意是什么版本。

这些Beta版本系统没什么测试意义,bug会非常多。

你这个堆栈可能也没仔细看,那不就是new一个WebView就挂了么?如果你仔细看了应该在issue中指出来这一点,并且给出你测试new Webview的结果。

image
  1. 受教了, 在安装最新版本的 Beta 3 上验证了 new WebView, 在宿主进程中可以正常创建 WebView 对象, 在Shadow 示例中的CreateResourceBloc中, 尝试使用hostAppContext 来new 一个 WebView, 会有以下堆栈的报错
com.tencent.shadow.sample.host       E  error instantiating provider
            java.lang.RuntimeException: AssetManager has been closed
            at android.content.res.AssetManager.ensureOpenLocked(AssetManager.java:548)
            at android.content.res.AssetManager.addAssetPathInternal(AssetManager.java:487)
            at android.content.res.AssetManager.addSharedLibraryPaths(AssetManager.java:480)
            at android.content.res.ResourcesImpl.<init>(ResourcesImpl.java:212)
            at android.app.ResourcesManager.redirectAllResourcesToNewImplLocked(ResourcesManager.java:1750)
            at android.app.ResourcesManager.appendLibAssetsLocked(ResourcesManager.java:1582)
            at android.app.ResourcesManager.registerResourcePaths(ResourcesManager.java:158)
            at android.content.res.Resources.registerResourcePaths(Resources.java:2862)
            at android.webkit.WebViewFactory.getProviderClass(WebViewFactory.java:553)
            at android.webkit.WebViewFactory.getProvider(WebViewFactory.java:362)
            at android.webkit.WebView.getFactory(WebView.java:2606)
            at android.webkit.WebView.ensureProviderCreated(WebView.java:2600)
            at android.webkit.WebView.setOverScrollMode(WebView.java:2668)
            at android.view.View.<init>(View.java:5820)
            at android.view.View.<init>(View.java:5961)
            at android.view.ViewGroup.<init>(ViewGroup.java:705)
            at android.widget.AbsoluteLayout.<init>(AbsoluteLayout.java:56)
            at android.webkit.WebView.<init>(WebView.java:422)
            at android.webkit.WebView.<init>(WebView.java:364)
            at android.webkit.WebView.<init>(WebView.java:346)
            at android.webkit.WebView.<init>(WebView.java:333)
            at android.webkit.WebView.<init>(WebView.java:323)
            at com.tencent.shadow.core.loader.blocs.CreateResourceBloc$create$1.run(Unknown Source:4)
            at android.os.Handler.handleCallback(Handler.java:959)
            at android.os.Handler.dispatchMessage(Handler.java:100)
            at android.os.Looper.loopOnce(Looper.java:232)
            at android.os.Looper.loop(Looper.java:317)
            at android.app.ActivityThread.main(ActivityThread.java:8699)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:886)
  1. 查阅 Android 源码, 发现是在frameworks/base/core/java/android/webkit/WebViewFactory.java中抛出的异常
image

请问该问题是否需要在 Android 15 最终的 Release 版本上验证才有意义?

yaochaoyang commented 3 months ago

how to fix it?

quibbler01 commented 2 months ago

damn, google should fix it

zslsyx commented 1 month ago

遇到同样的问题

alwaysdh commented 1 month ago

楼主解决了吗

budaowengd commented 1 month ago

遇到同样的问题,请问如何解决

oceanghy commented 1 month ago

这个是Android 15特性导致的吗,遇到同样加载插件crash的问题

yangxy112683 commented 1 month ago

目前暂未解决, 预计需要等 Android 15 正式版本再验证下