关于“鸿蒙应用安装包是.apk”与“鸿蒙版应用体积小”的思考 原创 精华
【本文正在参与优质创作者激励】
引言
今天看到社区问答板块的一个问题引起了我的思考,在回答过程中内容越来越多,也就单独起了这一片文章进行一个讨论,发表一下自己的拙见。也希望大家在读完这篇文章后,会有所收获。
一、相关概念解析
1.HAP
在HarmonyOS开发文档的术语定义里:HarmonyOS Ability Package,一个HAP文件包含应用的所有内容,由代码、资源、三方库及应用配置文件组成,其文件后缀名为.hap。也即HAP是Ability的部署包。
2.应用程序包
APP Pack(.app),HarmonyOS的用户应用程序包以APP Pack形式发布。在华为运用分发文档的HarmonyOS应用中:最终打包上传的HarmonyOS应用软件包应为.app格式,且不能超过2GB。
3.APK
全称:Android application package,Android应用程序包,是Android操作系统使用的一种应用程序包文件格式,用于分发和安装移动应用及中间件,其文件后缀名为.apk。
4.混合包开发模式
华为论坛回复:在现有Android应用向HarmonyOS应用改造的过程中,为使开发者迅速迁移到HarmonyOS生态,HarmonyOS提供了混合打包方案,可以将原Android应用与HarmonyOS FA混合打包成满足HarmonyOS要求的应用
5.应用上架与发布
流程为签名->构建->发布。从Android应用改造为HarmonyOS应用的流程:构建鸿蒙版本的apk包(集成专用jar包)->配置鸿蒙工程(混入apk文件配置->签名改造->增加配置文件属性->设置启动入口)->实现Android-HarmonyOS互调用(安卓调用鸿蒙需要集成专用jar包,鸿蒙调用安卓组件是本身就支持的,而目前只能调用部分安卓功能)。HarmonyOS应用发布流程:开发者中心创建鸿蒙应用->选择软件包类型(Android应用、HarmonyOS应用、快应用、PC应用)->添加项目->上传构建的.app软件包->等待审核。若想学习如何改造详见:
6.【QA帖】第7期:分布式调度相关问题解答:
20. .hap文件解压后会有.apk文件的?
A:hap 和 apk 只是打包压缩格式。
7.社区博主的解析
博主结论:鸿蒙2.0提供的SDK,对外的接口完全屏蔽了Android,HAP里解压出来的APK还是一个遵守Android标准的App包,Apk用来引导,然后使用ClassLoader加载用户程序,至少在虚拟手机层面,是有一个Android运行时存在的,根据Log看到的信息,虚拟手机层面,应该还是有一个Linux Runtime存在的。整个hap还是由Android Runtime加载并运行的,但鸿蒙应该是在外部加了一个定制的类加载路径,用来加载hap里的classes.dex文件中带的类。按照正常的程序来理解,HAP不能算是系统原生应用。
8.HUAWEI DevEco Studio 日常Q&A(20200805更新)
9.App Bundle应用与Dynamic Ability解决方案
- Dynamic Ability是AppGallery Connect(简称AGC)基于Android App Bundle技术实现的动态加载特性的一套解决方案,第三方应用通过集成Dynamic Ability SDK,可以在需要时动态从华为应用市场下载应用的某个特性或语言包,从而减少不必要的网络流量与终端设备存储空间消耗
- 说明:此方案目前只支持客户端SDK-Android。且在使用说明中软件包选择必须选用“APK(Android应用)”。
这个解决方案就回答了为什么鸿蒙版这些应用这么小的原因
二、相关实际验证
1.AGC现行项目创建实际情况:
创建应用软件包类型只有两个选项-APK,快应用**,添加应用平台**有五个选项。
2.夜神模拟器运行《微博极速鸿蒙版》
3.手机上验证与比对
设备名称:Honor V10
HarmonyOS版本:2.0.0
应用来源:华为应用商店
(1)应用商店的鸿蒙应用与其他应用的区别
- 图片右下角有HMOS的标记
- 应用体积小
(2)应用的详情比较
- 微博
- 微博极速鸿蒙版
关于文件类型:
application/vnd.android.package-archive
的解释1.APK 文件基于 ZIP 文件格式,它的互联网媒体类型是:
application/vnd.android.package-archive
2.互联网媒体类型是:(Internet media type),原名叫“Type MIME”或“MIME”或在头信息中各种协议之后的内容种类(Content-type),他有两部分用来在Internet上鉴别数据格式,是给互联网上传输的内容赋予的分类类型。
3.vnd = vendor stackoverflow,以“vnd”开头的是商家信息,archive(译为档案文件)。
4.
application/vnd.android.package-archive
解释为:文件类型为application, ZIP 文件格式android厂商提供的.apk文件,用于存储。相关拓展:
1.文件扩展名:是操作系统用来标注文件格式的一种机制,非强制,是一种标注,比如你用photoshop可以打开一个psd图像文件。把这个文件扩展名改为txt,再拖到photoshop窗口里,还是一样能打开,说明内容完全没有变化,变化的只是双击时的默认打开方式。。MIME:多用途互联网邮件扩展(Multipurpose Internet Mail Extensions),在访问网页时,MIME type帮助浏览器识别一个HTTP请求返回的是什么内容的数据,应该如何打开、如何显示。
1.1简而言之:一个是操作系统中标注文件的,一个是邮件和HTTP协议中用来标注网络数据的。
2.W3C规定:MIME:Multipurpose Internet Mail Extensions),是描述消息内容类型的因特网标准。MIME 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。
4.ACG应用创建
(1)创建HarmonyOS应用
可以发现:添加运用选择的平台是HarmonyOS,但包名输入.apk也可以正常创建,软件包类型:APP
(2)创建Android应用
软件包类型:APK
三、相关结论(请各位斧正)
(一)标注信息的格式的角度
(1)MIME类型:鸿蒙应用和其他应用无异,均是application/vnd.android.package-archive
(2)文件扩展名:《微博极速鸿蒙版》目前来看安装包的文件拓展名均是.apk
现在下载鸿蒙应用,长按图标是没有分享选项的
(二)软件包与运行平台的角度
(1)软件包:安卓应用是APK,鸿蒙应用是APP
(2)运行平台:鸿蒙应用的运行平台是HarmonyOS
(三)综述
- (1)HarmonyOS支持Android应用改造为HarmonyOS应用,可以实现Android-HarmonyOS互调用。
- (2)可以发布APK应用、RPK应用、App Bundle应用、PC应用
- (3)目前不支持在手机上直接安装app包,需要在应用市场上架才可以安装
- (4)纯 HarmonyOS 应用是指基于 HarmonyOS 开发的应用,支持 HarmonyOS 特性的应用是指基于 Android 开发的应用,但是使用了 HarmonyOS 的特性
- (5)针对鸿蒙版应用提交为什么这么小的原因:根本上是使用了Dynamic Ability解决方案发布的App Bundle应用。(Dynamic Ability是AppGallery Connect(简称AGC)基于Android App Bundle技术实现的动态加载特性的一套解决方案,功能:动态加载特性和语言包-根据用户构造的请求,Dynamic Ability SDK与华为应用市场交互,动态加载应用相关的特性和语言包。)
- (6)针对鸿蒙版应用的安装包后缀名为.apk的问题:
- 解释1(自己的拙见):与Dynamic Ability解决方案有关,AppBundle中,Bundle原理是:Base.apk + feature2-xhdpi.apk + feature2-armabi.apk + feature2-en.apk 来组合形成的一个APK提供给这种手机配置的用户下载,所以当我们分享应用的时候分享的时Base.apk。
- 解释2(自己的拙见)这里的Base.apk其实起的是一个引导作用,就像HAP解压出来也有.apk文件一样。毕竟至少在虚拟手机层面,是有一个Android运行时存在的,整个HAP还是由Android Runtime加载并运行的。
关于鸿蒙版应用使用Dynamic Ability解决方案的佐证:
华为应用市场的应用与系统信息软件可以提取出鸿蒙软件hap包。鸿蒙软件拆包可以看到很多hap包和一个很小的.apk包。.apk包包含软件基本信息,用于和安卓系统交换数据。
这是带鱼大佬第一篇没有加两个字前缀的文章。