转载自 : http://www.theiter.com/2010/04/androidapk文件结构及打包技巧.html

apk文件,即Android application package文件。

每个要安装到Android平台的应用都要被编译打包为一个单独的文件,后缀名为.apk,其中包含了应用的二进制代码、资源、配置文件等。APK文件其实是zip格式,但后缀名被修改为apk,
在Android 系统安装时,APK 程序会被存放在系统默认的APP 目录中。

既然是一个Zip压缩包,那我们就不妨先解压出来看看其目录结构和内容,在我这我以NDK中的two-libs为例,以NDK为例,主要是要在本文中介绍SDK和NDK结合打包的方法。先看图:

其实这个目录结构与源代码的目录结构类似,接下来我们对比看看源代码(我用的是eclipse):

看见没有,几乎就是一样的!接下来挨个介绍下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字节码文件。但由于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
    编译后的二进制资源文件

更多相关文章

  1. Android(安卓)java.io.IOException异常情况整理
  2. android初次学习(android studio安装及注意事项 1.5版本)
  3. Android的WebView简单使用实例(附Demo)
  4. Android(安卓)数据存储和文件使用案例分析
  5. android 使用AsyncTask实现异步下载文件
  6. android实现View的渐隐渐现功能
  7. android 热修复之类加载机制
  8. cordova操作Android本地文件系统
  9. Adapter

随机推荐

  1. Android桌面小部件实例 桌面小时钟
  2. Android(总结):控件居中|水平居中|垂直居中
  3. android中小知识点积累
  4. Android(安卓)Adapter
  5. android控件属性
  6. Android(安卓)MVVM快速开发框架(一)
  7. Android(安卓)Listview 报错 'android.R.
  8. android:Spinner(下拉框)控件的使用
  9. Android的Notification研究
  10. 关于android:background="@drawable/bg_p