![App安全实战指南:Android和iOS App的安全攻防与合规](https://wfqqreader-1252317822.image.myqcloud.com/cover/239/52152239/b_52152239.jpg)
1.2 移动应用的安装
1.2.1 Android应用安装
Android应用的安装包本质是后缀为.apk的压缩包,里面包含了应用运行时所需的资源和依赖库等。程序安装就是把压缩包中的文件和依赖库资源复制到系统的相应目录中,然后在桌面创建应用图标。那么,Android应用的具体安装过程是怎样的呢?本小节将为大家详细讲解。
Android应用安装时可能涉及的系统目录及其如表1-4所示。
表1-4 Android应用安装时可能涉及的系统目录及其作用
![](https://epubservercos.yuewen.com/32C299/30861800407954706/epubprivate/OEBPS/Images/0021-02.jpg?sign=1738981151-qyVM7IZJ2NiYxeO0MmkBlva04rTGExAw-0-7a3eb7ad2e0ff91fec2272dba9934294)
(续)
![](https://epubservercos.yuewen.com/32C299/30861800407954706/epubprivate/OEBPS/Images/0022-01.jpg?sign=1738981151-Qzs5I9wXVP0Kfok0cjJYXZa6bYPuhRq4-0-834485b06cad9d3b20bad937af2c74ea)
应用安装时系统默认将其安装到/data/data目录,如果想将应用安装到SD卡中,则可以在应用的配置文件AndroidManifest中增加android:installLocation属性,并将该属性的值设置为preferExternal或auto。具体代码如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:installLocation="preferExternal"
...>
Android系统为普通用户提供了3种应用安装途径:通过应用商店安装,通过系统中已安装的应用下载安装,通过ADB工具使用命令行的方式安装。这3种安装方式虽然最开始的调用方式不同,但最终都是由PackageManagerService服务进行处理的。
应用安装流程可以分为以下5步。
第一步:应用安装时通过DefaultContainerService将自身复制至/data/app/package/目录中,动态库则复制至/data/app/package/lib/目录中。如果系统是Android 6.0及以上版本,则将应用中的DEX文件复制至“/data/app/应用包名/oat/”目录中,并进行优化处理。Android 6.0以下版本系统会将应用中的DEX文件复制至/data/dalvik-cache目录中。
第二步:解析安装包中的资源文件进行签名校验,将从AndroidManifest.xml文件中读取的应用信息写入/data/system/packages.xml文件。
第三步:在/data/data/package/目录中创建所需的数据目录,并将应用数据复制至相关目录中。
第四步:将AndroidManifest.xml文件中声明的组件信息注册到PackageManagerService。
第五步:通过Launcher应用将应用图标添加至桌面,至此完成应用安装。随后系统会发送一条应用完成安装的广播。
具体安装流程如图1-15所示。
![](https://epubservercos.yuewen.com/32C299/30861800407954706/epubprivate/OEBPS/Images/0022-02.jpg?sign=1738981151-PgxIrdR5NLVscMz8G5gsHf8LTqRx3QWv-0-f19be932198d326b7fe8307f2ca6bb8a)
图1-15 Android应用安装流程
1.2.2 iOS应用安装
iOS应用的安装文件后缀为.ipa。相对于Android系统来说,iOS系统是封闭的,开发者无法像在Android系统中一样随意安装应用。不过iOS应用的安装文件本质上也是一个压缩文件,里面包含了应用运行时所需的资源和依赖库等。同Android应用的安装过程类似,iOS也是把压缩包中的数据和依赖库复制到相应目录中,然后在桌面创建应用图标。
iOS应用安装时通常会涉及4个文件目录:Documents、Library、tmp和应用的安装目录AppName.app。文件目录及其作用如表1-5所示。
表1-5 iOS应用安装时涉及的文件目录和作用
![](https://epubservercos.yuewen.com/32C299/30861800407954706/epubprivate/OEBPS/Images/0023-01.jpg?sign=1738981151-pRFaXcb9Y2X1aWhqjbWisr4jcxgu1bQz-0-a7089082f9badbf0c387a7e2fd0a7201)
iOS系统提供了3种应用安装途径:App Store安装、TestFlight安装和itemServices协议安装。除了最开始的调用方式不同外,这3种安装方式最终都是由系统的安装服务进行处理的。
App Store和TestFlight都是苹果官方的应用分发平台,不同之处在于App Store用于正式应用的分发,而TestFlight是苹果提供给开发者用于内测的分发平台。不是每个用户都有权使用TestFlight安装应用,需要开发者先发出测试邀请才可以。建议安装应用时首先考虑使用App Store方案。通过App Store安装iOS应用的流程如图1-16所示。
![](https://epubservercos.yuewen.com/32C299/30861800407954706/epubprivate/OEBPS/Images/0023-02.jpg?sign=1738981151-sRuwBzpBNPjXzFicLkbkBO25PheIRpoI-0-1d258524eed14c4c8ffbb037f3fc9052)
图1-16 通过App Store安装iOS应用的流程
itemServices是苹果公司推出的一种协议。基于此协议,开发者可以建立自己的企业版应用的分发平台,绕过在App Store上架的限制。使用itemServices配合plist文件构造一个网页,用户使用浏览器打开该页面便可下载并安装应用。具体示例如下:
<!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>
使用此方式安装应用,用户在第一次打开应用时需要手动选择信任应用开发者的企业证书,否则该应用将无法通过苹果的安全校验,也就无法正常运行,如图1-17所示。
![](https://epubservercos.yuewen.com/32C299/30861800407954706/epubprivate/OEBPS/Images/0024-01.jpg?sign=1738981151-dFu9vJguY1SdTc0wexituvqmJYruMRAM-0-196e1a86ca5a67bdc65252492e5e0ddb)
图1-17 信任企业证书
通过itemServices协议安装iOS应用的流程如图1-18所示。
![](https://epubservercos.yuewen.com/32C299/30861800407954706/epubprivate/OEBPS/Images/0024-02.jpg?sign=1738981151-AWv49DVTBB7XRpdohjfG3TWazh43smhw-0-5fe16dc538296dfa0d3b2d56488bfe73)
图1-18 通过itemServices协议安装iOS应用的流程