221

1.简介

ODEX是安卓上的应用程序apk中提取出来的可运行文件,即将APK中的classes.dex文件通过dex优化过程将其优化生成一个·dex文件单独存放,原APK中的classes.dex文件会保留的。

这样做可以加快软件的启动速度,预先提取,减少对RAM的占用,因为没有odex的话,系统要从apk包中提取dex再运行。

所谓Odex,是由android软件中的classes.dex生成的,Odex化即是把那个文件预先提取出来作用是能加快软件加载速度和开机速度。不过Odex也有缺点,那就是有时候加刷东西会出现问题。

简单说,原本系统恢复出厂设置后第一次开机需要先提取classes.dex出来,而Odex化就是现在你提前把它提取出来了。系统启动或者程序运行加快的原因也就在此。并且将dex变为odex还可以节省空间,因为提取后可以把apk内的dex删除。如果不odex,那么系统还是会自动提取dex,这时不仅apk内有dex,/data/dalvik-cache目录下也有dex,虽然apk内的dex经过压缩了,但是两份dex的总体积已经大于一份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 (简单地来说,其实就上一个合并的过程)

1.刷完机首次进入系统的时间会缩短一些。文件的运行速度应该也有所提升。

2.APK文件不能单独安装,并且如果反编译APK文件,一般也只能得到资源文件。可以说是起到一定的保护作用,避免被肆意修改和使用。这样做可以使其厂商保证一定的反盗版,因为没有dex文件的apk是无法正常安装的。

3.会增加一些可安装应用的空间,虽然不是很多。

4.某些机身内存太小的手机优化的时候可以删除dex文件来达到制作大内存包的目的,但是这种大内存包会使手机软件启动速度变慢。适合不追求速度,需要更多内存装软件的用户。

缺点:

1.不方便修改ROM以及文件本身。

2.增加ROM包的体积,虽然不是很多。

3.当你升级某个被Odex的应用后,这个应用将会出现故障,最常见的就是FC(在android系统里,运行程序的时候弹出一个对话框,强制关闭)

2.应用程序不做Odex优化

设置LOCAL_DEX_PREOPT控制App是否odex优化,下面是实例以及日志

2.1 模块编译方法

mmm qcom/opensource/bluetooth/hidtestapp

2.2 Android.mk

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional

src_dirs:= src/org/codeaurora/bluetooth/hidtestapp \ // 源码位置

LOCAL_SRC_FILES := \

$(call all-java-files-under, $(src_dirs)) \

LOCAL_PACKAGE_NAME := hid //apk module名字

LOCAL_CERTIFICATE := platform // 采用platform签名

LOCAL_DEX_PREOPT := false // 不做odex优化

LOCAL_PROGUARD_ENABLED := disabled

LOCAL_MULTILIB:= 32 // 只编译32位应用

include $(BUILD_PACKAGE)

2.3日志

PRODUCT_COPY_FILES device/qcom/common/media/media_profiles.xml:system/etc/media_profiles.xml ignored.

PRODUCT_COPY_FILES device/qcom/common/media/media_codecs.xml:system/etc/media_codecs.xml ignored.

No private recovery resources for TARGET_DEVICE project

616+0 records in

616+0 records out

630784 bytes (631 kB) copied, 0.00118089 s, 534 MB/s

Starting build with ninja

ninja: Entering directory `.'

[ 33% 1/3] Ensure Jack server is installed and started

Jack server already installed in "/home/xxx/.jack-server"

Server is already running

[ 66% 2/3] target Package: hid (out/target/product/project/obj/APPS/hid_intermediates/package.apk)

warning: ignoring flag -c hdpi-v4. Use --preferred-density instead.

warning: ignoring flag -c mdpi-v4. Use --preferred-density instead.

warning: ignoring flag -c hdpi-v4. Use --preferred-density instead.

warning: ignoring flag -c mdpi-v4. Use --preferred-density instead.

Warning: AndroidManifest.xml already defines minSdkVersion (in http://schemas.android.com/apk/res/android); using existing value in manifest.

Warning: AndroidManifest.xml already defines targetSdkVersion (in http://schemas.android.com/apk/res/android); using existing value in manifest.

[100% 3/3] Install: out/target/product/project/system/app/hid/hid.apk

make: Leaving directory `/data2/.../android'

2.4 查询结果

xxx@(none):/data2/../android/vendor$ ls ../out/target/product/xx/system/app/hid/ -l

total 16

-rw-rw-r-- 1 xxx xxx 13502 Oct 19 20:16 hid.apk

3.Odex优化

3.1开启odex

LOCAL_DEX_PREOPT := true

nostripping 不删除apk中的classes.dex

3.2 日志

PRODUCT_COPY_FILES device/qcom/common/media/media_profiles.xml:system/etc/media_profiles.xml ignored.

PRODUCT_COPY_FILES device/qcom/common/media/media_codecs.xml:system/etc/media_codecs.xml ignored.

No private recovery resources for TARGET_DEVICE project

616+0 records in

616+0 records out

630784 bytes (631 kB) copied, 0.00224366 s, 281 MB/s

Starting build with ninja

ninja: Entering directory `.'

[ 33% 2/6] Ensure Jack server is installed and started

Jack server already installed in "/home/xxx/.jack-server"

Server is already running

[ 50% 3/6] target Package: hid (out/target/product/project/obj/APPS/hid_intermediates/package.apk)

warning: ignoring flag -c hdpi-v4. Use --preferred-density instead.

warning: ignoring flag -c mdpi-v4. Use --preferred-density instead.

warning: ignoring flag -c hdpi-v4. Use --preferred-density instead.

warning: ignoring flag -c mdpi-v4. Use --preferred-density instead.

Warning: AndroidManifest.xml already defines minSdkVersion (in http://schemas.android.com/apk/res/android); using existing value in manifest.

Warning: AndroidManifest.xml already defines targetSdkVersion (in http://schemas.android.com/apk/res/android); using existing value in manifest.

[100% 6/6] Copy: out/target/product/project/system/app/hid/oat/arm/hid.odex

3.3 查询结果

xx@(none):/data2/../android/vendor$ ls ../out/target/product/xxx/system/app/hid/oat/arm/ -l

total 44

-rw-r--r-- 1 xxx xxx 41440 Oct 19 20:22 hid.odex

参考文档:https://blog.csdn.net/love_xsq/article/details/49935225

参考文档:https://www.jianshu.com/p/7f8ac9460700

0

android stack dump,Android ODEX介绍相关推荐

  1. android studio dump java heap_Android Studio 3.0 Memory Profiler使用

    Memory Profiler是Android Profiler中的一个组件,Android Profiler是Android Studio3.0用来替换之前Android Monitor的观察工具, ...

  2. Android 沙箱开源,Android Sandbox(沙箱)开源工具介绍

    原文:http://blog.csdn.net/jiayanhui2877/article/details/8120533 ndroid sandbox 通过利用开源工具动态分析.静态分析androi ...

  3. ActivityManagerService解读之Activity启动时间闲聊--Android Framework层时间计算介绍

    从ActivityManagerService解读之Activity启动初探,到ActivityManagerService解读之Activity启动再探,到ActivityManagerServic ...

  4. android核心架构Framework组件介绍

    作为一个android开发者,核心架构是必须要了解的.只有了解每个核心层的作用,才能更深入的理解和学习.本篇主要讲解Java Framework层核心代码流程. 文章目录 一,Android系统架构 ...

  5. Android的.dex、.odex与.oat文件扫盲

    文章目录 一.前言,发现新玩意 二..dex..odex与.oat文件介绍 1.dex文件 2.vdex文件 3.odex文件 4.oat文件 一.前言,发现新玩意 最近Unity项目打出的Andro ...

  6. Android Fragments 详细使用详细介绍

    其它推荐: [原创]android版本飞鸽传书源码(附图) Android植物大战僵尸对战版源码 实用源码--Android屏幕锁源码 Fragments 诞生初衷 自从Android 3.0中引入f ...

  7. android stack error message is Fail to start the plugin

    E: 08-26 16:34:11.934: E/AliSDK(32236): 错误编码 = 10022 08-26 16:34:11.934: E/AliSDK(32236): 错误消息 = SDK ...

  8. [原创]Android Monkey测试工具使用介绍

    [原创]Android Monkey测试工具使用介绍 1 Android Monkey介绍 Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件 ...

  9. Android 热修复之DexPatch 介绍

    简介:Android 热修复之DexPatch 介绍 1. 方案介绍 为了解决Native模块上线后的问题,mPaas[1] 提供了热修复功能,实现不发布客户端apk场景下的热修复.目前Android ...

最新文章

  1. 中国矿业大学考研计算机技术,中国矿业大学(北京)(专业学位)计算机技术考研难吗...
  2. 网络安全第一讲 计算机网络安全概述
  3. Mysql学习笔记(三)运算符和控制流函数
  4. python可变类型和不可变类型_Python-5 可变类型与不可变类型
  5. Jdk 和 jre 的 关系和区别
  6. OpenSUSE下支持托盘的邮件客户端Sylpheed
  7. 解决pytorch RuntimeError: expected scalar type XXXX but found XXXX
  8. enspar启动失败40_适合烘焙新手第一次做的芝士面包,简单易上手,好吃松软零失败...
  9. [SoapUI] context.expand 和 groovyUtils.getXmlHolder 有什么不一样
  10. el-table 树形表格 自定义展开图标_目前比较满意的安卓桌面启动器:非线性动画 + 精美图标包...
  11. [笔记]MacOs BootCamp装Win10双系统 经历
  12. centerOS环境变量配置
  13. c语言简单教师管理系统,C语言教师管理系统代码
  14. 直通车推广:打造潮流女装爆款
  15. c语言编程身高体重测量,身高体重测量系统设计.doc
  16. 智能语音机器人帮你解决订餐服务
  17. 24核超级计算机,24核装备 Intel发布最强14nm至强处理器
  18. DPDK系列之三DPDK介绍及简单应用
  19. Kubernetes(K8s)基本概念:Volume(存储卷)、Persistent Volume
  20. 超声影像对2010 ACR/EULAR RA分类标准的影响: 结合两种不同的受累关节灰阶滑膜炎超声定义的分类标准...

热门文章

  1. 关于android产品与平台的mk配置
  2. 双十一的隐形战场:天猫预备700多种技术预案
  3. 一元二次方程的求解,打印出复数的表示方法
  4. 大专在读可以报考成人本科学历吗 需要什么条件
  5. effective java 读书笔记——类和接口
  6. 服务器ssh22端口被大量占用,SSH服务修改默认22端口或同时监听多个端口
  7. 图像区域的度量——Regionprops函数浅析
  8. APP UI 自动化测试 H5页面元素定位
  9. mysql2005_vs2005+MSSQL2005 express
  10. 合作版机房收费系统——报表