Android安装程序默认扩展名为.apk

APK是Android Package的缩写,即Android安装包。APK是类似Symbian Sis或Sisx的文件格式。通过将APK文件直接传到Android模拟器或

Android手机中执行即可安装。

扩展阅读:APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是Dalvik VM executes的全称,即Android Dalvik执行程序,并非Java ME的字节码而是Dalvik字节码。

APK 文件的结构是什么?

一个APK文件结构为:

META-INF\ Jar文件中常可以看到

res\ 存放资源文件的目录

AndroidManifest.xml 程序全局配置文件

classes.dex Dalvik字节码

resources.arsc 编译后的二进制资源文件

总结下我们发现Android在运行一个程序时首先需要UnZip,然后类似Symbian那样直接,和Windows Mobile中的PE文件有区别,这样做对于程序的保密性和可靠性不是很高,通过dexdump命令可以反编译,但这样做符合发展规律,微软的 Windows Gadgets或者说WPF也采用了这种构架方式。

在Android平台中dalvik vm的执行文件被打包为apk格式,最终运行时加载器会解压然后获取编译后的androidmanifest.xml文件中的permission分支相关的安全访问,但仍然存在很多安全限制,如果你将apk文件传到/system/app文件夹下会发现执行是不受限制的。最终我们平时安装的文件可能不是这个文件夹,而在android rom中系统的apk文件默认会放入这个文件夹,它们拥有着root权限。

META-INF目录

META-INF目录下存放的是签名信息,用来保证apk包的完整性和系统的安全。在eclipse编译生成一个api包时,会对所有要打包的文件做一个校验计算,并把计算结果放在META-INF目录下。而在OPhone平台上安装apk包时,应用管理器会按照同样的算法对包里的文件做校验,如果校验结果与META-INF下的内容不一致,系统就不会安装这个apk。这就保证了apk包里的文件不能被随意替换。比如拿到一个apk 包后,如果想要替换里面的一幅图片,一段代码, 或一段版权信息,想直接解压缩、替换再重新打包,基本是不可能的。如此一来就给病毒感染和恶意修改增加了难度,有助于保护系 统的安全。

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。

更多相关文章

  1. cocos2d-x 2.x版本之win32 window移植android 环境搭配 只用NDK
  2. Android布局优化之Include(一)
  3. Android(安卓)项目开发填坑记 - 使用 MultiDex 解决 64K 限制
  4. Android解析xml文件
  5. Android(安卓)API中隐藏的类使用(例如IWindowManager)
  6. 对android里布局文件当中的TextView对象设置事件监听,但是不响应
  7. Android之Adapter用法总结
  8. android中AVD的使用
  9. NPM 和webpack 的基础使用

随机推荐

  1. JS判断客户端是否是iOS或者Android手机移
  2. android EditText+ListView的组合(类似于A
  3. Android调用js的坑
  4. Manpower代招-高级Android开发工程师@成
  5. android 读取assets指定文件
  6. Android(安卓)Activity之间跳转出现短暂
  7. android关于加载本地html5的问题(解决办
  8. Android 实现仿Window7图片预览窗格效果
  9. Android WebView在系统进程中无法使用
  10. Android 多行跑马灯 解决焦点抢占