术语说明 2

使用说明 2

1)Package初始发布 2

a)Package配置 2

b)Package源码文件夹 2

c)META.json文件格式 2

d)安全性 3

2)Package在线更新 3

a)证书文件 3

b)更新接口 3

c)更新过程 3

d)安全性 3

3)META.json生成工具 3

4)多Package支持 3

5)动态package安装 4

6)网络访问限制 4

7)实现概述,详见代码注释 4

a)HtmlPackageInfo 4

b)HtmlPackageSQLiteOpenHelper 4

c)HtmlPackageContentProvider 4

d)HtmlPackageController 4


术语说明

HtmlPackage:H5源码包

ApiEx:原生对H5功能扩展,现有机制版本号为1.0,新机制从2.0开始

使用说明

1)引入orangehtml作为依赖模块

2)把H5源码包放在assets目录下,格式为:

assets

+ tylc

+META.json // 源码包描述文件

|src.zip // h5源码包

3)通过HtmlSettings.addHtmlPackage()添加h5

4)将服务器证书保存为assets/HtmlPackage.cer,通过HtmlSettings.setHtmlPackageCertificateFile()设置证书文件

5)在HtmlFragment中,用orange://name/path访问数据,例如:orange://package1/a.html

6)H5中可通过orange:///orange.js获得ApiEx扩展js文件

1)Package初始发布

Html Package最初伴随Apk程序包发布,放置于assets文件夹下:

a)Package配置

通过HtmlSettings.addHtmlPackage()接口添加package

独立理财项目为HtmlSettings.addHtmlPackage(“tylc”)

b)Package源码文件夹

与配置文件对应,包含H5相关源码src.zip和信息文件META.json

例如:assets/package1,assets/package2

独立理财项目为assets/tylc/{src.zipMETA.json}

c)META.json文件格式

描述package版本信息等的文件,每个package下的META.json文件

独立理财项目为assets/tylc/META.json

文件格式,合法josn object字符串:

{

“name": "tylc", //package名

"version": “4.1.2”, // 版本号

"url": “src.zip路径”, // 源码包url

"sha1": “sha1”, //src.zip的sha1摘要

"sha1WithRSA": “sign”, // src.zip的sha1WithRSA签名

"minApiex":"1.0", // 要求的最低ApiEx版本,应不低于当前apk的ApiEx

"updateDate":"date", //package发布时间

"size": size // src.zip文件大小

}

d)安全性

PackageController会将assets下的src.zip拷贝到程序运行目录,并通过数字签名校验的方式确保数据安全

2)Package在线更新

a)证书文件

Apk中打包了CMS服务器的证书文件,保存于assets/HtmlPackage.cer,并通过HtmlSetting接口设置证书,用于验证下载的H5压缩包

证书的过期不会影响验证过程,机制中没有证书更新逻辑

b)更新接口

“name”:“H5应用名”,

“version”:“H5源码版本”,

“url”:“下载地址”,

“sha1”:“sha1, Base64字符串”,

“sha1WithRSA” :“sha1WithRSA, Base64字符串”,

“minApiex”:“要求最低的ApiEx版本”,

“updateDate”:“更新时间,格式为:yyyy-MM-dd HH:mm:ss Z”,

“size”: “源码包大小”

c)更新过程

1.检查可用更新,可用package的状态为available

2.下载文件并检验sha1WithRSA信息,package状态可为:[ready,download_failed,verify_failed]

3.激活,package状态转为active,数据可用

d)安全性

H5数据包保存在程序的内部数据存储区,通过Linux的访问权限控制保护,其他app或adb shell访问需要root权限

H5源码包不会解压,而是通过ZipFile读取,加载前通过sha1WithRSA方式验证,确保数据不被替换

3)META.json生成工具

程序提供一份META.json文件格式的生成工具,用于解析h5源码压缩包,并自动生成META.json文件,用于随apk发布或自动更新

a)源码包中的META.json需包含输入字段:name,version,minApiEx

b)压缩包结构首层目录为单一文件夹,且名字与name对应

4)多Package支持

可同时支持多个package,以name区分

独立理财项目的package名为tylc,且当前只有一个package

5)动态package安装

asserts/HtmlPackage.json配置文件用于导入asserts下的初始化package,如果从服务器获得未定义在HtmlPackage.json中的package信息,则同样可被下载和激活(通过签名验证)

6)网络访问限制

由于Package管理机制接管了文件访问,并将其控制在orange://package/的域名下,本地Html中的js由于跨域限制而不能直接访问网络

相应地,Html容器提供了HttpClient扩展,用于提供本地js网络访问能力

7)实现概述,详见代码注释

a)HtmlPackageInfo

package数据对象,包括数据字段和一些便捷函数

b)HtmlPackageSQLiteOpenHelper

package数据库管理类,访问应通过ContentProvider封装

c)HtmlPackageContentProvider

标准Android控件,封装对数据库的访问,和提供监听模式

提供字段:

“id”:唯一标识

“name”:packagename

“version”:版本

“url”:下载地址

“sha1”:sha1的Base64

“sha1_with_rsa”:sha1WithRSA的Base64

“min_api_ex":ApiEx版本要求

“update_date”:更新发布时间

“size”:数据包大小

“state”:状态,可取值

[available,downloading,download_failed,verify_failed,ready,active]

“downloaded”:已下载数据

“local_path”:数据包本地路径

d)HtmlPackageController

package管理中心对象,包括

1.更新流程接口:

checkUpdate:检测更新

downloadAndVerifyPackage:下载并验证package

applyPackage:激活package

2.package信息:

getHtmlPackageList:package namelist

etActiveHtmlPackageInfo(name):当前激活的package,指定名称

getUpdatableHtmlPackageInfo(name):可用的package更新,指定名称

getHtmlPackageInfo(uri):获取package信息,指定Uri

3.package数据:

getResource(uri):获取数据输入流,uri格式为:orange://package/path

更多相关文章

  1. android 监听联系人数据库
  2. 编译cubieboard android 源码过程详解之(六):pack
  3. Android中使用Gallery_tabhost来实现标签效果图源码
  4. Android中启动动画源码讲解
  5. Android 源码 修改系统默认横屏
  6. 45个android实例源码
  7. Error--->android工程导入找不到R文件
  8. 在AndroidManifest.xml文件中的android:windowSoftInputMode属性
  9. Gradle离线配置、.android、.AndroidStudio、.gradle、.m2缓存文

随机推荐

  1. Android跨进程通信AIDL详解(附源码)
  2. [Android进阶]Android中使用的观察者模式
  3. Android常用工具使用
  4. Android多网卡
  5. Android 开发者的 Flutter(五) —— Flutte
  6. 《论Android的发展方向(个人见解)》
  7. 【Android】Content Provider基础之SQL
  8. AndroidManifest.xml详解
  9. 深入浅出Android Gradle构建系统(三:buil
  10. Android实现透明指示层