开发node桌面级应用工具:apk转化epub-阿里云开发者社区

开发者社区> 文艺小青年> 正文

开发node桌面级应用工具:apk转化epub

简介:
+关注继续查看

随着苹果ibooks对国内的开放,最近接了个麻烦的需求:

把现有的APK转化支持苹果ibooks电子书的epub格式

  • apk,基本都知道就是安卓的应用程序
  • epub,是ibooks支持的电子书格式 (xhtml组成的静态多页面)

这apk与epub两个完全不是一个世界的东西,怎么能关联并转化?

因为我司产出的APK应用是通过phonegap打包的SPA应用,这也是一套黑科技,通过ppt批量生成应用,本质上还是web那一套,所以给epub转化提供契机

通过H5写应用已经流行几年了,这里也不多说了,如流行的phonegap国产appcan、APICloud和HBuilder之类的打包工具太多了,本质上基本差不都,如果没有接触的可以看看

这是一个APK

image

APK解压后的文件结构

image

其中assets就是web目录,其中还包含应用的sqlite数据库

image

很明显只有一个index的单面结构,现用就是需要把index单页面,分解成多个独立的静态页面,并且要符合xhtml语法规范

常规来说,这只是一个静态分析,应该简单。

但是这里我没有采用静态分析,原因不多说,跟项目的复杂度有关系,详情可以参考我的项目分享 Hybrid App应用制作与跨平台解决方案

 

我采用的是动态编译,简单来说,让浏览器自己解析

通过加载一个后台的Chromium来解析页面,然后直接提取出Chromium渲染后的最终HTML结构

如果只是这样解析,提取的只可能当前执行的页面部分,不可能是全部的页面结构

因此,依照静态编译的思路需要符合几点要求

  1. 单页面的入口index.html,能够根据传递参数自动加载不同的页面
  2. 数据库xxtebook.db能够通过算法分解到每一个独立的页面中,做成json的数据格式

考虑到最终是桌面级应用工具,我这里采用了node语言编写

当然用node的原因也是因为有神器node-webkit,可以把node打包成exe执行文件

 

具体的思路流程:

读取apk文件 =》改名rar =》解压后读取web目录

=》读出sqlite数据

=》根据数据创建基本页面 n*.xhtml多个

=》给生成的所有xhtml页面写入区分页面标记(因为apk中的web资源代码是共享的js/css/图片等等)

=》将所有ajax处理的资源转化成js格式(如 svg 读出数据写入js文件,静态访问直接加载这个脚本)

=》分解每个页面的数据sqlite数据,并写入到对应的xhtml中(数据库的数据需要分解成json写入对应的页面中)

=》启动web服务器

=》启动webkit,并加载每一个xhtml页面做分解,等待页面渲染拿到每个页面最终的静态结构

=》合并epub的标准文件结构,生成对应的规范

=》打包输出最终的epub文件

 

对比下单页面结构与多个xhtml静态文件

 

单页面SPA结构,通过JS生成DOM

通过JS动态渲染HTML结构,页面总入口都是同一个

image1

 

静态xhtml,DOM与数据静态化

image2

 

把一个index分解成多个xhtml页面,每个页面的js、css等资源代码都是共享的,所以需要在每一个页面写入不同的数据,用来区分页面

架设一个web服务端,通过http加载这些xhtml页面,通过浏览器解析就能得到最终独立xhtml的结构

由于执行代码做了接口处理,只要xhtml中传递不同的页码,代码就自动执行不同的页面,这样就能达到,不同的页面都有不同的解析结果

由于是node全自动操作,所以web与页面的解析都必须通过自动化工具处理,这里我用的是browser-syncphantomjs

通过phantomjs 解析后就能拿到浏览器渲染后的HTML结构了

 

遇到的问题:

解压丢失文件:node确实没有一个解压插件好使,最终用shell执行脚本命令,通过调用winrar软件处理

node-webkit不支持64位的sqlite3读取:这是因为nodejs和node-webkit的ABI不同,处理的办法就是重新编译64位的sqlite3,我估计很难成功,后来找了一款神器 sql.js直接数据库分解

phantomjs可以通过execFile调用,但是执行路径,是以node调用命名为根路径计算的

phantomjs加载页面,需要监听onResourceReceived事件,之后再获取数据,页面的完全渲染无法把控的,有请求,有JS绘制等等,必须有一个延时的等待

通过browser-sync做服务器,phantomjs获取的html的结构中会有__bs_script__这个注入节点,需要删除

通过browser-sync做服务器,background加载的url都会加上整个http跟地址,所以在最终数据中需要处理

 

打包运行的效果

GQGA$7U`@N@X(R}20Z}DSKW

UI有点丑。。。

如果有这方面需求,或者有啥疑问的,可以留言。。。。


本文转自艾伦 Aaron博客园博客,原文链接:http://www.cnblogs.com/aaronjs/p/4912316.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
《区块链DAPP开发入门、代码实现、场景应用》笔记1——天外飞仙DAPP
Solidity编程语言解决了编写智能合约的不友好的问题,但是当合约编译并部署之后,对与这些接口的访问,对于一般的使用者来说,门槛有点高, 对普通用户来说也是非常不友好,为了使广大用户理解并方便快捷的访问区块链,以及区块链上的智能合约系统,开发者必须提供操作界面和结果查看界面,来简化用户访问和操作区块链的方式。
4021 0
技能学习:学习使用node.js + vue.js,开发前端全栈网站-1.工具和本地环境
Node.js 运行环境是引领前端开发人员的“一道光”,让前端开发人员**仅**利用已掌握的 js 语言就可以实现对网站服务器环境的搭建与运行。打破了以往前后端分工合作、交流对接的惯性习惯。 相对于传统PHP、JAVA开发,Node.js 附带的npm更方便、快捷地让前端开发人员更快、更方便地使用和获取其他前端大神封装好的 js 类库和精美UI样式库,舍去不同语言和不同编码的切换过程。
232 0
带你读《区块链开发实战: 基于JavaScript的公链与DApp开发》之三:Asch——区块链应用开发平台
本书用三个部分讲解了区块链技术以及Asch的相关实践,第一部分讲解了区块链技术的基本概念,并用300行代码实现了一个最小的、可运行的区块链;第二部分分析Asch的源码,讲解Asch的实现原理;第三部分介绍了基于Asch的侧链技术的DApp开发实战。
1565 0
应用MaxCompute实现变压器局部放电相位分析
应用MaxCompute实现变压器局部放电相位分析 1 引言 随着智能电网建设的不断推进,智能化电力一次设备和常规电力设备的在线监测都得到了较大发展并成为趋势,监测数据日益庞大,电力设备在线监测系统在数据存储和处理方面面临巨大的技术挑战。
6022 0
八款最佳的远程桌面工具
八款最佳的远程桌面工具 远程桌面是微软公司为了方便网络管理员管理维护服务器而推出的一项服务。从windows 2000 server版本开始引入,网络管理员使用远程桌面连接程序连接到网络任意一台开启了远程桌面控制功能的计算机上,就好比自己操作该计算机一样,运行程序,维护数据库等。
1535 0
《区块链DAPP开发入门、代码实现、场景应用》笔记4——Ethereum Wallet中部署合约
账号创建完成之后,账号余额是0,但是部署合约是需要消耗GAS的,因此需要获取一定的以太币才能够继续本次实现。
1510 0
3576
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载