android的apk文件结构
什么是APK?APK文件都由那些组成?不懂没关系,让小编来为你详细解答。
一、APK简介与描述
APK是AndroidPackage的缩写,即Android安装包(apk)。APK是类似Symbian Sis或Sisx的文件格式。通过将APK文件直接
传到Android模拟器或Android手机中执行即可安装。apk文件和sis一样,把 android sdk编译的工程打包成一个安装程序文件,
格式为apk。APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是Dalvik VM executes
的全称,即Android Dalvik执行程序,并非Java ME的字节码而是Dalvik字节码。在Android平台中dalvik vm的执行文件被打包
为apk格式,最终运行时加载器会解压然后获取编译后的androidmanifest.xml文件中的permission分支相关的安全访问,但仍然
存在很多安全限制,如果你将apk文件传到/system/app文件夹下会发现执行是不受限制的。安装的文件可能不是这个文件夹,而
在android rom中系统的apk文件默认会放入这个文件夹,它们拥有着root权限。
二、APK的文件结构
1. META-INF\ (注:Jar文件中常可以看到);
2. res\ (注:存放资源文件的目录) ;
3. AndroidManifest xml (注:程序全局配置文件) ;
4. classes dex (注:Dalvik字节码);
5. resources arsc (注:编译后的二进制资源文件)。
接下来挨个介绍下apk中个文件及目录的内容和作用吧,一下资料来源于网络和官方文档当然还有个人理解。
AndroidManifest.xml
该文件是每个应用都必须定义和包含的,它描述了应用的名字、版本、权限、引用的库文件等等信息[ , ],如要把apk上
传到Google Market上,也要对这个xml做一些配置。在apk中的AndroidManifest.xml是经过压缩的,可以通过AXMLPrinter2工
具 [ , ]解开,具体命令为:java -jar AXMLPrinter2.jar AndroidManifest.xml
META-INF目录
META-INF目录下存放的是签名信息,用来保证apk包的完整性和系统的安全。在eclipse编译生成一个apk包时,会对所有
要打包的文件做一个 校验计算,并把计算结果放在META-INF目录下。这就保证了apk包里的文件不能被随意替换。比如拿到一
个apk包后,如果想要替换里面的一幅图片, 一段代码, 或一段版权信息,想直接解压缩、替换再重新打包,基本是不可能
的。如此一来就给病毒感染和恶意修改增加了难度,有助于保护系统的安全。
res目录
res目录存放资源文件。包括图片,字符串等等。
lib目录
lib目录下的子目录armeabi存放的是一些so文件。这个地方多讲几句,都是在开发过程中摸索出来的。eclipse在打包的
时候会根据文件名的命 名规则(lib****.so)去打包so文件,开头和结尾必须分别为“lib”和“.so”,否则是不会打包到apk文
件中的。其他非eclipse开 发环境没有测试过。如果你是用SDK和NDK开发的话,这部分很重要,甚至可以通过把一些不是so文
件的文件通过改名打包到apk中,具体能干些什么那就 看你想干什么了,呵呵呵!
assets目录
assets目录可以存放一些配置文件,这些文件的内容在程序运行过程中可以通过相关的API获得。具体的方法可以参考一个
在SDK中的例子:在sdk的 \SDK\1.6\android-sdk-windows-1.6_r1\platforms\android-1.6\samples\ApiDemos 例子中,有个
com.example..android.apis.content 的例子,在这个例子中他把一个text文件放到工程的asset目录下,然后把这个txt当作
普通文件处理。处理的过程在ReadAsset.java 中。同理,asset也可以放置其他文件。
classes.dex文件
classes.dex 是java源码编译后生成的java字节码文件(首先是java文件通过jdk编译成字节码文件然后经过dex后编译成
classes.dex)。但由于Android使用的dalvik虚拟机与标准的java虚拟机是不兼容的,dex文件与class文件相比,不论是文件
结构还是 opcode 都不一样。目前常见的java反编译工具都不能处理dex文件。Android模拟器中提供了一个dex文件的反编译
工具,dexdump。用法为首先启动Android模拟器,把要查看的dex文件用adb push上传的模拟器中,然后通过adb shell登录,
找到要查看的dex文件,执行dexdump xxx.dex。另,有人介绍到Dedexer是目前在网上能找到的唯一一个反编译dex文件的开源
工具,需要自己编译源代码。
resources.arsc
编译后的二进制资源文件的索引(apk文件的资源表(索引))
上面这些资源最后通过aapt这个工具打包成apk,其实当生成apk的时候就会调用这个命令
android的apk文件结构的更多相关文章
- Android逆向基础----APK文件结构
参考这个博客 http://www.cnblogs.com/wangtianxj/archive/2010/06/13/1757639.html http://blog.csdn.net/bupt07 ...
- Android测试(一)——Apk文件结构以及Android组件介绍
APK文件结构: assests目录:一般存放的是不会被编译处理的文件,一般是资源性质的文件或者配置文件: libs目录:程序依赖的native库,包含针对特定处理器软件层的编译代码: res目录:存 ...
- APK文件结构和安装过程
APK文件结构Android应用是用Java编写的,利用Android SDK编译代码,并且把所有的数据和资源文件打包成一个APK (Android Package)文件,这是一个后缀名为.apk的压 ...
- 将HTML5封装成android应用APK文件的几种方法
越来越多的开发者热衷于使用html5+JavaScript开发移动Web App.不过,HTML5 Web APP的出现能否在未来取代移动应用,就目前来说,还是个未知数.一方面,用户在使用习惯上,不喜 ...
- Android 天猫apk聊天数据库解密
1.使用Android 天猫apk 进行聊天会产生tmallWangXinDB的数据库.2.用sqlite3 工具打开提示加密或者错误.3.需要对该数据库进行解密. 解密流程:1.反编译apk,dex ...
- 将HTML5封装成android应用APK文件的几种方法(转载)
越来越多的开发者热衷于使用html5+JavaScript开发移动Web App.不过,HTML5 Web APP的出现能否在未来取代移动应用,就目前来说,还是个未知数.一方面,用户在使用习惯上,不喜 ...
- Android获取APK包名的几种方法
Android获取APK包名的几种方法:1.adb shell pm list package -f | findstr 关键字 #只能获取到包名,主Activity名无法获取到 2.使用aapt-- ...
- 将HTML5封装成android应用APK文件的几种方法(转)
作为下一代的网页语言,HTML5拥有很多让人期待已久的新特性.HTML5的优势之一在于能够实现跨平台游戏编码移植,现在已经有很多公司在移动 设备上使用HTML5技术.随着HTML5跨平台支持的不断增强 ...
- Android文件Apk下载变ZIP压缩包解决方案
[root@ conf]# pwd /alidata/server/nginx/conf [root@ conf]# vi mime.types application/vnd.android.pac ...
随机推荐
- Linux下常用压缩 解压命令与压缩比率对比
常用的格式有:tar, tar.gz(tgz), tar.bz2, 不同方式,压缩和解压方式所耗CPU时间和压缩比率也差异也比较大. 1. tar只是打包动作,相当于归档处理,不做压缩:解压也一样,只 ...
- redis数据库的安装配置
redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统.和Memcached类似,但很大程度补偿了memcached的不足,它支持存储的value类型相对更多,包括strin ...
- html之table&select不为人知的操作
table标签和其它标签不一样,他有属性和方法! table属性: rows 可以得到table的row集合 cells 得到table所有单元格 table方法: insertR ...
- 一个操作轻松截取长图,Win10上网截长图小技巧!
截屏的方法有很多,但是有时候我们会遇到比电脑屏幕还大的图,比如网站上的长图.N条引用的评论...你要怎么截取呢?是不是最多只能截全屏?还是要做到第三方的截图软件呢? 下面介绍一种win10电脑自带的滚 ...
- hdoj 1237 模拟
计算器 Problem Description 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. Input 测试输入包含若干测试用例,每个测试用例占一行,每行不超过 ...
- Too many parameters: expected 1, was given 2 Query: SELECT count(id) FROM `user` WHERE username = ?; Parameters: [org.apache.commons.dbutils.handlers.ScalarHandler@453da22c, [李明]]
public Object getValue(String sql,Object... args) { Connection conn = null; Object obj= null; try { ...
- spark练习---ip匹配以及广播的特性
今天,我们还是在介绍spark的小练习,这次的小练习还是基于IP相关的操作,我们可以先看一下今天的需求,我们有两个文件, 第一个文件,是IP的字典,也就是我们上一篇介绍过的,就是表明了所有IP字段所属 ...
- Python文章推荐1
Table of Contents 1. 分享最近看到的python相关的几篇好文(我只是想偷懒) 1.1. 形象解释了什么是GIL 1.2. 知乎上 Pythonic 相关 1.3. evil &q ...
- 1079: [SCOI2008]着色方案
链接 思路 首先是dp,如果直接用每个种颜色的剩余个数做状态的话,复杂度为5^15. 由于c<=5,所以用剩余数量的颜色的种类数做状态:f[a][b][c][d][e][last]表示剩余数量为 ...
- Android stadio butternife工具
http://www.androidchina.net/5068.html svn今天我对它有了更深的认识.我知道了有冲突了不能提交.但是可以update,updata之后就会有冲突的东西生成,如果你 ...