APK安装卸载过程简介

APK打包过程:
1.javac工具将*.java文件进行转换,转换后通常得到一个*.class文件;
2.dx工具对*.class文件进行转换,转换后通常得到一个*.dex文件;
3.通过aapt工具打包所有的资源文件打包得到*.ap_文件;
4.通过apkbuilder工具把前两步得到的*.dex、*.ap_文件打包生成apk。
注:dx、aapt工具均在D:\xxx\android-sdk-windows\build-tools\xxx\目录下
aapt dump badging C:\Users\zqh\Desktop\shouqianbapos.apk  >sodino.txt  查看 AndroidManifest.xml 相关版本号信息

APK的打包,签名,验证和安装卸载机制
apk编译过程总体概述
1)编译资源文件,生成R.java文件
2)编译AIDL文件(包含java静态库文件),生成相应的.java文件
3)编译java源文件,生成.class文件
4)将.class转换为dex文件
5)编译资源文件,生成.ap_包
6)将dex文件添加到apk包
7)将JNI动态库添加到apk包中
8)对apk文件进行签名
9)对apk包的存储优化

安装方式:
1.系统安装:开机的时候,没有安装界面.
2.adb 命令安装:通过abd命令行安装,没有安装界面(adb install /pm install )
3.应用市场安装,这个要视应用的权限,有系统的权限无安装界面(例如MUI的小米应用商店)
4.第三方安装,有安装界面,通过 packageinstaller.apk来处理安装及卸载的过程的界面

应用安装涉及到的目录:
/system/app:系统自带的应用程序,获得adb root 权限才能删除
/data/app:用户程序安装的目录.安装时把apk文件复制到此目录
/data/data:存放应用程序的数据
/data/dalvik-cache:将apk中的dex文件安装到dalvik-cache目录下(dex文件是dalvik虚拟机的可执行文件,当然,ART模式的可执行文件格式为.aot,启动ART时,系统会执行dex文件转换至aot文件)

/data/system目录:
(1)packages.xml文件.类似于Window的注册表,该文件是解析apk时由writeLP()创建的,记录了系统的permissons,以及解析apk的AndroidManifest获取的应用name,codePath,flag,ts,version,userid等信息,解析完apk后将更新信息写入这个文件并保存到flash,下次开机的时候直接从里面读取相关信息并添加到内存相关列表中.当有apk升级,安装或删除时会更新这个文件。

(2)package.list:指定应用的默认存储位置/data/data/com.xx.xx;package.xml中包含了该应用申请的权限,签名和代码所在的位置等信息系,并且两者都有同一个userld.

每个应用都要一个userId的原因?
因为Android在系统设计上把每个应用当做Linux系统上的一个用户对待,这样就可以利用已有的Linux用户管理机制来设计Android应用,比如应用目录/应用权限/应用进程管理等.

APK反编译及解压 
1. http://blog.csdn.net/chenrunhua/article/details/41250613 APK反编译之一:基础知识--smali文件阅读
2. http://blog.csdn.net/u012573920/article/details/44034397 Smali和逆向分析   

反编译目录:
assets
lib --------------- so库存放位置,一般由NDK编译得到
original
res
smali ------------- smali就是Dalvik VM内部执行的核心代码 
unknown
AndroidManifest.xml
apktool.yml -------- 代表对程序的反编译成功

其中:
original--文件夹
1.MANIFEST.MF:这是摘要文件.程序遍历Apk包中的所有文件(entry),对非文件夹非签名文件的文件,逐个用SHA1生成摘要信息,再用Base64进行编码.
如果你改变了apk包中的文件,那么在apk安装校验时,改变后的文件摘要信息与MANIFEST.MF的检验信息不同,于是程序就不能成功安装.
2.CERT.SF:这是对摘要的签名文件.对前一步生成的MANIFEST.MF,使用SHA1-RSA算法,用开发者的私钥进行签名.在安装时只能使用公钥才能解密它.
解密之后,将它与未加密的摘要信息(即,MANIFEST.MF文件)进行对比,如果相符,则表明内容没有被异常修改.
3.CERT.RSA:文件中保存了公钥、所采用的加密算法等信息.系统对签名文件进行解密,所需要的公钥就是从这个文件里取出来的.
这三个文件在apk META-INF文件夹

解压目录:
assets
lib
META-INF------------<存放工程一些属性文件,例如Manifest.MF>--安全校验文件
res
classes.dex-------------Java代码编译得到的Dalvik VM能直接执行的文件
AndroidManifest.xml
resources.arsc--------------- 对res目录下的资源的一个索引文件,保存了原工程中strings.xml等文件内容

App打包、签名、验证和安装机制(Gradle打包机制)
安装过程:将app复制到data/app目录下,扫描并解压安装包,并把dex文件(DVM字节码)保存到dalvik-cache目录,并最终在data/data目录下创建对应的应用数据目录.
解析apk的AndroidManifest.xml文件,第四步:显示快捷方式
卸载过程就是:删除在创建过程中三个路径下产生的文件夹。

卸载过程:
(1)从PMS的内部结构上删除Activity,Service,Provider等信息
(2)更新Settings里面的package信息
(3)删除code,resource信息
(4)删除dex文件
卸载时调用deletePackage()方法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值