Android 中的 perfboot工具
背景
开机首先加载bootloader,由bootloader启动kernel,然后运行init程序,有init启动Zygote,Zygote进程启动SystemServ进程,在SystemServer进程启动系统服务:PMS,AMS等,最后在AMS中启动Launcher ,此时整个Android系统完毕。在整个启动过程需要加载相关资源和Java类,首次启动还要安装应用等,如果不做好优化,开机时间可能就非常不理想,下面的工具对优化开机时间有很大的帮助。
https://blog.csdn.net/u011139711/article/details/80933143
https://blog.csdn.net/manjianchao/article/details/80515191
介绍
perfboot工具是个Python的脚本,在AOSP/system/core/init/目录下,通过运行./perfboot.py -h 可以看到相关参数。
运行perfboot需要在编译环境下,因为perfboot的运行需要依赖AOSP/development/python-packages/adb/目录下的相关模块。
获取记录开机时间点的文件:./perfboot.py --iterations=2 --interval=30 -v --output=/tmp/J5D_UE.tsv,相关参数的意思可以参考说明,脚本执行结束后,可以在Excel里直接打开文件进行分析。
执行命令。
cd system/core/init/
./perfboot.py --iterations=5 --interval=30 -v --output=/tmp/bf.tsv
报错记录: No module named adb
Traceback (most recent call last):
File "./perfboot.py", line 55, in <module>
import adb
ImportError: No module named adb
这个报错找不到adb模块,此时在AOSP/system/core/init/目录下执行命令无法找到AOSP/development/python-packages/adb/目录的依赖
解决办法:使拷贝adb目录和perfboot.py放到同级目录下(这个部分涉及Python的包管理,简单的做法使用下面的就可以了)
cp development/python-packages/adb/ system/core/init/ -vr
附录:遇到的问题
没有adb设备:
$ ./perfboot.py --iterations=5 --interval=30 -v --output=/tmp/bf.tsv
Traceback (most recent call last):
File "./perfboot.py", line 462, in <module>
main()
File "./perfboot.py", line 432, in main
device = adb.get_device(args.serial)
File "/home/schips/work/qdm507/SC20_Android7.1_R06_r00049.1/system/core/init/adb/device.py", line 112, in get_device
return _get_unique_device(product, adb_path=adb_path)
File "/home/schips/work/qdm507/SC20_Android7.1_R06_r00049.1/system/core/init/adb/device.py", line 71, in _get_unique_device
devices = get_devices(adb_path=adb_path)
File "/home/schips/work/qdm507/SC20_Android7.1_R06_r00049.1/system/core/init/adb/device.py", line 53, in get_devices
stderr=devnull)
File "/usr/lib/python2.7/subprocess.py", line 185, in check_call
retcode = call(*popenargs, **kwargs)
File "/usr/lib/python2.7/subprocess.py", line 172, in call
return Popen(*popenargs, **kwargs).wait()
File "/usr/lib/python2.7/subprocess.py", line 394, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1047, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
解决:找不到adb设备,参考在Ubuntu 18.04 安装 adb 中 的附录。
卡住:INFO:root:adb -s (no wait-for-device,未解决。
$ ./perfboot.py --iterations=5 --interval=30 -v --output=/tmp/J5D_UE.tsv
INFO:root:adb -s (no wait-for-device
^CTraceback (most recent call last):
File "./perfboot.py", line 462, in <module>
main()
File "./perfboot.py", line 439, in main
check_dm_verity_settings(device)
File "./perfboot.py", line 213, in check_dm_verity_settings
device.wait()
File "/home/schips/work/qdm507/SC20_Android7.1_R06_r00049.1/system/core/init/adb/device.py", line 449, in wait
return self._simple_call(['wait-for-device'])
File "/home/schips/work/qdm507/SC20_Android7.1_R06_r00049.1/system/core/init/adb/device.py", line 292, in _simple_call
self.adb_cmd + cmd, stderr=subprocess.STDOUT)
File "/home/schips/work/qdm507/SC20_Android7.1_R06_r00049.1/system/core/init/adb/device.py", line 197, in _subprocess_check_output
return subprocess.check_output(*_get_subprocess_args(args), **kwargs)
File "/usr/lib/python2.7/subprocess.py", line 217, in check_output
output, unused_err = process.communicate()
File "/usr/lib/python2.7/subprocess.py", line 475, in communicate
stdout = _eintr_retry_call(self.stdout.read)
File "/usr/lib/python2.7/subprocess.py", line 125, in _eintr_retry_call
return func(*args)
KeyboardInterrupt
Android 中的 perfboot工具的更多相关文章
- Android 中替代 sharedpreferences 工具类的实现
Android 中替代 sharedpreferences 工具类的实现 背景 想必大家一定用过 sharedpreferences 吧!就我个人而言,特别讨厌每次 put 完数据还要 commit. ...
- linux中的alsa工具与Android中的tinyalsa工具【转】
本文转载自:http://blog.csdn.net/luckywang1103/article/details/48053015 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?) ...
- Android中APK签名工具之jarsigner和apksigner详解
一.工具介绍 jarsigner是JDK提供的针对jar包签名的通用工具, 位于JDK/bin/jarsigner.exe apksigner是Google官方提供的针对Android apk签名及验 ...
- Android中常用开发工具类—持续更新...
一.自定义ActionBar public class ActionBarTool { public static void setActionBarLayout(Activity act,Conte ...
- Android中日志工具的使用
添加LogCat到你的Eclipse日志在任何项目的开发过程中都会起到非常重要的作用,在Android项目中如果你想要查看日志则必须要使用LogCat工具.当你第一次在Eclipse中运行Androi ...
- 使用 Android Studio 的日志工具 Log
•Log简介 Android中的日志工具类是Log,这个类中提供了5个方法来供我们打印日志: 1. $Log.v()$ 用于打印那些最为琐碎的,意义最小的日志信息 对应级别 verbose,是 And ...
- android开发文档工具集(持续更新中...)
http://www.androiddevtools.cn/ android 产品->交互->视觉->开发->测试各种工具地址下载, 各种文档下载应有尽有,强烈推荐. ht ...
- 抓包工具Fidder详解(主要来抓取Android中app的请求)
今天闲着没吊事,来写一篇关于怎么抓取Android中的app数据包?工欲行其事,必先利其器,上网google了一下,发现了一款神器:Fiddler,这个貌似是所有软件开发者必备神器呀!这款工具不仅可以 ...
- wemall doraemon中Android app商城系统工具集合类,包含各种程序中用到的静态方法
wemall doraemon中Android app商城系统工具集合类,包含各种程序中用到的静态方法,可用于其他商城或者系统的编程参考 package cn.zzu.edu.wemall.utils ...
- Android开发中的logcat工具使用
http://os.51cto.com/art/200905/126051.htm 用adb直接查看log: adb logcat 清除之前的log: adb logcat -c 加过滤查看lo ...
随机推荐
- EFK+logstash构建日志收集平台
一.环境 k8s集群: 控制节点:192.168.199.131 主机名:master 配置:4核6G 工作节点:192.168.199.128 主机名:monitor 配置:4核4G 1.1 ...
- 用Vue仿了一个类似抖音的App
大家好,我是 Java陈序员. 今天,给大家介绍一个基于 Vue3 实现的高仿抖音开源项目. 关注微信公众号:[Java陈序员],获取开源项目分享.AI副业分享.超200本经典计算机电子书籍等. 项目 ...
- 更新Homebrew时候遇到的问题
问题描述: 更新Homebrew时候遇到无法访问github的问题,判定原因为DNS污Ran. fatal: unable to access 'https://github.com/Homebrew ...
- Scala集合flatten操作
一层嵌套,但是flatten的要求需要List内部类型都一样, 例如都为List scala> List(List(1), List(2), List(3)).flatten res4: Lis ...
- 免费考AI OCP认证,附通关秘籍!
这是一个能让你快速熟悉AI相关技能的考试,由Oracle官方提供,而且限时免费. 它就是OCI Generative AI Professional. 可以看到,目前免费政策正在执行,到今年的7月31 ...
- 【C#】 封装的异步HttpRequest
private async void btn_userLogin_Click(object sender, EventArgs e) { UInfo = new ...
- beego go mod 模式下无法生成注解路由的问题 解决方法
执行 go get github.com/beego/bee 命令时将bee 命令一定要安装在gopath目录下.有idea或者goland编辑器是最方便的,只需要复制这条命令,然后进入编辑器会提示你 ...
- WPF开发快速入门【8】WPF进行简单的3D开发
概述 本文介绍采用WPF进行3D开发的一些基础知识,还有HelixToolkit控件的介绍以及在MVVM模式下使用3D框架. 3D开发入门 官方文档对3D开发的一些基础知识已经描述的比较详细了:三维图 ...
- 《最新出炉》系列入门篇-Python+Playwright自动化测试-49-Route类拦截修改请求-下篇
1.简介 在日常工作和学习中,自动化测试的时候:在加载页面时,可能页面出现很多不是很重要或者不是我们所关注的,这个时候我们就可以选择不加载这些内容,以提高页面加载速度,节省资源.例如:可能页面上图片比 ...
- Windows Server系统 PaddleOCR失败解决方案
因PaddleOCR引用了Opencv,在windows server 上 使用opencv出现 DLL load failed错误,发现缺失部分dll:MFPlat.dll.MF.dll.MFRea ...