背景

开机首先加载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. Winform程序使用app.minifest清单禁止高DPI无法失效问题

    问题:Winform程序使用app.minifest清单禁止高DPI无法失效问题 摘要:因为笔记本基本都会有DPI放大,所以目前程序需要嵌入清单,并将其高DPI支持给禁止掉. 环境搭建:Winform ...

  2. 关于Web的欢迎页面的开发设置

    关于Web的欢迎页面的开发设置 每博一文案 命运总是不如人愿.但往往是在无数的痛苦中,在重重的矛盾和艰辛中,才是人成熟起来. 一次邂逅,一次目光的交融,就是永远的合二为一,就是与上帝的契约:总是风暴雷 ...

  3. HTTP 连接详解

    概述 世界上几乎所有的 HTTP 通信都是由 TCP/IP 承载的,客户端可以打开一条TCP/IP连接,连接到任何地方的服务器.一旦连接建立,客户端和服务器之间交换的报文就永远不会丢失.受损或失序 T ...

  4. AIRIOT训练营沈阳站圆满结束|手把手教你搞定物联网应用开发

    8月28日-9月1日,由航天科技控股集团有限公司(以下简称"航天科技")主办的<AIRIOT物联网平台应用与实战>训练营在沈阳圆满结束,来自上海电机学院.中渝软通信息技 ...

  5. k8s错误集合

    1.etcd没有启动的 [root@mcwk8s03 ~]# kubectl get nodesUnable to connect to the server: context deadline ex ...

  6. 通过XML标记生成word

    思路 word生成可以通过标签,也可以通过XML元素. word文档实际上是由文档对象模型描述的,因此我们能够通过对文档对象进行操作去生成word. 由于word允许我们附加XML结构(元素),如下: ...

  7. 『手撕Vue-CLI』处理不同指令

    前言 在上一篇『手撕Vue-CLI』添加自定义指令中,已经实现了自定义指令的添加,但是指令还是比较简单的,只是简单的打印一句话,那么在实际运用场景中,可能会有更多的需求,比如可能需要在指令中传递参数, ...

  8. 大数据之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 ...

  9. CSS——3D转换

  10. Vue——基本使用

    Vue.js 的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统.我们不再和 HTML 直接交互了.一个 Vue 应用会将其挂载到一个 DOM 元素上 (对于这个例子是 #app ...