Android安装的时候系统都做了些什么

引言:

一个APK文件就是一个压缩包,可以想压缩包一样解压打包。

Android是Liunx系统的,

使用过的文件系统可能因制造商或Android版本不同,新版本的使用ext3文件系统。三星使用的是自己的文件系统RFS。

Android里面最重要的一个概念就是沙箱。

编译程序
Java文件会怎么编译
1.Java文件会正常通过Java JVM编译成.class文件
2.dx工具把.class文件编译成Dalvik虚拟机运行的格式。
这个特殊的java格式文件通过DVM(Dalvik Virtual Machine)运行,一个通过开源的JRE实现的

更新
在更新的安卓中,当使用jack的时候转换步骤可以跳过,这种方式中java文件被编译成dx格式。
自从 4.4(KitKat)Android就已经有新的ART runtime ,在Android 5 (Lollipop)正式替换Dalvik Virtual。

Asset目录安装的时候会怎么样?

Android提供Assets是为了添加一些二进制的文件的,比如数据库之类的,文件会直接放到目录下,不会经过编译或者优化。
不要随便把文件放在这个目录下,要正确使用。

/res/raw在安装的时候会发生什么?

就像Assets目录一样,你可以放二进制文件(Html文件/帮助文件),这些文件会被编译优化,如果可能的话。

Manifest文件其他的XML文件会怎么样。

都会被存储编译成二进制的XML格式,进行过优化的。

沙箱

从Android OS来看,单个程序的特征:

  • 自己的进程
  • 有单独用户 Like Liunx
  • 单独的虚拟机
  • 在堆中分配内存
  • 文件系统中有指定的地址

每个Android的APP都限定有权限用户才能访问APP的内部的存储空间。(被标准的Liunx系统的权限管理保护)有自己的DVM进程,不能被外部进程访问。
如果要程序有从沙箱访问外部的功能,需要在配置文件中声明权限。

安装的时候的步骤

1.程序创建的时候会创建新的用户
2.程序创建的时候会给新用户访问内部存储的权限
3.apk文件会被解压到这个内部的文件夹下
4.Android-Manifest配置文件会被解析,并且里面的intnet-filter的生命会被系统注册。
5.现在程序安装好了,可以启动了。、

APK解压之后各种文件在什么位置上。
当你安装一个app的时候,系统会复制apk到/data/app文件夹下,并且用包名跟安装次数去命名。
我尝试手动安装一个app,复制粘贴APk文件到/data/app文件夹下,并发重启设备我发现它就像一个安装的app一样工作的很好。
任何安装的APP都有以下特征
1.APK文件在/data/app/package-number.apk
2.dex文件在data/dalvik-cache/data@[email protected]@class.dex
3.lib文件在/data/data/packagelib文件下
4.data在/data/data/package文件下
5.cache在/data/data/package/cache文件下

你可能感兴趣的:(android)