APK打包过程:
1.javac工具将*.java文件进行转换,转换后通常得到一个*.class文件;
2.dx工具对*.class文件进行转换,转换后通常得到一个*.dex文件;
3.通过aapt工具打包所有的资源文件打包得到*.ap_文件;
4.通过apkbuilder工具把前两步得到的*.dex、*.ap_文件打包生成apk。
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应用,比如应用目录/应用权限/应用进程管理等.
原文链接:https://blog.csdn.net/hanfengzqh/article/details/82790896
网友评论