admin 管理员组

文章数量: 887019

大家都知道Window下的可执行文件是.exe或者是.dll,而如今android系统的发展也正如火如荼,平时你在只顾下载玩android游戏的时候有没有注意一下android平台下的可执行文件是什么,讲到这我想就算是在android下做过一段时间开发的人也可能会讲不清。会是.apk文件吗,一开始我也是这样认为的,上网搜了很多关键词,也都是模棱两可,下面我就带大家挖掘一下android平台下的可执行文件的格式:

昨天Hexbug问我android下的可执行文件是什么,我想了想大概是.apk文件吧,让后他又问我所在的目录。我仔细一想这个还真么研究过,曾经在adb下调试的时候进入过/data/app目录那里确实有我写过的程序,但是我把自己的手机连上直接寻找时却没有找到,然后我又在adb下寻找却能够找到,仔细想了想,因为我没有买sd卡,android程序默认都安装在手机中,而访问手机内部存储需要root权限,这大概就是问题所在,仔细找了找,在相应的包下果然有对应程序的.apk文件,然后把它删掉,然后再次回到手机上,这是对应的android应用程序依然无法打开,于是此时我就认定.apk文件就是android程序的可执行文件。
然而hexbug却告诉我这个可能不是,我们一起上网搜索了很多资料结果却发现,android程序运行的机制是这样的:

Android的ROM中有很多odex文件,相对于APK中的dex文件而言这个odex有什么作用呢? 如果你观察会发现与odex同名的文件一一对应,同时那些对应的apk文件中没有dex文件。

这样做可以使其厂商保证一定的反盗版,因为没有没有dex文件的apk是无法正常安装的,而厂商直接将odex和不完整的apk文件放到手机rom固化到/system/bin中可以让一般用户无法正常导出使用。

可能想到的是合并odex和apk产生的apk中会包含dex文件,所以说android中真正地可执行文件应该是odex



我又做了个实验,在windows下降.apk文件解压,发现.apk文件仅仅是一个包而已,经过进一步探究最终总结一下是这样的:
android程序的虚拟机是Dalvik,它执行的是(.dex)文件,该格式的文件针对内存使用做了优化。同时虚拟机是基于寄存器的,所有的类经过JAVA编译器编译,然后通过SDK中的"dx"工具转化成.dex格式,由虚拟机执行。


这下android下应用程序的可执行文件的面目终于被揭开;

由于时间仓促,难免有错字,还是那句话,高手莫喷,敬请指正;

本文标签: 真面目 可执行文件 Android