1.什么是ODEX?  
ODEX是安卓上的应用程序apk中提取出来的可运行文件,即将APK中的classes.dex文件通过dex优化过程将其优化生成一个.dex文件单独存放,原APK中的classes.dex文件会保留。 
  这样做可以加快软件的启动速度,预先提取,减少对RAM的占用,因为没有odex的话,系统要从apk包中提取dex再运行。
ODEX作用:  
所谓Odex,是由android软件中的classes.dex生成的,Odex化即是把那个文件预先提取出来作用是能加快软件加载速度和开机速度。不过Odex也有缺点,那就是有时候加刷东西会出现问题。 
  看懂了吗?用我的理解,简单说,原本系统每次执行APK都需要先提取一部分出来,而Odex化就是现在你提前把它提取出来了。系统启动或者程序运行加快的原因也就在此。而由于提取了Odex出来,会占用一部分存储空间,所以做Odex化的时候需要考虑空间方面的问题。 
Odex的效果: 
Odex化后系统启动和程序运行速度大大提高,稳定性不变。因此推荐做Odex化。 
  一般来说官方rom都是odex化的rom(含Odex文件),而定制rom大部分都是deodex化的(无odex文件)。两者应该各有优点吧,貌似现在也没有统一的说法。官方rom大部分每个apk对应一个.odex文件,而deodex化的rom里面只有一个apk,把.odex转换成classes.dex放到apk包里面了。所以 odex rom的.apk+.odex=deodex化rom的1个.apk (简单地来说,其实就上一个合并的过程) 
Odex的优点:  
  1.刷完机首次进入系统的时间会缩短一些。文件的运行速度应该也有所提升。 
 2.APK文件不能单独安装,并且如果反编译APK文件,一般也只能得到资源文件。可以说是起到一定的保护作用,避免被肆意修改和使用。这样做可以使其厂商保证一定的反盗版,因为没有dex文件的apk是无法正常安装的。 
 3.会增加一些可安装应用的空间,虽然不是很多。 
Odex的缺点:(介个简单地说就是更新软件需要重新做下对应的Odex文件)  
  1.不方便修改ROM以及文件本身。 
 2.增加ROM包的体积,虽然不是很多。 
 3.当你升级某个被Odex的应用后,这个应用将会出现故障,最常见的就是FC。

2.Android编译是否生成odex的设置

默认编译odex版本,如果需要非odex版本,请将device/huawei/k3v2_s10/BoardConfig.mk如下两个变量的值修改为:
DISABLE_DEXPREOPT := true
WITH_DEXPREOPT := false
其它说明
A. device/hisi/k3v2oem1/下面的配置文件不再使用,对应的配置文件在device/huawei/k3v2_s10/目录,以后如果需要修改配置文件, 请在该目录下进行修改。
B. out/target/product/目录下的产品编译镜像k3v2oem1不再使用,对应华为自己的产品镜像,如out/target/product/hws10101u
C. 【编APK,不生成odex】
    目前库上的代码编译apk时,同时生成了apk和odex,push/install进去不生效。
解决方法:
(1不生成odex,只生成apk,将 LOCAL_DEX_PREOPT 的值改为 false 即可。
     即 build\core\package.mk 中156行改为 LOCAL_DEX_PREOPT := false。
照上述修改后,全部重新编译,后续就可以mm单独编译apk方便调试了。

(2如果时间紧,又不想全编重新编译怎么办?
     在相应的apk代码路径的Android.mk文件中加入WITH_DEXPREOPT := false。
添加后mm重新编译生成apk即可。

【编JAR包,不生成odex】
    目前库上的代码编译framework时,同时生成了JAR和odex,此时push进去开机起不来。

解决方法:
    编译时只生成jar包,不生成odex,即 build/core/java_library.mk 中37行改为 LOCAL_DEX_PREOPT := false。照上述修改后,全部重新编译,后续就可以mm单独编译jar包方便调试了。

用mm编译apk时,会在out目录下生成.apk和.odex两个文件,是为了加快运行速度,把dex分出来做的预处理。但是一般开发时需要mm编译出一个完整的apk,直接用adb进行安装就可以进行调试。在./build/core下有个package.mk文件,里面有一个选项,LOCAL_DEX_PREOPT ,4.0默认把这个选项设置成了true,所以我们将LOCAL_DEX_PREOPT值改为false,就可编译出完整的apk了。

还可以如下解决:

adb shell -> cd system/app -> rm xxx.apk xxx.odex -> adb push xxx.apk /system/app  即可生效。

http://blog.csdn.net/jscese/article/details/32702321

笔记:关于adb push不生效相关推荐

  1. Android 12 adb push更新系统应用

    需求描述 adb 传输文件的权限问题--remote couldn't create file: Read-only file system 需要push /system/system_ext/pri ...

  2. adb push和pull使用

    1.运行cmd> 进入adb.exe目录 2.>adb connect ip 3.>adb remount 4.>adb push 本地apk全路径 /system/app/ ...

  3. adb push ,adb pull和adb install的区别

    1.用命令行把手机上的文件拷贝到电脑上 1 adb pull sdcard/1222073679.png 拷贝文件夹命令,如把log文件夹拷贝到电脑当前目录 1 adb pull sdcard/log ...

  4. adb push命令传文件到手机_Android调试桥(adb)

    欢迎关注公众号 学习资料不会少 Android 调试桥 Android 调试桥 (adb) 是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信.它可为各种设备操作提供便利 ...

  5. 1.Android新版开发教程笔记—Android ADB工具使用

    adb(Android Debug Bridge)是Android提供的一个通用调试工具,借助这个工具,我们可以管理设备或手机模拟器的状态. adb功能操作:1)快速更新设备或手机模拟器中的代码,如应 ...

  6. 使用拷贝的方式(adb push) 绕过Android系统和adb install直接安装APK

    某些情况下定制的Android系统为了限制用户安装应用,例如电视盒子,车载中控等,通过修改代码屏蔽了正常安装应用的方式 本文探讨如何在 adb shell 具有读写data分区目录的权限前提下,通过a ...

  7. android+adb+push到系统下,Android adb push 应用到app/system

    Android adb push 应用到app/system 准备工作 具体操作 准备工作 1.准备打包好的apk(必须签名) test.apk 2.设备已经链接到电脑 具体操作 1.push apk ...

  8. Android adb “push pull”中文支持解决方案

    Android adb "push pull"中文支持解决方案 在windows底下文件(夹)命名所采用的是GBK编码,而在Android中采用的UTF-8编码,所有使用adb 的 ...

  9. adb push命令

    如果要从电脑上传送文件到手机的话,使用adb push命令. 格式:adb push <local> <remote> 实例:adb push E:\libjnitest.so ...

最新文章

  1. 关于过滤空格问题(未经测试)
  2. SD和TF两种卡片的区别
  3. codevs 爱改名的小融
  4. poj1797Heavy Transportation最大生成树
  5. mysql中预定义常量_PHP预定义常量
  6. LeetCode 2096. 从二叉树一个节点到另一个节点每一步的方向(最小公共祖先)
  7. 去除报错_转录组分析 | 使用trimgalore去除低质量的reads和adaptor
  8. 我是真的傻,她被超市安保罚了100元,我居然给她50元
  9. HDOJ1020 Encoding
  10. jQuery checkbox全选问题
  11. 再问:支付宝即时到账集成接口!
  12. Linux信号量详解
  13. 详解电脑换主板需要重装系统吗
  14. 面试中Shiro常见的问题
  15. Android 直播礼物动画实现之SVGA动画
  16. 把网页整个保存为pdf
  17. VS使用教程(使用visual studio编写C语言程序),编写c的入门教程
  18. 效果最接近《羊了个羊》(卡牌堆叠游戏)的开源代码 微信小程序开源了
  19. win10家庭版如何修改用户名对应的文件夹的名字(中文该成英文字符)
  20. 一个简单的C语言代码段,逻辑题

热门文章

  1. MySQL的错误日志查看
  2. gitter 卸载_最佳Gitter频道:Ruby
  3. 简单的js制作轮播图
  4. 怎样学好 Java 后端?
  5. 功夫熊猫 中英文对照
  6. 手机电子邮箱申请后有什么优势?个人电子邮箱怎么申请注册?
  7. 表格软件界的卷王,Excel、access、foxpro全靠边,WPS:真荣幸
  8. 卫星html5源码,微信开发HTML5轻游戏中的几个坑
  9. php调试——输出变量值
  10. Oracle数据库基本信息查询命令