adb 命令
- adb install 路径
安装apk - adb devices
显示当前连接设备 - adb shell dumpsys activity top
获取顶层活动activity信息 - adb shell dumpsys 包名
获取包相关信息 - abd shell dumpsys meminfo 包名/pid
获取内存数据 - abd shell dumpsys dbinfo
获取数据库相关文件 - adb shell pm list packages
列出已安装的所有程序包 - adb shell pm path 包名
输出指定包的路径
apk安装过程
- 将apk复制到data/app文件夹下并且解压并扫描安装包
- 将dex文件复制到data/dalvik-cache 目录下
- 在data/data目录下创建对应的应用数据目录
apk卸载过程
将安装过程创建的东西依次删除
关于卸载比删除快的原因
安装是一个解压扫描并且往硬盘写入数据的过程,而卸载只需要将指定硬盘内存区域标识为可以填充数据,并不会将刚刚使用的硬盘区域全部写为0。这也是文件可以恢复的一个原因。
关于ODEX文件
将apk中的dex文件使用dex优化过程,将其优化为一个.odex文件单独存放,这样可以提高app打开的速度,减少对ARM的占用(否则系统每次都要从apk中提取dex文件)。
三种虚拟机
java虚拟机
java虚拟机是运行java字节码,java程序编译后生成的Java字节码保存在class文件中,java虚拟机通过解码class文件来运行程序。
java虚拟机基于栈结构,虚拟机需要频繁的从栈上读写数据,需要更多的指令分派与内存访问次数,这个过程耗费较多的cpu时间。
dalvik虚拟机
基于jit机制(just in time 即时编译技术)主要用于Android 5.0 以下。dalvik虚拟机运行dalvik字节码,dalvik字节码由java字节码转化而来,并且打包到一个DEX文件中。
java编译后形成class文件并压缩为jar包,jar包的所有类共用同一个常量池,进一步压缩形成dex文件。
dalvik虚拟机基于寄存器架构,数据的访问通过寄存器直接访问。
.dex文件被工具dexopt优化后生成.odex文件,dalvik直接加载执行该文件。
art虚拟机
基于aot机制(ahead of time 预编译技术)运行本地机器码。
dex文件被工具dex2oat优化后生成oat文件,art虚拟机加载执行oat文件。