[Mtk][M0] 浏览器保存离线页面失败
2016-09-28 本文已影响243人
灰灰手记
说明:
下面将要说的MtkBrwoser,是指在vender/mediatek目录下的Browser应用。
现象:
在使用MtkBrowser浏览网页时,选择 Save for offline reading
功能,提示 Failed to save web page.
优点:安全,不用担心修改
GMS
,影响CTS
测试,也不用担心MtkBrowser
有什么别的问题了,一劳永逸。
缺点:Chrome
的可定制性太差,客户不一定接受。
4、MTK
基于 L
平台的解决方法:
修改:
vendor\google\apps\WebViewGoogle\Android.mk
注释掉前面提到的代码:
#LOCAL_OVERRIDES_PACKAGES :=webview
修改:
/frameworks/base/core/java/android/webkit/WebViewFactory.java
的 getWebViewPackageName
方法,修改为:
public static String getWebViewPackageName() {
//return AppGlobals.getInitialApplication().getString(
// com.android.internal.R.string.config_webViewPackageName);
Application initialApplication = AppGlobals.getInitialApplication();
if(initialApplication.getPackageName().equals("com.android.browser")){
return "com.android.webview";
} else{
return initialApplication.getString(com.android.internal.R.string.config_webViewPackageName);
}
}
优点:
MTK
提供的方法,可靠性相对较高。而且有HTMLViewer
乱码现象时,只需要多加一个判断,包名写HTMLViewer
的包名就好。
缺点:可能影响CTS
或GTS
测试。
PS:经验证不可行,至少在M
平台不可行。
5、自己的方法:
在上述第 4
点 MTK
的方法的基础上,接着修改:
\frameworks\base\core\java\android\webkit\WebView.java
插入如下 START 和 END 标识的代码即可。
private void initChromiumClassIfNeccessary() {
if (mCls != null) {
return;
}
try {
Application initialApplication = AppGlobals.getInitialApplication();
if (initialApplication == null) {
throw new ReflectiveOperationException("Applicatin not found");
}
String packageName = initialApplication.getString(
com.android.internal.R.string.config_webViewPackageName);
/// START. By Xia.Fei, 20160929. Save for offline reading.
String callerPkgName = initialApplication.getPackageName();
Log.e("XIAFEI", "WV >> initChromiumClassIfNeccessary, callerPkgName = "+callerPkgName);
if(callerPkgName.equals("com.android.browser")){
packageName = "com.android.webview";
}
/// END. By Xia.Fei, 20160929. Save for offline reading.
Context webViewContext = initialApplication.createPackageContext(packageName,
Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);
initialApplication.getAssets().addAssetPath(
webViewContext.getApplicationInfo().sourceDir);
ClassLoader clazzLoader = webViewContext.getClassLoader();
String className = "com.android.webview.chromium.WebViewChromium";
mCls = Class.forName(className, true, clazzLoader);
} catch (android.content.pm.PackageManager.NameNotFoundException ex) {
Log.e(LOGTAG, "get Webview Class Exception->" + ex);
} catch (ReflectiveOperationException ex) {
Log.e(LOGTAG, "get Webview Class Exception->" + ex);
}
}
缺点:未验证是否影响
CTS
和GTS
。
PS:参考上面第4
点修改之后,需要Clean
编译。