Tencent / Shadow

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

有关webview加载自定义文件路径报错的问题 #1189

Closed senda58 closed 1 year ago

senda58 commented 1 year ago

插件用的混合开发移动框架cordova,在应用启动后,插件逻辑自动将asstes下文件迁移到了自定义的路径下了,比如data/user/0/插件包名/app_www/index.html ,这样插件webview加载的路径就由 file:///android_asset/www/ 变成了file:///data/user/0/插件包名/app_www/index.html 。 这样宿主加载插件时,webview加载的资源路径为:file:///data/user/0/宿主包名/app_www/index.html ,就会报此路径找不到的错误。

上述错误,我分析了一下 其实,在我调试的手机上 data/user/0/ 是不存在的,我调试的手机路径为 data/data/宿主包名/app_www/index.html ,这个路径是有的,看来是手机不同,绝对路径的不同导致的。

我插件的运行目录使用的是: cContext.getDir("www", cContext.MODE_PRIVATE).getAbsolutePath(); 而在我宿主加载插件时:shadow 拷贝文件到data 目录使用的是 context.getFilesDir() ,

所以正常加载资源文件的路径应该是cContext.getDir("www", cContext.MODE_PRIVATE).getAbsolutePath() 才会没问题,而此路径就是data/data/宿主包名/app_www/

而我用手机调试时 context.getFilesDir() 拿到的值确实是 data/user/0/包 这个路径,而我看我的手机根本没有这个路径,这个是咋回事呢?

image

@shifujun 麻烦大佬帮忙看看

shifujun commented 1 year ago

看不懂。在sample里复现一下吧。

senda58 commented 1 year ago

宿主加载插件资源 loadURL时 URL为 file:///data/user/0/宿主包名/app_www/index.html 有这个,但是提示找不到

image

下图是data/data/包名 下的文件

image

@shifujun

shifujun commented 1 year ago

但是提示找不到

你截图里清清楚楚的写着net::ERR_ACCESS_DENIED,哪有找不到的提示?

你的代码似乎是私有代码,建议跟你的同事们交流。开源项目技术交流要建立在开源代码的基础上。

senda58 commented 1 year ago