Apk打包和安装流程

.apk文件的组成

apk文件其实就是个压缩包,里面包含:

打包流程

  1. aapt编译打包资源文件,生成R.java
    1. 编译AndroidManifest成二进制;
    2. 编译layout等xml文件,生成R.java,和resource.arsc文件。
  2. 处理aidl文件,生成对应的.java文件。
  3. java编译器(javac)编译项目源码,生成.class文件,位于bin/classes目录下;
  4. Android编译器使用dx工具整合所有的class文件生成classes.dex文件;
  5. apkbuilder打包生成apk;
  6. 对包签名;
  7. 对齐处理,将包中的资源文件距离文件起始偏移为4字节的整数倍,这样通过内存映射访问apk文件时可提高速度,减少运行时内存的使用。

安装流程

核心类:PMS(PackageManagerService)

  1. 复制apk到data/app目录下,解压并扫描安装包,把classes.dex文件保存到dalvik-cache目录,并再data/data目录下创建对应的应用数据目录;
  2. 解析AndroidManifinest,提取信息写入/data/system/packages.xml
  3. Launcher加载桌面图标;

APK安装方式

方式有无界面
系统应用
market应用下载
第三方下载
adb

反编译

流程

  1. 解压.apk
  2. 使用dex2jar将class.dex转为jar包
  3. 使用jd-gui反编译jar包

加固手段

dex文件结构

dex文件结构