Android系统中APP安装到手机后的文件分析

一. Android系统APP安装格式

1.1 CAB格式

      直接将文件copy到手机里,都可以在手机上执行该CAB文件即可安装。

1.2 EXE格式

      EXE格式的程序可分为手机上直接运行(即绿色软件的形式)和连接电脑同步安装2种形式。

1.3 免安装软件(绿色软件)

      将文件直接拷贝到手机里(手机内存、Storage Card都可以)即可运行。这种软件在网上下载时一般是RAR或ZIP格式压缩包,只需先在电脑上解压,将解压出来的文件夹拷贝到手机里即可运行。

1.4 Cpl文件

       将文件直接拷贝到手机windows目录下,即可在设置中出现相应的选项。如SoftKeyAppleEx.cpl对应会出现软件设置选项。

二. Android系统APP安装涉及目录

2.1 system/app

扫描二维码关注公众号,回复: 8963655 查看本文章

     系统自带的应用程序目录,无法删除;若删除后,注意可能造成系统崩溃,不过有的垃圾捆绑软件只能这么删除了。

2.2 data/app

      用户应用程序安装的目录,有删除权限,安装应用程序时会把apk文件复制到此目录。

2.3 data/data

     此处存放应用程序的数据。

2.4 data/dalvik-cache

     将apk中的dex文件安装到dalvik-cache目录下(dex文件是dalvik虚拟机的可执行文件,其大小约为原始apk文件大小的四分之一)。

三. Android 系统APP安装过程

      安卓系统会复制APK安装包到data/app目录下,解压并扫描安装包,把dex文件(Dalvik字节码)保存到dalvik-cache目录,并在data/data目录下创建对应的应用数据目录。

四. Android 系统APP卸载过程

      APP卸载过程会删除在data/app、data/data、data/dalvik-cache三个目录下创建的文件及目录。

五. Android系统APP包含文件分析

      APP安装包是个apk文件,可将其扩展名改为zip;解压后会看到如下图所示的文件及文件夹:

5.1 /assets

      通常这个文件夹里存放的是一些静态文件,比如说明文档或者字体文件,以上图app安装包为例,它的/assets目录下有个名为fonts的子目录,打开它,我们可以看到两个ttf格式的字体文件。

 

 

        当然了,不同类型应用的安装包,它/assets里面包含的资源也是不同的,比如有些浏览器应用的/assets目录下有很多html格式的文件,这些文件用浏览器可以直接打开。

5.2 /META-INF

      通常这个文件夹里存放的是安装包的签名证书和安装包中所有文件哈希值的计算结果。应用程序的安装包在打包的时候,每个文件都会经过校验计算,计算结果就存放在/META-INF里,可以直接使用文本编辑器来打开后缀名为MF和SF的记录这些文件校验计算结果的文件。

       在安装一个应用的时候,系统会首先根据/META-INF里的文件校验结果来核实安装包中文件的正确性和完整性,目的是确保安全,避免用户安装到遭受过病毒感染的或者被恶意篡改过的应用程序。

        这个文件夹下的RSA格式的文件是开发者对该应用程序进行签名的签名证书文件,若玩过塞班系统,那应该对这个词并不陌生,这也是为了保证应用程序和系统的安全,签名文件不是纯文本格式,不过当我们用文本编辑器打开它时,可以在乱码中零散地看到Microsoft Corporation字样。

 

5.3 /res

      res是resource的缩写,里面存放的是应用程序的资源文件,比如图片素材和布局文件,这个文件夹下有很多子目录:

      以anim开头的文件夹,通常里面存放的是应用程序的动画效果资源;

      以color开头的文件夹,通常里面存放的是应用程序的各种颜色值;

      以drawable开头的文件夹,通常里面存放的是应用程序的图片或图形资源;有些以drawable开头的文件夹在结尾会跟着诸如hdpi、xhdpi这样表示解析度的字符,目的是适配不同分辨率的屏幕;进入一个以drawable开头的文件夹,可以看到里面有png和webp格式的图片,其中,webp格式的图片可以用旗鱼浏览器打开:

      以layout开头的文件夹,通常里面存放的是应用程序的界面布局文件;

5.4 /AndroidManifest.xml

          AndroidManifest.xml是一个单独的文件,里面包含很多信息,比如应用程序的包名、数据权限、接口权限、版本信息、安装参数等等,另外,它还可以声明应用程序的每一个组件及其属性,声明应用程序所申请的权限、进程,声明显示模式等等,AndroidMainfest.xml里面包含的信息太多了;这是一个非常重要的文件,它的名称是固定的,不能随意修改。

5.5 classes.dex

         这是可在安卓的Dalvik虚拟机中直接运行的字节码,是由JAVA的源代码经过复杂的编译形成的,和传统的.class文件相比,dex文件的运行效率更高。

5.6 /lib

         通常这个文件夹中会存放一些应用程序依赖的库,一般以.so结尾。

 

 

发布了18 篇原创文章 · 获赞 10 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/csdn_zhangchunfeng/article/details/104157733