droidplugin webview加载 assert的问题

droidplugin中如果插件中用webview loadurl是asserts文件会读取失败,按道理droidplugin 算是默认处理资源问题,因为创建的context apk路径默认指向插件的apk所在的问题,但webview是不行的,但我看droidplugin代码时候有一个WebViewFactoryProviderHook 这类,貌似是解决assert的问题的,然后像别的类,installhook 之后插件webview就可以读取了(默认没有任何调用),但我不知道为什么那么写就可以,我顺着loadurl 这个方法看代码,无法推出解决方法由来,估计360是分析整个webview加载的顺序推出来的。

    我分析代码得出另外的解决webview的办法,同时可以增加webview操作,通过动态代理webviewProvider,然后对应的处理就可以做到了,直接贴简单的代码。

 protected void afterInvoke(Object receiver, Method method, Object[] args, final Object invokeResult) throws Throwable {
            if (mWebView != null) {


                Class clazz = invokeResult.getClass();
                List<Class<?>> interfaces = Utils.getAllInterfaces(clazz);
                Class[] ifs = interfaces != null && interfaces.size() > 0 ? interfaces.toArray(new Class[interfaces.size()]) : new Class[0];
                //fixWebViewAsset(mWebView.getContext());
                final Object newObj = MyProxy.newProxyInstance(clazz.getClassLoader(), ifs, new InvocationHandler() {
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        android.util.Log.d(TAG, "invoke: " + method);
                        if(method.getName().contains("loadUrl")){
                            String url = (String)args[0];
                            if(url.contains("file:")){
                                args[0] = "http://m.360.com/";
                            }
                        }
                        Object invoke = method.invoke(invokeResult, args);
                        //fixWebViewAsset(mWebView.getContext());
                        return invoke;
                    }
                });

               // final Object newObj = MyProxy.newProxyInstance(clazz.getClassLoader(), ifs, new WebViewProviderHook(null));
                setFakedResult(newObj);
            }


360那种解决办法,没有对自己的宿主进程做过滤,如果宿主也用webview会导致问题,建议判断是否插件,如果插件才进行修正


猜你喜欢

转载自blog.csdn.net/xiaozuoay/article/details/79026575