背景

开机首先加载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工具的更多相关文章

  1. Android 中替代 sharedpreferences 工具类的实现

    Android 中替代 sharedpreferences 工具类的实现 背景 想必大家一定用过 sharedpreferences 吧!就我个人而言,特别讨厌每次 put 完数据还要 commit. ...

  2. linux中的alsa工具与Android中的tinyalsa工具【转】

    本文转载自:http://blog.csdn.net/luckywang1103/article/details/48053015 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?) ...

  3. Android中APK签名工具之jarsigner和apksigner详解

    一.工具介绍 jarsigner是JDK提供的针对jar包签名的通用工具, 位于JDK/bin/jarsigner.exe apksigner是Google官方提供的针对Android apk签名及验 ...

  4. Android中常用开发工具类—持续更新...

    一.自定义ActionBar public class ActionBarTool { public static void setActionBarLayout(Activity act,Conte ...

  5. Android中日志工具的使用

    添加LogCat到你的Eclipse日志在任何项目的开发过程中都会起到非常重要的作用,在Android项目中如果你想要查看日志则必须要使用LogCat工具.当你第一次在Eclipse中运行Androi ...

  6. 使用 Android Studio 的日志工具 Log

    •Log简介 Android中的日志工具类是Log,这个类中提供了5个方法来供我们打印日志: 1. $Log.v()$ 用于打印那些最为琐碎的,意义最小的日志信息 对应级别 verbose,是 And ...

  7. android开发文档工具集(持续更新中...)

     http://www.androiddevtools.cn/ android 产品->交互->视觉->开发->测试各种工具地址下载, 各种文档下载应有尽有,强烈推荐.  ht ...

  8. 抓包工具Fidder详解(主要来抓取Android中app的请求)

    今天闲着没吊事,来写一篇关于怎么抓取Android中的app数据包?工欲行其事,必先利其器,上网google了一下,发现了一款神器:Fiddler,这个貌似是所有软件开发者必备神器呀!这款工具不仅可以 ...

  9. wemall doraemon中Android app商城系统工具集合类,包含各种程序中用到的静态方法

    wemall doraemon中Android app商城系统工具集合类,包含各种程序中用到的静态方法,可用于其他商城或者系统的编程参考 package cn.zzu.edu.wemall.utils ...

  10. Android开发中的logcat工具使用

    http://os.51cto.com/art/200905/126051.htm 用adb直接查看log:    adb logcat 清除之前的log: adb logcat -c 加过滤查看lo ...

随机推荐

  1. QT 连接 MySQL 版本问题

    问题现象 SSL connection error: unknown error number QMYSQL: Unable to connect 问题原因 出现这样的现象是因为我QT使用的是5.7的 ...

  2. 防抖节流的含义使用场景及js实现原理

    1.防抖:n 秒后在执行该事件,若在 n 秒内被重复触发,则重新计时.代码实现重在清零 clearTimeout. 应用:登录,提交,浏览器窗口的resizes事件,文本编辑保存 <script ...

  3. 04.2 go-admin前后端打包为一个服务上线

    目录 一.思路: 二.打包go-admin-ui为静态文件 a.修改配置文件 b.打包 c.复制dist到go-admin的static目录里 三.配置go-admin a.配置路由 b.访问页面 视 ...

  4. Swift中的Tuple类型

    Swift中的Tuple类型可以包含任何值,并且这些值的类型可以互相不一样.Tuple本身比较简单,需要记得也就是访问Tuple的方式. 使用变量名访问 let http404Error = (404 ...

  5. .NET 采用开源软件OpenOffice 实现文档转码服务(word ppt excel)转PDF

    前言 前几年做了个项目,里面有个需求,需要在浏览器中在线浏览word excel ppt  pdf等文档. 最近又开始研究并记录下来 当时方案: 因为浏览器中阅读文档暂时只能通过pdf方式读取,所以就 ...

  6. PageOffice——动态填充Word模板并在线编辑

    说明:使用pageoffice动态给word模板填充数据,插入图片.excel.word格式的文件和创建表格 一.准备工作: 本地创建一个doc或者docx格式的文件,在文件中需要插入数据的地方设置以 ...

  7. C#的GroupBy方法是如何工作的

    前言:先贴结果 GroupBy方法是如何工作的? 一.准备6个待分组的学生对象 class student { public string name;//姓名 public int grade;//年 ...

  8. C# npoi追加写入时报错 因为文件格式或文件扩展名无效。

    造成原因:workbook对象打开后,没有手动close造成的. 使用的npoi版本:2.6.0 ,环境 win10 .net core 5.0    

  9. 探寻Dubbo集群容错机制

    一. timeout 与 retries Dubbo的服务可以通过timeout配置超时时间,防止远程调用失败,该属性的默认值为1000(ms),用户可以在多个地方配置服务的超时时间: 图中涉及的配置 ...

  10. nginx通过geo做访问限制

    user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; eve ...