丈夫欲遂平生志,一载寒窗一举汤。这篇文章主要讲述Android 混合开发,html5 自动更新爬过的坑相关的知识,希望能为你提供帮助。
现在使用混合开发的公司越来越多,虽然出现了一些新技术,比如Facebook的react native、阿里的weex,但依然阻挡不了一些公司采用h5的决心,当然,这也是从多方面考虑的选择。
在三年前就使用过html5混合开发,当时做的是一款贵金属软件,涨跌五线谱、乾坤交易,还有各个股市的信息,那时候还是上波牛市爆发的前夕,哎。。。
最近公司让用h5混合开发,一些页面和功能有h5分担,最初时候放在本地assets文件夹下,后来由于前端同事频繁修改和更新,再加上数据安全方面考虑,决定把包放在服务器,采用接口返回字段,判断是否需要下载更新,接下来就谈下开发中遇到的几个坑,给自己做个笔记,也分享给需要的朋友。
首坑:android系统
对于h5的混合开发,Android系统就是个大坑,三年前接入h5点时候,那时候好多手机卡的跟ppt似的,4.0后Google进行了一些优化,效率上确实好了很多,但后面又来了一系列巨坑,比如4.3之前一个内核,4.3一个单独内核,4.3之后又是一个内核,原生的WebView没法做到整体兼容,最后采取了一个方案,使用大企鹅的x5内核,优点如下:
- 里面类名和方法名,和原生的名称几乎是一样的,使用更方便
- QQ和微信都是采用x5内核,内核共享,不需要单独下载
- 兼容性相对较好
最初的方案是采用系统下类DownloadManager,既然是系统提供的,很多码友肯定觉得很OK的,但是爆破部队瞎搞,三星的手机系统却把DownloadManager的api删了,这尼玛就恶心了,你还是继续玩爆炸吧。。。
三坑:webview载入不显示
之前放在assets的时候,页面显示的很6,换成下载到本地读取,居然不显示了,打印下路径,没问题,那就可以确定问题出在了加载过程了,查了下资料发现,可以是用loadData,这种方法需要先将html文件读取出来,以字符串传入loadData,可以展示页面,但是不会引用css、js等文件。也可以使用loadUrl,不过需要注意,这里因为是使用本地数据,所以传入的url需要做些处理,例如:
- 如果html文件存于assets:则加前缀:file:///android_asset/
- 如果html文件存于sdcard:则加前缀:content://com.android.htmlfileprovider/sdcard/
四坑:特殊字符的转义
【Android 混合开发,html5 自动更新爬过的坑】有一个页面,ios同事那边一直显示正常,Android这边怎么都出不来,同样页面不同数据的页面就显示页面,当时就觉得很奇怪,不应该是h5点问题,要不iOS也不会显示,打印了URL一看,擦,URL中有一个”%”,转义后便OK了。当然,根据需要还有一些特殊字符也需要转义,”%”只是一个个例。
代码还未从公司项目中剥离,目前不上传了,如有错误或者补充,多多指教。
推荐阅读
- ERROR: [Common 17-356] Failed to install all user apps.
- android摄像头的autoFocus-----循环自动聚焦的实现
- Android开发 -------- 自己定义View 画 五子棋
- Android技术——在Android中的随意视图中找控件
- android4.0 USB Camera实例UVC
- android 带文字阴影的button
- Android -- 带你从源码角度领悟Dagger2入门到放弃
- LeetCode42:Trapping Rain Water
- Android使用sqlliteOpenhelper更改数据库的存储路径放到SD卡上