Android O、N版本修改dex2oat编译选项,减少占用ROM空间或者加快安装速度

Android O版本、AndroidN版本

1.ROM过大可以通过调整--compiler-filter,减少apk生成odex文件所占据空间的大小,通常来说odex+vdex文件越大,说明dex2oat优化的类越多越彻底,性能也相对较好;

2.Apk安装时间过长可以通过调整--compiler-filter,加快安装;

修改dex2oat的--compiler-filter选项;

oat_location_为要修改apk的关键字,通常使用包名,比如微信:com.tencent.mm;

/art/dex2oat/dex2oat.cc

void ParseArgs(int argc, char** argv) {

original_argc = argc;

original_argv = argv;

InitLogging(argv, Runtime::Abort);

// Skip over argv[0].

argv++;

argc--;

if (argc == 0) {

Usage("No arguments specified");

}

……

} else if (option.starts_with("--dirty-image-objects=")) {

dirty_image_objects_filename_ = option.substr(strlen("--dirty-image-objects=")).data();

}  else if (!compiler_options_->ParseCompilerOption(option, Usage)) {

Usage("Unknown argument %s", option.data());

}

}

/** MTK begin */

if(oat_location_ != "" && (oat_location_.find("mtk14456") != std::string::npos || oat_location_.find("com.tencent.mm")!= std::string::npos)){

LOG(INFO) << "MTK oat_location_=" << oat_location_ << ",SetCompilerFilter=CompilerOptions::kQuicken";

compiler_options_->SetCompilerFilter(CompilerFilter::kQuicken);

}

/** MTK end */

ProcessOptions(parser_options.get());

// Insert some compiler things.

InsertCompileOptions(argc, argv);

}

下面以Android O版本,微信6.6.2为例:

步骤:

1.下载weixin.apk,重命名为weixin.zip;解压缩,把所有的dex文件push到sdcard

2.adb shell,然后执行下面的命令:

./system/bin/dex2oat --oat-file=/sdcard/mtk14456tools_everything.odex --dex-file=/sdcard/classes.dex --dex-file=/sdcard/classes2.dex --dex-file=/sdcard/classes3.dex --dex-file=/sdcard/classes4.dex --dex-file=/sdcard/classes5.dex --compiler-filter=everything

  1. --compiler-filter参数如下:

--compiler-filter=(assume-verified|extract|verify|quicken|space-profile|space|speed-profile|speed|everything-profile|everything)

通过上面可以得出下面数据:

Time为安装apk时dex2oat的时间;

Odex表示生成odex文件的大小;

Vdex表示生成vdex文件的大小;

--compiler-filter

Time

Total size(KB)

Odex(KB)

Vdex(KB)

assume-verified

3.228s

36657

653

36004

extract

2.499s

36657

653

36004

verify

7.616s

36904

653

36251

quicken

9.539s

38978

717

38261

space-profile

7.949s

38978

717

38261

space

27.425s

107608

71321

36287

speed-profile

7.810s

38978

717

38261

speed

52.815s

107608

71321

36287

everything-profile

7.415s

38978

717

38261

everything

53.364s

109544

73281

36263

表格统计数据是根据下面log和生成在sdcard的odex和vdex得出:

01-01 00:33:58.596 4332-4332/? I/dex2oat: StrippedCommandLine:./system/bin/dex2oat --oat-file=/sdcard/mtk14456tools_everything.odex --dex-file=/sdcard/classes.dex --dex-file=/sdcard/classes2.dex --dex-file=/sdcard/classes3.dex --dex-file=/sdcard/classes4.dex --dex-file=/sdcard/classes5.dex --compiler-filter=everything

01-01 00:34:51.958 4332-4332/? I/dex2oat: dex2oat took 53.364s (341.743s cpu) (threads: 8) arena alloc=27MB (28629200B) java alloc=24MB (25341840B) native alloc=128MB (135004032B) free=29MB (31195264B)

Android 系统(158)---Android O、N 减少占用ROM空间或者加快安装速度相关推荐

  1. Android系统架构-[Android取经之路]

    摘要:本节主要来讲解Android的系统架构 阅读本文大约需要花费10分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的平台设计,欢迎关注我,谢谢! 欢 ...

  2. android 服务端技术,移动应用服务器端开发(基于JSP技术)-2017 Android系统构架 Android系统构架.docx...

    Android系统构架 PAGE 1 目 录 TOC \o "1-3" \h \z \u 一.Android系统构架 1 二.Linux内核层 2 三.系统运行库层 3 (一)系统 ...

  3. 【android系统】android系统升级流程分析(二)---update升级包分析

    接下来我们将通过几篇文章来分析update.zip包在具体Android系统升级的过程,来理解Android系统中Recovery模式服务的工作原理.今天让我先来分析下升级包update.zip. 一 ...

  4. 【android系统】android系统升级流程分析(一)---recovery模式中进行update包升级流程分析

    今天我们直接来看下android中具体的升级过程是如何的. 升级流程概述 升级的流程图: 升级流程分析 第一步:升级包获取 升级获取可以通过远程下载,也可直接拷贝到指定目录即可. 第二步:准备升级 然 ...

  5. android log抓取方法,Android系统之Android抓取各种log的方法

    Android系统之Android抓取各种log的方法 2018年11月25日 | 萬仟网移动技术 | 我要评论 android之android抓取各种log的方法 1.logcat (四类log b ...

  6. Window10 系统休眠或睡眠状态恢复-占用磁盘空间 100% 问题以及解决方法

    Window10 系统休眠或睡眠状态恢复-占用磁盘空间 100% 问题以及解决方法 系统环境版本 排除问题过程 解决问题 总结 不知从何时开始,电脑就不定期变的非常卡,尤其是笔者平时不关机,下班都是按 ...

  7. 【Android系统】Android开机时间分析

    参看博客: https://www.jianshu.com/p/30fdf86c3462?from=singlemessage                                      ...

  8. dlna移植android系统,基于Android的DLNA互动视频系统的设计与实现

    摘要: 随着人们对智能系统的要求越来越高,为了满足市场需求,相应的一系列Android应用也应运而生.其中,Android手机上的视频播放器便是最具有代表性的应用之一,然而Android自带的多媒体库 ...

  9. android系统语音合成,android 语音合成报错

    发现了2个问题 第一个貌似是复制离线的资源出错了(已经核对过读写等权限): 12-19 19:54:49.739 32006-32159/com.zhanglf.youxuanz I/NonBlock ...

最新文章

  1. Python Qt GUI设计:QPrinter打印图片类(基础篇—21)
  2. 基于Opencv实现眼睛控制鼠标
  3. source ubuntu 退出_Ubuntu如何使用source命令执行文件
  4. 参加第十六届全国大学生智能车竞赛广东省报名队伍
  5. PHP设置二维码中间为logo
  6. 每周一个 Python 模块 | calendar
  7. (操作系统题目题型总结)第二章:处理器管理
  8. 类和接口的使用-类和成员可访问性最小化
  9. 邻居子系统:地址解析协议
  10. 【计组】计算机乘法运算
  11. 迅雷跃居全球BT市场第一
  12. 规则库捕获漏洞信息专用脚本
  13. TextView Recyclerview省略号相关
  14. import torch ModuleNotFoundError: No module named ‘torch‘
  15. 解决OBS录屏软件窗口采集不全的问题
  16. BlueTooth: 无线技术之争谁将胜出 WiFi、蓝牙还是NFC?
  17. 低成本快速上链 智臻链开放联盟网络正式对外开放
  18. 新唐单片机移植RT-Thread,Finsh组件的接口函数编写
  19. RAD Studio破解补丁合集(2018.12.25)
  20. 浅析“进位计数制及数制转换”

热门文章

  1. as5300g2 nas软件功能_群晖NAS软件Qnote介绍及使用方法教程
  2. 【声学基础】概述——吸收
  3. Linux netfilter源码分析(6)
  4. STM32 FSMC/FMC原理保姆级讲解(一)
  5. 嵌入式Linux系统编程学习之二常用命令
  6. qt mysql分页控件_Qt分页布局与切分窗口的实现
  7. 《Reids 设计与实现》第五章 对象
  8. JVM02----垃圾收集上(堆)
  9. Makefile知识点
  10. JavaC#语法差别