细心的网友可能发现Android的ROM中有很多odex文件,相对于 APK中的dex文件而言这个odex有什么作用呢? Android123提示大家,如果你仔细观察会发现文件名时一一对应的,同时那些对应的apk文件中没有dex文件。这样做可以使其厂商保证一定的反盗版,因为没有没有dex文件的apk是无法正常安装的,而厂商直接将odex和不完整的apk文件放到手机rom固化到/system/bin中可以让一般用户无法正常导出使用。(文/Android开发网)

很多网友可能想到的是合并odex和apk变成apk中包含dex文件的,这样合并后最终apk文件安装在/data/中,而rom存放时在 /system/bin中,所以最终导致了用户可装在Android手机中的软件会变少,占用系统空间。

一、APK生成 odex文件方法:

编译开源GIT上的build/tools /dexpreopt/dexopt-wrapper这个,使用dexopt-wrapper即可,操作步骤

将dexopt-wrapper放到/data/local目录中,使用adb shell执行linux命令行,使用cd命令进入/data/local目录,

cd /data/local

./dexopt-wrapper android123.apk android123.odex

二、合并odex和 少dex的apk 为完整的apk文件

需要用到的工具是smali,一个开源的java处理软件:

http://code.google.com/p/smali/downloads/list

一.下载的baksmali和 smali的jar文件到工作目录

二.把ROM里面的core.odex, ext.odex, framework.odex, android.policy.odex, services.odex这5个文件也放在同一目录(也可以放在别的目录,通过设置BOOTCLASSPATH指定,默认就是当前目录)。

例:
以teeter为例子 (HTC一些Android常常会内置),ROM里面拿出来的可能是2个文件,teeter.apk + teeter.odex。
1、分解odex文件:
java -jar baksmali-1.2.1.jar -x teeter.odex
如果没其他问题,会在工作目录生成一个out的目录,里面是分解出来的一些文件,我们在此不深究这些文件的作用。

2、把分解得到的文件变成classes.dex:java -Xmx512M -jar smali-1.2.1.jar out -o classes.dex,这样得到了一个有用的classes.dex文件

3、用WinZip或者WinRAR打开teeter.apk文件,把这个classes.dex 放进去

4、最后再用signapk把最新得到的这个包含classes.dex的apk重新签署一下 (Auto Sign签名工具往期的文章里有下载),就生成一个可以安装的单独APK程序了。

5、签名完成后即可安装使用了

更多相关文章

  1. 34.如何获取app(apk和ipa)中的资源
  2. android中在Layout布局文件中添加控件ID,在Activity中findViewByI
  3. Android: NDK编程
  4. Android(安卓)用ViewFlipper简单实现广告滚动条
  5. android指定签名的apk才能安装
  6. android上传图片并附带上传数据,文件流
  7. 项目总结之Android读取office文件遇到的坑
  8. 酷盘PC版查看酷盘文件可以通过多种方式(Android/ios)等等
  9. android解析XML文件的三方法之DOM

随机推荐

  1. The application has stopped unexpected
  2. Android AnimationSet详解
  3. Android 代码实现重启
  4. Android Initialization Process
  5. 新sdk(5.0+)eclipse建android工程报错
  6. android使用gridview的书架效果
  7. COCOS2DX 安卓WIN32下配置手册
  8. android腾讯微博吹一吹实现原理
  9. 4、Android(安卓)SDK命令行工具AAPT2
  10. Android JNI char* 和jstring类型相互转