當前位置:首頁 » 安卓系統 » 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,安裝需要的工具就行了。

熱點內容
空間新演算法 發布:2025-04-05 10:33:21 瀏覽:704
蜀門和遠征哪個配置低 發布:2025-04-05 10:23:50 瀏覽:284
linux下jdk的安裝 發布:2025-04-05 10:12:20 瀏覽:67
單機江湖腳本 發布:2025-04-05 10:08:32 瀏覽:764
愛奇藝離線緩存怎麼傳藍牙 發布:2025-04-05 10:00:48 瀏覽:140
阿里雲伺服器內存超頻 發布:2025-04-05 10:00:48 瀏覽:575
如何登錄pubg國際服安卓手機 發布:2025-04-05 09:40:07 瀏覽:413
javafor表達式 發布:2025-04-05 09:22:22 瀏覽:869
可逆的加密演算法 發布:2025-04-05 09:22:22 瀏覽:496
我的世界怎麼讓別人進我的伺服器 發布:2025-04-05 09:11:59 瀏覽:802