大家都知道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下应用程序的可执行文件的面目终于被揭开;

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

更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. Android的多种数据存储方式
  6. Cocos2d-x for Android(安卓)& iOS开发环境配置最佳实践
  7. andriod模拟器环境下apk应用程序的安装和删除
  8. 发布android app到android market的方法
  9. 关于ANR的解释与避免方式

随机推荐

  1. 20-b Local Service
  2. Android(安卓)圆角&圆形图片
  3. 【Android(安卓)Audio】Audio: summery o
  4. Android(安卓)菜单 使用XML
  5. 手机客户端版csdn搜索
  6. Android(安卓)check if app debug or rel
  7. Android(安卓)开发笔记第二季 DialogFrag
  8. recyclerview最简单的滑动删除
  9. [置顶] android 系统图片剪裁
  10. Android(安卓)手机号码格式验证