腾讯X5内核的集成和使用
2016-06-28 11:54
811 查看
这几天,由于项目中有涉及到Egret页面,导致某些机型在4.3及以下版本无法正常加载。所以就考虑到集成腾讯X5内核,替换系统自带的webview。
关于如何集成方面,虽然X5官网 有接入指南,但个人感觉某些方面不是很详细,所以我就总结一下自己的集成步骤:
1、首先在官网下载官方demo ,在手机上运行看看能否满足自己的需求?如果不能满足的话,我还知道有另一个项目,可以试试:Crosswalk ;
2、仍然在X5官网,注册开发者帐号,在开发者后台申请APPkey,配置到自己的项目中;
name不变,value改为自己的APPkey
3、添加权限,可以直接复杂官方demo的权限。
4、在mainActivity中加载X5内核
6、在项目中和使用自定义控件一样,使用X5WebView。
7、获取控件,添加地址和js进行交互
推荐使用共享X5内核的jar包,一般有装QQ或者微信的情况下,使用该方法,就可以直接启用X5内核。
App 如何首次就加载 x5 内核?
App 可以在启动后立刻调用TbsDownloader 的 public static boolean needDownload(Context context, boolean oversea) 接口,第二个参数传递 false,needDownload 内部会创建一个线程向后台查询当前可用内核版本号,这个函数内是异步执行所以不会阻塞 App 主线程,这个函数内是轻量级执行所以对 App 启动性能没有影响,当 App 后续创建 webview 时就可以首次加载 x5 内核了
关于如何集成方面,虽然X5官网 有接入指南,但个人感觉某些方面不是很详细,所以我就总结一下自己的集成步骤:
1、首先在官网下载官方demo ,在手机上运行看看能否满足自己的需求?如果不能满足的话,我还知道有另一个项目,可以试试:Crosswalk ;
2、仍然在X5官网,注册开发者帐号,在开发者后台申请APPkey,配置到自己的项目中;
name不变,value改为自己的APPkey
3、添加权限,可以直接复杂官方demo的权限。
4、在mainActivity中加载X5内核
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main_advanced); mContext = this; if (!main_initialized) { this.new_init(); } preinitX5WebCore(); preinitX5WithService();// 此方法必须在非主进程执行才会有效果 } /** * 开启额外进程 服务 预加载X5内核, 此操作必须在主进程调起X5内核前进行,否则将不会实现预加载 */ private void preinitX5WithService() { Intent intent = new Intent(mContext, FirstLoadingX5Service.class); startService(intent); } /** * X5内核在使用preinit接口之后,对于首次安装首次加载没有效果 * 实际上,X5webview的preinit接口只是降低了webview的冷启动时间; * 因此,现阶段要想做到首次安装首次加载X5内核,必须要让X5内核提前获取到内核的加载条件 */ private void preinitX5WebCore() { if (!QbSdk.isTbsCoreInited()) {// preinit只需要调用一次,如果已经完成了初始化,那么就直接构造view QbSdk.preInit(MainActivity.this, myCallback);// 设置X5初始化完成的回调接口 // 第三个参数为true:如果首次加载失败则继续尝试加载; } } private PreInitCallback myCallback = new QbSdk.PreInitCallback() { @Override public void onViewInitFinished() {// 当X5webview 初始化结束后的回调 new WebView(mContext); MainActivity.this.isX5WebViewEnabled = true; } @Override public void onCoreInitFinished() { } };5、复制utils文件夹到自己的项目中,某些文件如果项目中用不到的情况下,可以删除;
6、在项目中和使用自定义控件一样,使用X5WebView。
7、获取控件,添加地址和js进行交互
webView = (X5WebView) findViewById(R.id.webview); webView.clearCache(true); findViewById(R.id.progressBar).setVisibility(View.GONE); ((ACTTitleBannerTemplate) getTemplate()).setBannerVisibility(View.GONE); webView.setSaveEnabled(false); webView.addJavascriptInterface(new WebViewJavaScriptFunction() { @Override public void onJsFunctionCalled(String tag) { } @JavascriptInterface public void toastMessage(String msg) { //TODO try { JSONObject jo = new JSONObject(msg); String question = jo.optString("today_question"); if (TextUtils.isEmpty(question)) {//表明答题失败 Intent intent = new Intent(); intent.putExtra(ReadCommunityPagerPage.EXTRA_CHALLENGE_FAIL, true); getActivity().setResult(Activity.RESULT_OK, intent); getActivity().finish(); } else { try { question = URLDecoder.decode(question, "utf-8"); char[] chs = question.toCharArray(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < chs.length; i++) { if (i != 0 && i != chs.length - 1) { sb.append(chs[i]); } } question = sb.toString(); int activityId = jo.optInt("activity_id"); Intent intent = new Intent(getActivity(), ReadAddDiscussRecordActivity.class); intent.putExtra(ReadAddDiscussRecordPage.EXTRA_ACTIVITY_ID, activityId); intent.putExtra(ReadAddDiscussRecordPage.EXTRA_TODAY_QUESTION, question); getActivity().startActivity(intent); getActivity().finish(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } } catch (JSONException e) { e.printStackTrace(); } } }, "control"); webView.getSettings().setJavaScriptEnabled(true);注意:在message方法中的注解,必须使用android系统自带注解,否则无法获取到返回数据。
推荐使用共享X5内核的jar包,一般有装QQ或者微信的情况下,使用该方法,就可以直接启用X5内核。
App 如何首次就加载 x5 内核?
App 可以在启动后立刻调用TbsDownloader 的 public static boolean needDownload(Context context, boolean oversea) 接口,第二个参数传递 false,needDownload 内部会创建一个线程向后台查询当前可用内核版本号,这个函数内是异步执行所以不会阻塞 App 主线程,这个函数内是轻量级执行所以对 App 启动性能没有影响,当 App 后续创建 webview 时就可以首次加载 x5 内核了
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories