关闭patchoat
2015-07-22 15:33
239 查看
art patchoat
This tool takes already compiled images and oat files and changes their base address, acting as a cheap form of relocation.Add a –include-patch-information flag to dex2oat and code to add required patch information to oat files created with the quick compiler.
https://android.googlesource.com/platform/art/+/53cb16b98acf3cf6f3a1e2204ad4958ecf1b5a3c
关闭patchoat
尽管打开了WITH_PREODEX之后,已经生成了odex文件,但是第一次开机的时候,android会去做patchoat的动作,会修改odex文件偏移量,并放到/data/dalvik-cache/arm/目录下面。这样做主要是为了安全考虑,因为ELF文件被load进系统之后,如果每一次都映射同样的位置,很容易被hack利用这一点进行攻击。如果不考虑这种安全性问题,可以把这个属性给关闭。关闭方法如下:
/art/runtime/globals.h
static constexpr bool kDefaultMustRelocate = false; //从而可以取消patch oat。
MTK平台还要修改如下的地方,否则有一些三方工具运行不起来:
/frameworks/base/core/jni/AndroidRuntime.cpp
#if 1 //将if 1改为#if 0,从而避免等待。 if (!bootOatDone) { if (!strcmp(className, "com.android.internal.os.RuntimeInit")) { waitOatDone(); bootOatDone = true; } } #endif
这样修改之后既可以减小data分区的空间,又可以加快开机速度,但风险就是容易被hack利用固定映射地址进行攻击。
/data空间从开机后占用686.4M减少到212.4M,空间占用减少69%。
第一次开机时间从179s减少到42s,耗时减少76%。
相关文章推荐
- 常见路由器关闭端口
- C#实现强制关闭当前程序进程
- ORACLE11g随RHEL5系统自动启动与关闭的设置方法
- C#实现关闭其他程序窗口或进程代码分享
- php实现用手机关闭计算机(电脑)的方法
- C#中登录窗体和欢迎窗体关闭方法分析
- .NET实现父窗体关闭而不影响子窗体的方法
- C#窗体编程不显示最小化、最大化、关闭按钮的方法
- Js智能判断浏览器是关闭还是刷新的代码
- 用js判断页面刷新或关闭的方法(onbeforeunload与onunload事件)
- js实例入门(简单展开或关闭)
- jquery ui 1.7 ui.tabs 动态添加与关闭(按钮关闭+双击关闭)
- MySQL服务器的启动和关闭
- js关闭子窗体刷新父窗体实现方法
- Java线程关闭的3种方法
- javascript 层展开/关闭,带缓冲效果
- JS 简单展开关闭切换代码
- JS实现定时自动关闭DIV层提示框的方法
- C#实现延时并自动关闭MessageBox的方法
- PHP打开和关闭文件操作函数总结