android Html Package机制说明
术语说明 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.zip,META.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
更多相关文章
- android 监听联系人数据库
- 编译cubieboard android 源码过程详解之(六):pack
- Android中使用Gallery_tabhost来实现标签效果图源码
- Android中启动动画源码讲解
- Android 源码 修改系统默认横屏
- 45个android实例源码
- Error--->android工程导入找不到R文件
- 在AndroidManifest.xml文件中的android:windowSoftInputMode属性
- Gradle离线配置、.android、.AndroidStudio、.gradle、.m2缓存文