当前位置:首页 » 安卓系统 » grepandroid

grepandroid

发布时间: 2022-12-23 03:21:18

① Android性能测试(内存、cpu、fps、流量、GPU、电量)——adb篇

3)查看进程列表:adb shell "ps",同时也能获取到应用的UID,方式如下(不需root权限):

u0_a开头的都是Android的应用进程,Android的应用的UID是从10000开始,到19999结束,可以在Process.java中查看到(FIRST_APPLICATION_UID和LAST_APPLICATION_UID),u0_a后面的数字就是该应用的UID值减去FIRST_APPLICATION_UID所得的值,所以,对于截图这个应用进程,它是u0_a155,按前面的规制,它的UID就是155 + FIRST_APPLICATION_UID = 10155。

VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)
PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)
一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS

使用 adb shell "mpsys meminfo -s <pakagename | pid>"命令,输出结果分以下4部分:

PS:在apk内调用运行获取其他app的内存数据则需要root权限

adb命令:adb shell mpsys gfxinfo <package | pid>

正常情况下帧率应该在16.67ms左右,1秒60帧,执行结果如下:

详细计算方法如下:

还有一个命令是: adb shell mpsys SurfaceFlinger --latency LayerName

其中LayerName在各个不同系统中获取的命令是不一样的
在Android 6系统直接就是SurfaceView
在Android 7系统中可以通过 mpsys window windows | grep mSurface | grep SurfaceView 然后通过数据截取到
在Android 8系统中可以通过 mpsys SurfaceFlinger | grep android包名获取到

执行命令结果如下:

计算方法比较简单,一般打印出来的数据是129行(部分机型打印两次257行,但是第一部分是无效数据,取后半部分),取len-2的第一列数据为end_time,取len-128的第一列数据为start_time
fps = 127/((end_time - start_time) / 1000000.0)
至于为啥要取第一列数据,这里不做过多介绍,欢迎参看这两篇文章
老罗的文章SurfaceView原理
Android性能测试之fps获取
至于为啥要处于1000000,因为命令打印出来的是纳秒单位,要转为毫秒进行计算,127就是因为命令一次打印出来127帧的数据而已

有两种方法可以获取
1) adb shell "top -n 5 | grep <package | pid>" ,第三列就是实时监控的CPU占用率(-n 指定执行次数,不需root权限),这边top命令执行需要2到3s左右,一般可以采用busybox 的top命令执行,效率会快很多

2) adb shell "mpsys cpuinfo | grep <package | pid>"
两种方法直接区别在于,top是持续监控状态,而mpsys cpuinfo获取的实时CPU占用率数据

adb命令:adb shell "mpsys batterystats < package | pid>" (Android 5.0后引入)
获取单个应用的耗电量信息,具体返回结果待研究

adb命令:adb shell "mpsys battery"
出现信息解读:
AC powered:false 是否连接AC(电源)充电线
USB powered:true 是否连接USB(PC或笔记本USB插口)充电
Wireless powered:false 是否使用了无线电源
status: 1 电池状态,2为充电状态,其他为非充电状态
level:58 电量(%)
scale: 100. 电量最大数值
voltage: 3977 当前电压(mV)
current now: -335232. 当前电流(mA)
temperature:355 电池温度,单位为0.1摄氏度

adb 命令:adb shell "mpsys< package | pid> | grep UID" [通过ps命令,获取app的UID(安装后唯一且固定)]
adb shell cat /proc/uid_stat/UID/tcp_rcv [cat为查看命令,读取tcp_rcv获取应用接收流量信息(设备重启后清零)]
adb shell cat /proc/uid_stat/UID/tcp_snd [cat为查看命令,读取tcp_snd获取应用发送流量信息(设备重启后清零)]
计算流量消耗步骤:

或者还有一种方式获取应用流量消耗:

首先判断类型:
cat /sys/class/thermal/thermal_zone*/type

只有红框框出来的是有效的
cat /sys/class/thermal/thermal_zone*/temp
获取CPU温度

mpsys battery | grep temperature 单位0.1摄氏度

获取/proc/stat文件内容(无权限限制)

总的cpu时间片是 total = user+nice+system+idle+iowait+irq+softirq
忙碌时间为 notidle = user+nice+system +iowait+irq+softirq
cpu使用率计算方法为,先取开始的total值和忙碌时间notidle,隔一段时间片,再取一次计算total2,notidle2, cpuuse = (notidle2 – notidle) * 100 / (total2 - total)%

PS:由于Android 8权限收紧,在Android 8系统手机内apk内读取文件内容为空,需要shell权限才可获取文件内容,下同

读/sys/devices/system/cpu/cpuX/cpufreq/scaling_cur_freq文件的值,X不定,看是几核手机,scaling_cur_freq是否存在也不一定,需要判断

至于为啥不取cpuinfo_cur_freq文件的值,原因是android 6,7系统获取的时候,这个文件shell没有读取权限,需要root权限

参考文章: https://blog.csdn.net/long_meng/article/details/45934899

Android 6,7系统可执行
mpsys window windows | grep "mCurrentFocus"

执行结果一般为类似:
mCurrentFocus=Window{81caaa5 u0 com.tencent.mobileqq/com.tencent.mobileqq.activity.SplashActivity}
按照一定规则把com.tencent.mobileqq提取出来即可

直接apk内读取文件即可,不需要shell权限(支持到Android8)
Gpu使用率获取:会得到两个值,(前一个/后一个)*100%=使用率
adb shell cat /sys/class/kgsl/kgsl-3d0/gpubusy

Gpu工作频率:
adb shell cat /sys/class/kgsl/kgsl-3d0/gpuclk
adb shell cat /sys/class/kgsl/kgsl-3d0/devfreq/cur_freq

Gpu最大、最小工作频率:
adb shell cat /sys/class/kgsl/kgsl-3d0/devfreq/max_freq
adb shell cat /sys/class/kgsl/kgsl-3d0/devfreq/min_freq

Gpu可用频率
adb shell cat /sys/class/kgsl/kgsl-3d0/gpu_available_frequencies
adb shell cat /sys/class/kgsl/kgsl-3d0/devfreq/available_frequencies

Gpu可用工作模式:
adb shell cat /sys/class/kgsl/kgsl-3d0/devfreq/available_governors

Gpu当前工作模式:
adb shell cat /sys/class/kgsl/kgsl-3d0/devfreq/governor

② adb logcat和grep命令的使用

在日常开发中Log的作用必不可少,AS中集成的logcat已经很方便,
但是有时候需要输出的log数据量很大结果被冲掉了,这时就可能要把logcat输出到文件,然后再进行分析。

这篇文章主要介绍了adb logcat命令行的使用以及结合grep很方面的过滤自己想要的内容并且输出到文件中

下面内容转自: https://blog.csdn.net/f2006116/article/details/89077030

android输出的每一条日志都有一个标记和优先级与其关联。

优先级是下面的字符,顺序是从低到高:

如下是一个日志输出的消息,LEVEL是“D”,TAG是“PowerManagerService”:

LEVEL:可以选择: [V D I W E ] 中其中一个

TAG:X 的作用为: 输出标签为TAG的log级别大于X的信息.

例如:

注意:

(1)可以指定多个[TAG:LEVEL ]

(2)[TAG:LEVEL ] 不会影响其他标签的日志, 所以如果要屏蔽其他log请使用 *:S

如下命令 仅输出标记为“ActivityManager”且优先级大于等于“Info”
和 标记为“PowerManagerService”并且优先级大于等于“Debug”的日志:

命令行中使用adb logcat命令查看android系统和应用的log,按ctrl+c中断输出log记录。

通过管道使用 grep 过滤,可以使用 grep 强大的正则表达式匹配,方便的输出自己需要的tag

进阶一点可以使用 grep 的正则表达式匹配。

例如上一个例子会匹配一行中任意位置的 MyApp,可以设置为仅匹配 tag。

默认的 log 输出如下(如果修改过输出格式相应的表达式也要修改):

可以看出 tag 是一行开头的第三个字符开始,根据这点写出表达式:

根据这个格式也可以设置只显示某个优先级的 log,再匹配行首第一个字符即可。
例如仅显示 Error 级别 tag 为 MyApp 的输出:

当然也可以匹配多个,使用 | 分割多个匹配表达式, 要加转义符 。

例如要匹配 tag 为 MyApp 和 MyActivity 的输出:

还是使用 grep,用法也跟上面的一样,加一个 -v 即可。
例如要过滤 tag 不为MyApp 和 MyActivity 的输出:

有时一个程序里面的 tag 有多个,需要输出该程序(同一个 PID)的所有 tag。

仅使用 tag 过滤有时也会漏掉一些错误信息,而一般错误信息也是和程序同一个 PID。

还是通过 grep 实现,思路是先根据包名找到 pid 号,然后匹配 pid。

写成 shell 脚本如下,参数是程序的 java 包名(如 com.android.media)。

logcat 有缓存,如果仅需要查看当前开始的 log,需要清空之前的。

有时需要分析 log 文件,过滤 log 文件还是使用 grep。使用">"操作符

例如 log 文件为 myapp.log,要匹配 tag 为 MyApp 和 MyActivity 的输出,然后输出到 newmyapp.log:

以上的技巧主要用到了 grep,其实 logcat 本身也有过滤功能,可以根据 tag、优先级过滤 log,

具体请参考 Android 官方文档Reading and Writing Logs。

③ android利用adb命令,获取当前界面(当前Task的栈顶).

开发项目中经常会遇到很多手机厂商制造的麻烦.如涉及权限,程序授权(受信任应用),或service自启动管理等.由于android手机种类繁多,厂商自制系统各自为王.弄得我们有时不得不针对固定的厂商或机型做定制开发.
本文就提供一种靠adb命令获取手机当前activity的方法!
1.首先 要配置adb环境变量 这里就不多说了,自己网络就好了,非常简单!
2.配置好环境变量后,就可以运用adb 命令了.
以OPPO r9S获取自启动管理界面为例:

将手机调好到指定界面后:打开cmd 输入
1) adb devices //查看链接设备
adb shell mpsys activity top //获取栈顶activity

![Q%T]T N0RQ0X{@ GP~TVZFG.png]( http://upload-images.jianshu.io/upload_images/3995903-d4895ea759168dc6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 )
2) 1.cmd命令中输入:adb shell 进入shell命令模式
2.shell中输入:logcat | grep ActivityManager 真机运行应用,可以实时 查看当前正在运行的Activity;
或者也可以用第二种方法.
至于用那种,看界面吧,这里第二种就不贴图了.读者自己去尝试吧!

补充:已测试手机(为service开启自启动或设置受保护程序);

④ 如何移植 linux安卓手机

移植toolbox到普通Linux系统中
toolbox是Android中专用的busybox,从嵌入式Linux转过来都会大大地吐槽功能简陋。但实质上也有很多特有的很好用的功能。比如getevent命令来调试所有的输入事件。已经静态编译出来了(下载地址:toolbox 静态编译),这里记录一下移植过程。
原本以为会很难,所以一直放很久才开始做,最终很简单,只需要稍加修改Android.mk就可以编译出一个静态链接的toolbox。以下diff文件就是改动信息。
diff --git a/system/core/toolbox/Android.mk b/system/core/toolbox/Android.mk
index 086ba0d..d5aef3b 100755
--- a/system/core/toolbox/Android.mk
+++ b/system/core/toolbox/Android.mk
@@ -91,6 +91,7 @@ LOCAL_SRC_FILES := \
grep/grep.c grep/fastgrep.c grep/file.c grep/queue.c grep/util.c

LOCAL_SHARED_LIBRARIES := libcutils libc libusbhost
+LOCAL_STATIC_LIBRARIES := libc libcutils

LOCAL_C_INCLUDES := bionic/libc/bionic

@@ -102,6 +103,7 @@ LOCAL_C_INCLUDES += external/libselinux/include

endif

+LOCAL_FORCE_STATIC_EXECUTABLE := true
LOCAL_MODULE := toolbox

# Including this will define $(intermediates).

然后进行编译就自动编译成了静态链接的了。
$ file out/target/proct/xxx/system/bin/toolbox
out/target/proct/xxx/system/bin/toolbox: ELF 32-bit LSB executable, ARM, \
version 1 (SYSV), statically linked, stripped
$12341234

当然,我没有编译所有的CPU架构的,只是编译了ARMv7的,所以比较低的架构或者其它CPU可能不能直接使用,那么就自行编译吧。
<完>

⑤ 使用grep和cut命令 如何截取某一段文字

这应该是个模式匹配的问题, 用 awk或sed命令比cut更有实际意义!
cmd | grep 'ACCESS_WIFI_STATE' | cut -d \" -f 2 | cut -d . -f 3

(5)grepandroid扩展阅读:
Python在设计上坚持了清晰划一的风格,这使得Python成为一门易读、易维护,并且被大量用户所欢迎的、用途广泛的语言。
设计者开发时总的指导思想是,对于一个特定的问题,只要有一种最好的方法来解决就好了。这在由Tim Peters写的Python格言(称为The Zen of Python)里面表述为:There should be one-- and preferably only one --obvious way to do it. 这正好和Perl语言(另一种功能类似的高级动态语言)的中心思想TMTOWTDI(There's More Than One Way To Do It)完全相反。
Python的作者有意的设计限制性很强的语法,使得不好的编程习惯(例如if语句的下一行不向右缩进)都不能通过编译。其中很重要的一项就是Python的缩进规则。
一个和其他大多数语言(如C)的区别就是,一个模块的界限,完全是由每行的首字符在这一行的位置来决定的(而C语言是用一对花括号{}来明确的定出模块的边界的,与字符的位置毫无关系)。这一点曾经引起过争议。因为自从C这类的语言诞生后,语言的语法含义与字符的排列方式分离开来,曾经被认为是一种程序语言的进步。不过不可否认的是,通过强制程序员们缩进(包括if,for和函数定义等所有需要使用模块的地方),Python确实使得程序更加清晰和美观。

⑥ 如何获取android源代码

当前的Android代码托管在两个方:https://github.com/android 和https://android.googlesource.com之前在 android.git.kernel.org上也有托管,不过现在重定向到了https://android.googlesource.com好在都支持git访问

google提供的repo工具实际上是一个内部操作git工具来简化操作Android源码的Python脚本。经过尝试,直接使用git工具在ubuntu下可以实现cloneAndroid源码。下面介绍一下方法:

1.获取当前的在github上托管的Androidgitrepositories:

github页面为:https://github.com/android/following。不过这个页面不支持通过wget"https://github.com/android/following"或者curl"https://github.com/android/following"的方式访问,错误信息如下:

这个时候需能做的只能是"tryagain"了。

需要说明的是"不要试图同时并发执行多个gitclone命令",这样会导致大量出现上面贴图中的错误,另外,整个clone过程中耗时最多的gitrepository如下:

kernel_common.gitkernel_msm.gitplatform_frameworks_base.gitplatform_prebuilt.git其中platform_prebuilt.git是google提供的预编译好的二进制文件,包含:各种库文件,jar包,可执行程序等等,如果只是阅读Android源代码,这个gitrepository可以不用clone.

⑦ ANDROID 多用户

从 Android L(5.0)开始引入多用户 API。直到目前,基本上都是隐藏 api 或者需要系统签名才能持有”managed_user" 权限。

Android 的这个 “用户” 并不是等同于 linux 下的用户概念。Android 是基于 Linux 的 OS,Linux 下有一套自己的账户管理体系,而 Android 对此有一些封装和改动。同时,Android 也引进了自己的多用户功能。

Linux是多用户系统,每个用户都拥有一个uid,这个uid由系统和用户名做映射绑定。同时,为了便于用户管理(譬如管理文档权限),Linux引入了群组的概念,可以将多个用户归于一个群组。每一个群组拥有一个群组id(gid)。

以第三方应用为例做说明:

一个应用被安装后, 系统给分配唯一的 "Application ID", 简称" AppId "。同时系统中会有多个用户 (User), 每个用户也有一个唯一的 ID 值, 称为" UserId " 。

Android 这里的 "UserId" 跟 Linux 的 UserId 完全不是同一个东西。UserId 10000 + appId 才等于 Linux 下的 UserId, 即进程所属用户的概念, 在 Android 我们通常记做 " uid *",以下以微信为例作为说明:

可以看到微信创建了 2 个进程,其第一列 USER 字段均为 u0_a110,这个 u0_a110 就是 uid(有人也说a110是uid)。

这个字段这样拆解成 int 值:

uid 就对应 Linux 系统里 "进程所属用户的概念"
在 Android 系统里, 我们可以很容易发现:

可以通过 adb shell mpsys package com.android.systemui | grep "uid" 简单的得到安装应用的uid

通过源码可以看到,UserHandle包含三种概念:userid、uid、appid
userid :就是有多少个实际的用户,即手机里的主机、访客等多用户。
uid :上文讲过他跟应用进程相关,除了shareid的应用,每个用户的每个应用的uid不一样的。
appid :跟app相关,包名相同的appid都一样,即使是不同用户。

⑧ 如何在linux下配置AndroidStudio开发环境

1、系统环境

[android@localhost ~]$uname -a

Linux localhost.localdomain 2.6.32-71.el6.i686 #1SMP Wed Sep 1 01:26:34 EDT 2010 i686 i686 i386 GNU/Linux

[android@localhost ~]$lsb_release -a

LSB Version: :core-4.0-ia32:core-4.0-noarch:graphics-4.0-ia32:graphics-4.0-noarch:printing-4.0-ia32:printing-4.0-noarch

Distributor ID: RedHatEnterpriseServer

Description: Red Hat Enterprise Linux Server release 6.0 (Santiago)

Release: 6.0

Codename: Santiago

[android@localhost ~]$

2、准备软件

java

eclipse

android-sdk

ADT

这些软件都可以在官网上下载。

3、搭建过程

(1) 安装java

[android@localhost ~]$ rpm -qa | grep java

eclipse-mylyn-java-3.3.2-4.5.el6.i686

java-1.6.0-openjdk-devel-1.6.0.0-1.21.b17.el6.i686

java-1.6.0-openjdk-1.6.0.0-1.21.b17.el6.i686

tzdata-java-2010l-1.el6.noarch

gcc-java-4.4.4-13.el6.i686

java-1.5.0-gcj-1.5.0.0-29.1.el6.i686

subversion-javahl-1.6.11-2.el6.i686

ooobasis3.3-javafilter-3.3.0-9567.i586

libvirt-java-0.4.5-2.el6.noarch

lpg-java-compat-1.1.0-4.1.el6.noarch

libvirt-java-devel-0.4.5-2.el6.noarch

mysql-connector-java-5.1.12-2.el6.i686

ant-javamail-1.7.1-13.el6.i686

java-1.6.0-openjdk-javadoc-1.6.0.0-1.21.b17.el6.i686

java_cup-0.10k-5.el6.i686

[android@localhost ~]$

通过命令查看当前已经安装了java的相关jdk,可以进行下一步。

(2) 安装eclipse

从官网上下载的eclipse不需要按装,直接解压即可使用。如:

[android@localhost Base Env]$ ls

ADT-18.0.0.zip

android-sdk_r18-linux.tgz

Android开发环境搭建(Linux篇).doc

eclipse

eclipse-cpp-indigo-SR2-incubation-linux-gtk.tar.gz

Linux环境搭建.doc

Linux 下Android 开发环境搭建 .doc

[android@localhost Base Env]$ rm -R eclipse

[android@localhost Base Env]$ ls

ADT-18.0.0.zip

android-sdk_r18-linux.tgz

Android开发环境搭建(Linux篇).doc

eclipse-cpp-indigo-SR2-incubation-linux-gtk.tar.gz

Linux环境搭建.doc

Linux 下Android 开发环境搭建 .doc

[android@localhost Base Env]$tar -zxfeclipse-cpp-indigo-SR2-incubation-linux-gtk.tar.gz

[android@localhost Base Env]$ls

ADT-18.0.0.zip

android-sdk_r18-linux.tgz

Android开发环境搭建(Linux篇).doc

eclipse

eclipse-cpp-indigo-SR2-incubation-linux-gtk.tar.gz

Linux环境搭建.doc

Linux 下Android 开发环境搭建 .doc

[android@localhost Base Env]$cd eclipse

[android@localhost eclipse]$ls

about_files configuration eclipse.ini icon.xpm p2

about.html dropins epl-v10.html libcairo-swt.so plugins

artifacts.xml eclipse features notice.html readme

[android@localhost eclipse]$ll

总用量 540

drwxrwxr-x. 2 android android 4096 2月 17 03:06 about_files

-rw-rw-r--. 1 android android 18909 2月 8 21:55 about.html

-rw-rw-r--. 1 android android 88246 2月 17 03:06 artifacts.xml

drwxrwxr-x. 5 android android 4096 2月 17 03:06 configuration

drwxrwxr-x. 2 android android 4096 2月 17 03:06 dropins

-rwxr-xr-x. 1 android android 62814 2月 8 22:16 eclipse

-rw-rw-r--. 1 android android 407 2月 17 03:06 eclipse.ini

-rw-rw-r--. 1 android android 6 2月 8 21:36 epl-v10.html

drwxrwxr-x. 46 android android 4096 2月 17 03:06 features

-rw-rw-r--. 1 android android 9022 2月 8 21:54 icon.xpm

-rwxr-xr-x. 1 android android 266168 2月 8 21:54 libcairo-swt.so

-rw-rw-r--. 1 android android 8951 2月 8 21:36 notice.html

drwxrwxr-x. 5 android android 4096 2月 17 03:05 p2

drwxrwxr-x. 10 android android 36864 2月 17 03:06 plugins

drwxrwxr-x. 2 android android 4096 2月 17 03:06 readme

[android@localhost eclipse]$./eclipse

启动eclipse之后,eclipse会自动创建并寻找workspace文件夹,可以直接点击ok按钮即可。eclipse的启动过程如下图所示:

⑨ 在windows情况下,如何使用adb grep命令。求大神告知。望详细!

装一个Cygwin Terminal,安装需要的工具就行了。

热点内容
编程linux系统 发布:2025-04-05 06:04:14 浏览:249
表格如何增减密码 发布:2025-04-05 06:00:33 浏览:191
存储卡sandisk 发布:2025-04-05 06:00:26 浏览:38
dll编译出错求助 发布:2025-04-05 05:59:44 浏览:709
模拟人生java 发布:2025-04-05 05:53:58 浏览:553
日本免费云服务器色 发布:2025-04-05 04:58:52 浏览:865
linuxcpp 发布:2025-04-05 04:53:38 浏览:748
安卓字体哪个最好 发布:2025-04-05 04:46:37 浏览:650
什么是hdb3码编译码 发布:2025-04-05 04:40:20 浏览:504
编译原理运算符 发布:2025-04-05 04:37:50 浏览:521