APK基础知识

一、APK文件结构

1.先把apk文件后缀修改为rar,使用压缩工具进行打开就能看到文件机构如下图所示

 

assets文件夹存放静态资源文件,如图片资源、json配置、二进制数据文件等;它与res/raw目录不同的是,assets目录支持任意深度的子目录,同时该目录下面的文件不会生成资源ID。

lib文件夹存放app用到的so文件,一些查壳工具会去遍历这个文件下的so文件,根据文件名判断是否进行了加固。

META-INF文件夹存放证书签名文件,MANIFEST.MF(摘要文件)内容是程序遍历APK包中所有文件,对非文件夹非签名文件的文件,逐个用SHA1生成摘要信息,再用Base64进行编码。如果APK包的文件被修改,再APK安装校验时,被修改的文件与MANIFEST.MF的校验信息不同,程序就无法安装。CERT.SF文件对生成的MANIFEST.MF文件利用SHA-RSA算法对开发者的私钥进行签名。在安装时只有公共密钥才能对其解密,解密后与未加密的摘要信息进行对比,如果相符则文件没有被修改;CETT.RSA文件保存公钥及加密算法信息。

res文件夹(如果显示r是资源加固形式) 存放应用的资源文件。

AndroidManifest.xml配置清单文件,android四大组件都在这里配置和声明。

classes.dex是应用程序的可执行文件包含了所有代码,一般只有一个dex;如果当前的方法个数超过65535就要进行分包,会有多个dex文件。可以通过反编译工具dex2jar转换成jar包,再通过jd-gui查看代码。

res文件夹存放需要aapt编译的资源,在资源索引表中会生成索引。

resources.arsc资源索引表,用来描述具有ID值的资源的配置信息。

二、APK打包流程

这里参考了Huang兄的《Android打包流程》流程图。

 

编译打包流程

  1. 使用aapt/aapt2编译资源文件生成resource.arsc和R.java
  2. 使用AIDL处理aidl文件,生成java文件
  3. 使用javac编译java文件,生成.class文件
  4. (proguard混淆如果有)使用DX/D8/R8处理class文件,生成最终需要的dex文件
  5. 使用Android NDK处理native代码生成.so文件
  6. 使用apkbuilder生成未签名的apk文件
  7. 使用apksigner对apk进行签名,生成签名后的apk文件
  8. 使用zipalign工具,对已签名的apk文件进行优化(只有v1签名才有这一步,v2签名的apk会在zipalign后签名被破坏)。

使用到的工具

  1. appt:Android资源打包工具
  2. aidl:Android接口描述语言转化工具
  3. javac:java编译器,生成.class文件
  4. dex:.class文件转.dex文件
  5. jarsigner:.jar文件签名工具
  6. zipalign:字节码对其工具

三、APK安装流程

安装过程

1.复制APK安装包到data/app目录下,解压并扫描安装包
2.不dex文件保存到dalvik-cache目录
3.data/data目录下创建对应的应用数据目录

涉及目录(可以使用MT管理工具进行查看)

1.system/app: 系统自动的应用程序,获得adb root权限才能删除
2.data/app: 用户程序安装的目录,安装时把apk文件复制到此目录
3.data/data: 存放应用程序的数据
4.data/dalvik-cache: 将apk中的dex文件安装到data/dalvik-cache目录下
5.data/system/packages.xml记录所有安装应用的应用信息

四、APK卸载流程

删除data/app、dalvik-cache、data/data三个目录下创建的文件夹及文件

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值