关于“鸿蒙应用安装包是.apk”与“鸿蒙版应用体积小”的思考 原创 精华

Der_带鱼
发布于 2022-2-17 15:48
浏览
4收藏

【本文正在参与优质创作者激励】

引言

今天看到社区问答板块的一个问题引起了我的思考,在回答过程中内容越来越多,也就单独起了这一片文章进行一个讨论,发表一下自己的拙见。也希望大家在读完这篇文章后,会有所收获。

原问答地址

一、相关概念解析

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软件包->等待审核。若想学习如何改造详见:

京东APP鸿蒙版上架实践

6.【QA帖】第7期:分布式调度相关问题解答:

20. .hap文件解压后会有.apk文件的?

A:hap 和 apk 只是打包压缩格式。

7.社区博主的解析

再来深扒一下鸿蒙2.0Beta里的HAP如何运行

深入解析鸿蒙2.0手机Beta版的开发和设计

博主结论:鸿蒙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更新)

 关于“鸿蒙应用安装包是.apk”与“鸿蒙版应用体积小”的思考-鸿蒙开发者社区

9.App Bundle应用与Dynamic Ability解决方案

Dynamic Ability业务介绍

  • Dynamic Ability是AppGallery Connect(简称AGC)基于Android App Bundle技术实现的动态加载特性的一套解决方案,第三方应用通过集成Dynamic Ability SDK,可以在需要时动态从华为应用市场下载应用的某个特性或语言包,从而减少不必要的网络流量与终端设备存储空间消耗
  • 说明:此方案目前只支持客户端SDK-Android。且在使用说明中软件包选择必须选用“APK(Android应用)”。
  •  关于“鸿蒙应用安装包是.apk”与“鸿蒙版应用体积小”的思考-鸿蒙开发者社区

这个解决方案就回答了为什么鸿蒙版这些应用这么小的原因

二、相关实际验证

1.AGC现行项目创建实际情况:

创建应用软件包类型只有两个选项-APK,快应用**,添加应用平台**有五个选项。

 关于“鸿蒙应用安装包是.apk”与“鸿蒙版应用体积小”的思考-鸿蒙开发者社区

 关于“鸿蒙应用安装包是.apk”与“鸿蒙版应用体积小”的思考-鸿蒙开发者社区

2.夜神模拟器运行《微博极速鸿蒙版》

 关于“鸿蒙应用安装包是.apk”与“鸿蒙版应用体积小”的思考-鸿蒙开发者社区

 关于“鸿蒙应用安装包是.apk”与“鸿蒙版应用体积小”的思考-鸿蒙开发者社区

3.手机上验证与比对

设备名称:Honor V10

HarmonyOS版本:2.0.0

应用来源:华为应用商店

(1)应用商店的鸿蒙应用与其他应用的区别

  • 图片右下角有HMOS的标记
    •  关于“鸿蒙应用安装包是.apk”与“鸿蒙版应用体积小”的思考-鸿蒙开发者社区
  • 应用体积小
    •  关于“鸿蒙应用安装包是.apk”与“鸿蒙版应用体积小”的思考-鸿蒙开发者社区

(2)应用的详情比较

  • 微博

 关于“鸿蒙应用安装包是.apk”与“鸿蒙版应用体积小”的思考-鸿蒙开发者社区

  • 微博极速鸿蒙版

 关于“鸿蒙应用安装包是.apk”与“鸿蒙版应用体积小”的思考-鸿蒙开发者社区

关于文件类型: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

 关于“鸿蒙应用安装包是.apk”与“鸿蒙版应用体积小”的思考-鸿蒙开发者社区

 关于“鸿蒙应用安装包是.apk”与“鸿蒙版应用体积小”的思考-鸿蒙开发者社区

(2)创建Android应用

软件包类型:APK

 关于“鸿蒙应用安装包是.apk”与“鸿蒙版应用体积小”的思考-鸿蒙开发者社区

三、相关结论(请各位斧正)

(一)标注信息的格式的角度

(1)MIME类型:鸿蒙应用和其他应用无异,均是application/vnd.android.package-archive

(2)文件扩展名:《微博极速鸿蒙版》目前来看安装包的文件拓展名均是.apk

现在下载鸿蒙应用,长按图标是没有分享选项的

 关于“鸿蒙应用安装包是.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加载并运行的。

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2022-2-22 16:29:13修改
6
收藏 4
回复
举报
3条回复
按时间正序
/
按时间倒序
Der_带鱼
Der_带鱼

关于鸿蒙版应用使用Dynamic Ability解决方案的佐证:

2
回复
2022-2-17 15:56:25
严溪居士
严溪居士

华为应用市场的应用与系统信息软件可以提取出鸿蒙软件hap包。鸿蒙软件拆包可以看到很多hap包和一个很小的.apk包。.apk包包含软件基本信息,用于和安卓系统交换数据。

1
回复
2022-2-18 15:25:32
甜甜爱开发
甜甜爱开发

这是带鱼大佬第一篇没有加两个字前缀的文章。

回复
2022-2-21 15:16:57
回复
    相关推荐