Bambook & HTML5
Bambook电子书运用Web技术的经验
- 作者
- 盛大创新院 贺师俊 (hax)
- 最后更新时间
-
Bambook
- 电子书:手机、平板等之外的新的一种移动产品
- E-Ink技术:效果类似纸张,保护眼睛、省电、低刷新、灰度
- 互联网产品:通过WiFi、USB连接或3G联网更新
- 版权保护:通过内置“密宝”硬件芯片对内容加解密
- 微支付通道:适应互联网时代的数字内容出版
- 电子书国家标准正在制定中(工信部、新闻出版署)
架构 Architecture
- 系统层:经过深度定制裁剪和改进的Android 1.5
- 应用层:基于WebKit引擎(版本528, 2008年11月的fork)
- 基于企业开放平台的云服务:用户认证、云中书城、网盘*等
- 基于国际开放标准的内容接入:Atom/RSS、OPDS*等
- 基于W3C Widget标准的应用部署*
- 目标:所有用户界面和业务逻辑均采用Web技术构建
* 尚处于开发或测试阶段
问题 Problems
- WebKit版本老旧:WebKit的版本取决于Android系统版本,而Android的版本升级受制于许多因素(如硬件驱动)
- WebKit引擎非常复杂,在新的硬件平台上可能存在bug
- WebKit的Anroid移植版的特别问题:焦点控制、按键事件、表单控件、高速缓存、接口性能等
- WebKit在电子书应用领域的特别问题:对分页媒介的支持较差
应对之策 Solutions
- Anroid版本升级
- 修剪和改进Anroid
- 给WebKit打patch
- 自行实现特性(native)
- 自行实现特性(scripting)
- 开发者Guidelines
案例 Cases
- 阅读器(采用WebKit的插件机制)
- 跨域资源访问(修改WebKit源码)
- textarea input event(从changeset里挑选并制作patch)
- localStorage(不同于phonegap,使用C++实现)
- keyboard events(将Anroid层面的KeyEvent透过postMessage发送到脚本层并实现DOM Events标准草案API)
- Element.classList API(在脚本层实现,覆盖所有真实使用场景)
- history API(在脚本层实现,部分特性无法实现)
有待解决 TBD
- 实现Device API(电量、网络状态获取和通知)
- 实现Widget相关标准
- 应该实现哪些API?(比如存储API:WebStorage/WebSQL/IndexedDB?)
- 如何正确实现CSS media query?(是否应增加media="ebook"?)
- 缺乏某些API标准(休眠/唤醒?语音相关:TTS API?CSS audio?)
- Bambook当前未涉及的问题:@viewport、适应不同DPI、Touch events等
成本 Cost
- 对WebKit的修改和patch无法以标准Anroid SDK/NDK开发、以APK方式部署,必须定制固件
- 定制固件需考量产业链成本(与Anroid硬件厂商如何分工合作?怎样确保产品开发周期?)