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 ...
随机推荐
- Winform程序使用app.minifest清单禁止高DPI无法失效问题
问题:Winform程序使用app.minifest清单禁止高DPI无法失效问题 摘要:因为笔记本基本都会有DPI放大,所以目前程序需要嵌入清单,并将其高DPI支持给禁止掉. 环境搭建:Winform ...
- 关于Web的欢迎页面的开发设置
关于Web的欢迎页面的开发设置 每博一文案 命运总是不如人愿.但往往是在无数的痛苦中,在重重的矛盾和艰辛中,才是人成熟起来. 一次邂逅,一次目光的交融,就是永远的合二为一,就是与上帝的契约:总是风暴雷 ...
- HTTP 连接详解
概述 世界上几乎所有的 HTTP 通信都是由 TCP/IP 承载的,客户端可以打开一条TCP/IP连接,连接到任何地方的服务器.一旦连接建立,客户端和服务器之间交换的报文就永远不会丢失.受损或失序 T ...
- AIRIOT训练营沈阳站圆满结束|手把手教你搞定物联网应用开发
8月28日-9月1日,由航天科技控股集团有限公司(以下简称"航天科技")主办的<AIRIOT物联网平台应用与实战>训练营在沈阳圆满结束,来自上海电机学院.中渝软通信息技 ...
- k8s错误集合
1.etcd没有启动的 [root@mcwk8s03 ~]# kubectl get nodesUnable to connect to the server: context deadline ex ...
- 通过XML标记生成word
思路 word生成可以通过标签,也可以通过XML元素. word文档实际上是由文档对象模型描述的,因此我们能够通过对文档对象进行操作去生成word. 由于word允许我们附加XML结构(元素),如下: ...
- 『手撕Vue-CLI』处理不同指令
前言 在上一篇『手撕Vue-CLI』添加自定义指令中,已经实现了自定义指令的添加,但是指令还是比较简单的,只是简单的打印一句话,那么在实际运用场景中,可能会有更多的需求,比如可能需要在指令中传递参数, ...
- 大数据之Hadoop集群中MapReduce的Join操作
需求分析 如下两张输入表格 order表 id pid amount 1001 01 1 1002 02 2 1003 03 3 1004 01 4 1005 02 5 1006 03 6 pd表 p ...
- CSS——3D转换
- Vue——基本使用
Vue.js 的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统.我们不再和 HTML 直接交互了.一个 Vue 应用会将其挂载到一个 DOM 元素上 (对于这个例子是 #app ...