APK安装包的内容及其安装过程原理详解
来源:互联网 发布:音质linux优于Windows 编辑:程序博客网 时间:2024/05/07 15:11
APK是Android Package的缩写,即Android application package文件或Android安装包。每个要安装到Android平台的应用都要被编译打包为一个单独的文件,扩展名为 .apk。APK文件是用专业软件eclipse编译生成的文件包,其中包含了应用的二进制代码、资源、配置文件等。通过将APK文件直接传到Android手机中执行即可安装。APK文件其实就是zip格式,但其扩展名被改为apk,在Windows下用解压软件WinRAR/WinZIP/7-Zip可以直接打开。解压后,你会看到有几个文件和文件夹。一个典型的APK文件通常有下列内容组成:
AndroidManifest.xml 程序全局配置文件
classes.dex Dalvik字节码
resources.arsc 编译后的二进制资源文件
META-INF\ 该目录下存放的是签名信息
res\ 该目录存放资源文件
assets\ 该目录可以存放一些配置文件
下面对这些文件和目录做些基本的注释和介绍:
1、AndroidManifest.xml
该文件是每个apk应用程序都必须包含的文件,它描述了应用程序的名字、版本、权限、引用的库文件等等信息。
2、classes.dex文件
classes.dex是java源码编译后生成的java字节码文件。dex是Dalvik VM executes的全称,即Android Dalvik执行程序。利用解析工具可以将其转换成java来加以阅读和理解。
3、resources.arsc
编译后的二进制资源文件。在做主题美化时要常与这个文件打交道。
4、META-INF目录
META-INF目录下存放的是签名信息,有三个签名文件,用来保证apk包的完整性和系统的安全。在eclipse编译生成一个apk包时,会对所有要打包的文件做一个校验计算,并把计算结果放在META-INF目录下。这就保证了apk包里的文件不能被随意替换。比如拿到一个apk包后,如果想要替换里面的一幅图片,一段代码, 或一段版权信息,想直接解压缩、替换再重新打包,基本是不可能的。如此一来就给病毒感染和恶意修改增加了难度,有助于保护系统的安全。
5.res目录
res目录存放资源文件。包括图片,字符串等等。res下有若干个子目录,主要为drawable,layout,xml。
解包后,几乎所有可能的修改和编辑工作基本都在这里。汉化ROM的主要工作就在这里。汉化ROM实际上就是汉化所有的apk应用程序的字符文件。
6、assets目录
assets目录可以存放一些配置文件,这些文件的内容在程序运行过程中可以通过相关的API获得。
下面以“设置”应用程序Settings.apk为例。用WinRAR打开文件后,看到以上介绍的六项内容。现在,即使你已经对文件解压,你还是无法直接阅读每个文件的内容。为了读出这些文件的内容,从而进行进一步的修改和编辑,你就必须具有相应的工具了。
二、packagelnstaller原理简述
应用安装是智能机的主要特点,即用户可以把各种应用(如游戏等)安装到手机上,并可以对其进行卸载等管理*作。APK是Android Package的缩写,即Android安装包。APK是类似Symbian Sis或Sisx的文件格式。通过将APK文件直接传到Android模拟器或Android手机中执行即可安装。
Android应用安装有如下四种方式
1.系统应用安装――开机时完成,没有安装界面
2.网络下载应用安装――通过market应用完成,没有安装界面
3.ADB工具安装――没有安装界面。
4.第三方应用安装――通过SD卡里的APK文件安装,有安装界面,由packageinstaller.apk应用处理安装及卸载过程的界面。
应用安装的流程及路径应用安装涉及到如下几个目录:
system/app:系统自带的应用程序,无法删除。
data/app :用户程序安装的目录,有删除权限。安装时把APK文件复制到此目录。
data/data :存放应用程序的数据。
data/dalvik-calche:将APK中的dex文件安装到此目录下。(dex为dalvik虚拟机的可执行文件)
安装过程:复制APK安装包到data/app目录下,解压并扫描安装包,把dex文件(Dalvik字节码)保存到dalvik-cache目录,并data/data目录下创建对应的应用数据目录。
卸载过程:删除安装过程中在上述三个目录下创建的文件及目录。
PackageManagerService处理各种应用的安装,卸载,管理等工作,开机时由systemServer启动此服务
(源文件路径:android\frameworks\base\services\java\com\android\server\PackageManagerService.java)
PackageManagerService服务启动的流程:
1.首先扫描安装“system\framework”目录下的jar包
1.scanDirLI(mFrameworkDir,PackageParser.PARSE_IS_SYSTEM,scanMode | SCAN_NO_DEX);
2.第二步扫描安装“system\app”目录下的各个系统应用
scanDirLI(mSystemAppDir,PackageParser.PARSE_IS_SYSTEM, scanMode);
3.第三步扫描“data\app”目录,即用户安装的第三方应用
scanDirLI(mAppInstallDir, 0, scanMode);
4.第四步扫描" data\app-private"目录,即安装DRM保护的APK文件(目前没有遇到过此类的应用)。
scanDirLI(mDrmAppPrivateInstallDir,0, scanMode | SCAN_FORWARD_LOCKED);
- APK安装包的内容及其安装过程原理详解
- APK的安装过程及原理详解
- 【原理】Apk的安装过程
- APK安装过程及原理详解
- APK安装过程及原理详解
- APK安装过程及原理详解
- APK安装过程及原理详解
- APK安装过程及原理详解
- APK安装过程及原理详解
- APK安装过程及原理详解 【转】
- APK安装过程及原理详解
- APK安装过程及原理详解 【转】
- APK安装过程及原理详解
- APK安装过程及原理详解
- APK安装过程及原理详解
- APK安装过程及原理详解
- APK安装过程及原理详解
- APK安装过程及原理详解
- hdu 3732
- 6,少年白_因为我还小
- 初次使用GTK
- Zend Studio10.0 添加SVN project
- uva 11205
- APK安装包的内容及其安装过程原理详解
- HDU 4632 Palindrome subsequence(区间合并动态规划)
- linux下修改进程打开文件数限制
- 查询sql数据库中表占用的空间大小
- 内存管理4Aotorelease自动引用计数
- 两个文件内容匹配
- 【xtku】熟知idown万用下载器的使用办法
- PHP:使用PHPExcel完成电子表格文件的导出下载和导入操作
- JavaScript事件监听匿名函数的this问题