|
APK是Android Package的缩写,即Android安装包。APK是类似Symbian Sis或Sisx的文件格式。通过将APK文件直接传到Android模拟器或Android手机中执行即可安装。
4 e5 Z1 K e0 O u+ n8 x- b$ U1 r5 L$ \
APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是Dalvik VM executes的全称,即Android Dalvik执行程序,并非Java ME的字节码而是Dalvik字节码。
8 _6 U7 ^) `/ R7 A' }8 w6 i0 }" U7 d) K
一个APK文件结构为:
+ A) e- G$ Z7 }. W5 l }mete-INF Jar文件中常可以看到( m2 {+ D4 l1 d) Q$ o) D4 b- q3 y* n6 }$ b
res 存放资源文件的目录
9 x0 d# M! m5 z: i& R5 x5 MAndroidManifest.xml 程序全局配置文件! |7 n8 s' Z& c" C. |, c, Z
classes.dex Dalvik字节码) k& l/ r' L' ]0 I
resources.arsc 编译后的二进制资源文件+ B S+ g2 i, b! \9 S& R( l6 _" F, B
) y5 Y; N/ E: R& K' t2 S* f, x4 N
总结下我们发现Android在运行一个程序时首先需要UnZip,然后类似Symbian那样直接,和Windows Mobile中的PE文件有区别,这样做对于程序的保密性和可靠性不是很高,通过dexdump命令可以反编译,但这样做符合发展规律,微软的 Windows Gadgets或者说WPF也采用了这种构架方式。# q6 d+ _, }: ~3 y9 j& M, [+ j% A
& w0 x5 H! [( C4 b. e! r在Android平台中dalvik vm的执行文件被打包为apk格式,最终运行时加载器会解压然后获取编译后的androidmanifest.xml文件中的permission分支相关的安全访问,但仍然存在很多安全限制,如果你将apk文件传到/system/app文件夹下会发现执行是不受限制的。最终我们平时安装的文件可能不是这个文件夹,而在android rom中系统的apk文件默认会放入这个文件夹,它们拥有着root权限。 |
|