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

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

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

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

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

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

这是一个APK

APK解压后的文件结构

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

很明显只有一个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结构,页面总入口都是同一个

 

静态xhtml,DOM与数据静态化

 

把一个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跟地址,所以在最终数据中需要处理

 

打包运行的效果

UI有点丑。。。

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

开发node桌面级应用工具:apk转化epub的更多相关文章

  1. linux开发node相关的工具

    epel-release yum install epel-release node yum install nodejs mongodb 安装mongodb服务器端 yum install mong ...

  2. 如何用node开发自己的cli工具

    如何用node开发自己的cli工具 灵感 写这个工具的灵感以及场景源于youtube的一次闲聊 github 地址 blog首发 使用场景 原本我们写博客展示shell,例如:安装运转docker,一 ...

  3. VS轻松开发Node.js应用

    PTVS开发团队又开发出一款可以在VS里编写Node.js应用程序的插件--NTVS(Node.js Tools for Visual Studio),开发者可以在VS里轻松开发Node.js应用. ...

  4. 在Visual Studio上开发Node.js程序(2)——远程调试及发布到Azure

    [题外话] 上次介绍了VS上开发Node.js的插件Node.js Tools for Visual Studio(NTVS),其提供了非常方便的开发和调试功能,当然很多情况下由于平台限制等原因需要在 ...

  5. Xamarin Mono For Android 4.6.07004 完整离线安装破解版(C#开发Android、IOS工具)

      Xamarin是由Miguel de Icaza成立的一家新的独立公司,目的是给Mono一个继续奋斗的机会.Mono for Android (原名:MonoDroid)可以让开发人员使用 Mic ...

  6. Node包管理工具

    Node包管理工具 只是简单的介绍一些工具的使用,有利于开发过程.除了介绍Node包管理工具,还介绍了前端打包工具,前端模块管理工具 Node包管理工具:    --npm    --cnpm    ...

  7. fir.im Weekly - 17 个提升 iOS 开发效率的必备工具

    本期 fir.im Weekly 精选了一些iOS 开发工具和动画源码分享,希望每个开发者能专注效率.实用.灵感.  iOS开发工具--如何优化ipa包大小 @iOS程序犭袁 推荐了关于"如 ...

  8. 【转】使用VS开发 Node.js指南

    参考:https://www.visualstudio.com/features/node-js-vs 这篇文章主要介绍了使用VS开发 Node.js的方法,主要是使用NTVS(Node.js Too ...

  9. MIP开发教程(一) MIP-CLI工具安装与环境部署

    依赖安装 安装 MIP-CLI 创建开发文件结构 1. 依赖安装 MIP-CLI 使用 NPM 安装,依赖 node 环境: node 安装-windows node 安装-mac MIP-CLI 开 ...

随机推荐

  1. 如何一步一步用DDD设计一个电商网站(四)—— 把商品卖给用户

    阅读目录 前言 怎么卖 领域服务的使用 回到现实 结语 一.前言 上篇中我们讲述了“把商品卖给用户”中的商品和用户的初步设计.现在把剩余的“卖”这个动作给做了.这里提醒一下,正常情况下,我们的每一步业 ...

  2. ABP框架 - OData 集成

    文档目录 本节内容: 简介 安装 安装Nuget包 设置模块依赖 配置你的实体 创建控制器 示例 获取实体列表 请求 响应 获取单个实体 请求 响应 获取单个实体及导航属性 请求 响应 查询 请求 响 ...

  3. java head space/ java.lang.OutOfMemoryError: Java heap space内存溢出

    上一篇JMX/JConsole调试本地还可以在centos6.5 服务器上进行监控有个问题端口只开放22那么设置的9998端口 你怎么都连不上怎么监控?(如果大神知道还望指点,个人见解) 线上项目出现 ...

  4. 为.NET Core项目定义Item Template

    作为这个星球上最强大的IDE,Visual Studio不仅仅提供了很多原生的特性,更重要的是它是一个可定制的IDE,比如自定义Project Template和Item Template就是一个非常 ...

  5. C#文件安全管理解析

    在实际的项目开发中,我们经常需要使用到文件的I/O操作,主要包含对文件的增改删查等操作,这些基本的操作我们都是很熟悉,但是较少的人去考虑文件的安全和操作的管理等方面,例如文件的访问权限管理,文件数据的 ...

  6. 微软发布VSBT,无需安装Visual Studio即可实现项目编译

    安装了Visual Studio的那些使用微软平台的开发者通常能够非常容易地操作自己的项目:打开解决方案,修改内容,设置好所有必须的文件以及配置后编译项目.但是在构建服务器或者持续交付系统等没有安装V ...

  7. JavaScript学习笔记(四)——jQuery插件开发与发布

    jQuery插件就是以jQuery库为基础衍生出来的库,jQuery插件的好处是封装功能,提高了代码的复用性,加快了开发速度,现在网络上开源的jQuery插件非常多,随着版本的不停迭代越来越稳定好用, ...

  8. 挑子学习笔记:两步聚类算法(TwoStep Cluster Algorithm)——改进的BIRCH算法

    转载请标明出处:http://www.cnblogs.com/tiaozistudy/p/twostep_cluster_algorithm.html 两步聚类算法是在SPSS Modeler中使用的 ...

  9. Chrome代码下载及编译

    2-3年前在做客户端开发时,看过CHROME的一部分代码,主要是BASE库相关的.其项目之大,编译时间之长给我留下了深刻的印象. 3年后的最近,想着再读一下其他部分的代码,所以就对其纠结的下载和编译过 ...

  10. (原创) alljoyn物联网实验之手机局域网控制设备

    AllJoyn开源物联网协议框架,官方描述是一个能够使连接设备之间进行互操作的通用软件框架和系统服务核心集,也是一个跨制造商来创建动态近端网络的软件应用.高通已经将该项目捐赠给了一个名为“AllSee ...