-
-
[原创]移动应用安全与风控——应用的安装
-
发表于:
2023-5-29 13:57
23311
-
Android应用程序的安装包本质是后缀为apk的压缩包,里面包含了应用运行时所需的资源和依赖库等。程序安装就是把压缩包中的文件和依赖库资源拷贝到系统相应目录,然后在桌面创建应用图标。那么Android应用的具体安装过程是不是这样的呢?本节将为大家详细讲解。
应用安装过程中将会涉及到的目录,如下图所示:
应用安装是系统默认是将其安装到/data/data目录,如果想将应用安装到SDcard中,可以在应用的配置文件中AndroidManifest增加android:installLocation属性,将该属性的值设置为“preferExternal”或“auto”。具体如下所示:
应用安装流程可以分为六步:
第一步:应用安装时通过DefaultContainerService将自身拷贝至/data/app/package/目录中,动态库则拷贝至/data/app/package/lib/目录中。如果系统是Android6.0及以上的将应用中的dex文件拷贝至/data/app/应用包名/oat/目录,并进行优化处理。Android6.0以下将应用中的dex文件拷贝至/data/dalvik-cache目录,以便在应用程序启动时快速加载和执行。。
第二步:解析安装包中的资源文件进行签名校验,将AndroidManifest.xml文件中读取到的应用信息写入到/data/system/packages.xml文件。
第四步:在/data/data/package/目录中创建程序所需的数据目录,并将应用数据拷贝至相关目录中。
第五步:将AndroidManifest.xml文件中声明的组件信息注册到PackageManagerService。
第六步:通过Launch应用将应用图标添加至桌面,至此完成应用安装。通过系统发送应用完成安装广播。
具体安装流程可看下图:
iOS的安装文件后缀为ipa,相对Android系统来说iOS系统是封闭的,无法像Android一样随意安装应用。不过iOS的安装文件本质上也是一个压缩文件,里面包含了应用运行时所需的资源和依赖库等。同Android的安装的过程类似也是把压缩包中的数据和依赖库拷贝到相应目录,然后在桌面创建应用图标。
iOS的应用安装时通常会涉及到四个文件目录:Documents、Library、tmp和应用的安装目录AppName.app。文件目录所在位置和用处如下表
iOS系统提供了三种应用安装途径:App Store安装、TestFlight安装和itemServices协议安装。这三种安装方式除了最开始的调用方式不同外,最终都是由系统的安装服务进行安装处理。
App Store和TestFlight都是苹果官方的应用分发平台,不同之处在于App Store是用于正式应用的分发,TestFlight是苹果提供给开发者用于内测的分发平台,不是每个用户都有权使用TestFlight安装应用,需要开发者发出邀请才可以,建议安装应用时首先考虑使用App Store方案安装应用。通过App Store安装应用的流程如下所示:
itemServices是苹果推出的一种协议,基于此协议开发者可以建立自己的企业版应用的分发平台绕过上架App Store的限制。itemServices配合plist文件构造一个网页,用户使用浏览打开该页面便可下载安装应用,具体示例如下图所示:
使用此种方式安装应用在第一次打开时需要手动信任开发者的证书,否则应用将无法通过苹果的安全校验也就无法运行。
通过itemServices协议安装应用的流程如下图所示:
<manifest xmlns:android
=
"http://schemas.android.com/apk/res/android"
android:installLocation
=
"preferExternal"
... >
<manifest xmlns:android
=
"http://schemas.android.com/apk/res/android"
android:installLocation
=
"preferExternal"
... >
<!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.01 Transitional//EN"
>
<html>
<body>
<a href
=
'itms-services://?action=download-manifest&url=http://www.demo.com/demo.plist'
>Demo<
/
a>
<
/
body>
<
/
html>
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2023-10-9 20:09
被FIGHTING安编辑
,原因: