linux下 adb連接無權限或必須切換usb到文件傳輸才可連接、或fastboot無法識別到手機:
使用時報:no permissions (missing udev rules? user is in the plugdev group); see [http://developer.android.com/tools/device.html] 或 直接就識別不到
解決方法:
$adb start-server
$lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 17ef:6099 Lenovo
Bus 001 Device 002: ID 17ef:608d Lenovo
Bus 001 Device 033: ID 18d1:4ee7 Google Inc. //android xxx
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
$sudo vim /etc/udev/rules.d/90-android.rules
編輯文本內容為
SUBSYSTEM=="usb",ATTRS{idVendor}=="18d1",ATTRS{idProduct}=="4ee7",MODE="0666",GROUP="plugdev",SYMLINK+="android",SYMLINK+="android_adb"
需要改的信息為:
ATTRS{idVendor}=="有Google字樣此行的ID的左側數字 我這里是18d1"
ATTRS{idProduct}=="有Google字樣此行的ID的右側數字 我這里是4ee7"
重啟 abd 服務
sudo udevadm control --reload-rules
sudo service udev restart
sudo udevadm trigger
adb kill-server
adb start-server
文件中字符串查詢
grep -rn "hello,world!" ./ (具體用法可以 grep --help 查看)【grep是默認區分大小寫的!但也默認非全詞匹配!(但這兩點都可以通過參數改變)『opengrok是默認不區分大小寫的,卻默認全詞匹配,正好和grep相反!】
-r 是遞歸查找
-n 是顯示行號
-R 查找所有文件包含子目錄
-i 忽略大小寫
-l 只列出匹配的文件名
-L 列出不匹配的文件名
-w 只匹配整個單詞,而不是字符串的一部分(匹配 hello,不匹配helloo)
或 find / | xargs grep function 查找系統根目錄下面的所有文件的內容中包含有function字符串的文件列表。
目錄查找文件所在位置:
find ./ -name 文件名
查看包列表:
adb shell pm list packages [options] <FILTER>
打印所有軟件包,可選擇只打印軟件包名稱中包含<FILTER>的軟件包。
不使用參數:adb shell pm list packages,打印設備/模擬器上的所有軟件包
不使用參數:adb shell pm list packages,打印設備/模擬器上的所有軟件包
使用-f參數:adb shell pm list packages -f,輸出包和包相關聯的文件
使用-d參數:adb shell pm list packages -d,只輸出禁用的包。由於本機禁用沒有,輸出為空。
使用-e參數:adb shell pm list packages -e,只輸出啟用的包。
使用-s參數:adb shell pm list packages -s,只輸出系統的包。
使用-3參數:adb shell pm list packages -3,只輸出第三方的包。
使用-i參數:adb shell pm list packages -i,只輸出包和安裝信息(安裝來源)。
使用-u參數:adb shell pm list packages -u,只輸出包和未安裝包信息(安裝來源)。
查看某個包路徑:
adb shell pm path 包名
查看某個包信息:
adb shell dumpsys package com.xxxx.lfeh
發廣播:
adb shell am broadcast -a "xxxx.intent.action.SIM_LOCK_STATE_CHANGE" --ei "operator_type" 10
也可以adb shell am broadcast -a "xxxx.intent.action.SIM_LOCK_STATE_CHANGE" -e "operator_type" 10
啟動activity:
am start -n com.cota.notification/com.cota.notification.xxxxxActivity --es state "complete" --es display_name "Vodafone"
adb解鎖:
先在開發者選項中選擇OEM解鎖
adb reboot bootloader
fastboot flashing unlock
選擇unlock
獲取屬性值:
adb shell getprop ro.xxx.operator 可以返回運營商
ro.vendor.xxx.operator
adb shell pm -p com.a.b. 返回包所在的手機路徑
獲取手機硬件信息等:
命令adb shell dumpsys engineer --query_indicate_info
OK:WIFI: 38:8a:be:6b:b0:37
WIFI2: null
BT: 38:8A:BE:6B:B0:36
PCBA: 0020031C0C10031200000650
Carrier: 10010111
IMEI1: 869802059893379
IMEI2: 869802059893361
MEID: A00000DDA2F80B
GUID: 093a141bc00d9b1738dcbea70219447437bde4a98691437f40bbaef4ed7bd1a3
Storage: Total:235458252, Used:9310100, Free:226148152
動態wm開關啟停WMS系列和部分AMS系列bug的ProtoLog(可啟停的開關收集於ProtoLogGroup.java文件中):
wm logging enable-text/disable-text [group…] 如: wm logging enable-text
WM_DEBUG_STATES
logcat
( 或 adb shell dumpsys window -d enable 打開全局WindowManager:的log、
或 adb shell dumpsys activity -d enable 打開全局Activity的log
或 adb shell setprop sys.inputlog.enbaled true + adb shell dumpsys input 打開 input log )
Logcat使用:
logcat -b all > log.xml (all 會有些eventlog之類,比較全)
adb logcat |findstr abcdefg (也可以使用grep但grep搜索默認區分大小寫的,findstr不清楚)
adb logcat -c (清除之前的log,因為打開logcat后會把之前的log也打印下來)
允許更新安裝已有系統app
adb shell setprop debug.allow.persist.update true
屏幕截圖:
adb exec-out screencap -p <截圖存放路徑> 示例: adb exec-out screencap -p /sdcard/img.jpg(將命名為img的截圖保存在sd卡中)
adb shell screencap -p filepath
屏幕錄制:
adb shell screenrecord [--time-limit time] <錄制文件存放的路徑> --time-limit參數的單位是s,可選可不選,無此參數默認錄制時間和最長錄制時間為180s。
示例: adb shell screenrecord --time-limit 30 /sdcard/video.mp4(錄制一個30s的視頻命名為video保存在sd卡中)
查看當前界面是哪個Activity:
adb shell dumpsys activity top | grep ACTIVITY
如果未安裝 grep for window.exe,請分開執行:
adb shell
dumpsys activity top | grep ACTIVITY
強行停止某應用運行
adb shell am force-stop <包名>
查看進程:
ps -ef | grep jiolock (查看所有正在運行的e關聯jiolock的進程並打印擴展f信息)
lsof -p 1234 (lists列出1234進程號p打開open的所有文件file)(如動態鏈接庫等)
查詢命令所使用的工具的位置:
which 命令
linux系統下載\更新代碼的命令repo:
repo(一個python腳本工具),repo 文件內寫明遠程訪問路徑用戶等信息,通過如
使用tee工具將輸出到終端的信息同時打印到文件:
命令內容 | tee qssi.log
查看硬盤各個目錄容量和使用量:
df -h
查看指定目錄總共占的容量,而不單獨列出各子項占用的容量:
du -sh 【指定的目錄】
查看某目錄結構:
tree -L 5 【指定目錄】 (以樹狀結構輸出目錄下5層的結構)(不想顯示文件可以用-d)
查看手機所有通過ServiceManager.addService添加到manager里的運行的Service
service list
調用service代碼里實現的dump函數
adb shell dumpsys activity service com.flyme.mobileservice/.fcts.FCTSService + 自定義的命令(空格為分割符)
Android編譯命令m、mm、mmm區別及工程搭建示例
要使用m、mm、mmm命令對Android代碼進行模塊編譯,需要先執行如下命令初始化環境。
source build/envsetup.sh
lunch
執行lunch時一般會通過命令行提示選擇版型,輸入對應的序號回車即可。
各命令作用及用法:
mmm命令:編譯指定路徑下的模塊,需要指定模塊路徑(必須為該模塊的根目錄,包含Android.mk的目錄)。
mm命令:編譯當前目錄下的模塊,需要進到模塊所在目錄,本質上跟mmm沒什么區別。
m命令:編譯全部模塊。
或直接bash build.sh -j16 dist --qssi_only 2>&1 | tee mars.log這種公司常見編譯命令