Bootstrap

Android各种调试命令

Android各种调试命令

adb shell中的am pm命令、常用命令总结

控制台下

写mac跟sn

#写MAC
su
echo 1 > /sys/class/unifykeys/attach
echo mac > /sys/class/unifykeys/name
echo 00:22:6D:D2:27:13 > /sys/class/unifykeys/write
cat /sys/class/unifykeys/read
 
#写SN
su
echo 1 > /sys/class/unifykeys/attach
echo usid > /sys/class/unifykeys/name
echo 2023011038 > /sys/class/unifykeys/write
cat /sys/class/unifykeys/read

#读MAC
adb shell getprop ro.boot.mac
#读SN
adb shell getprop ro.serialno

pm系列

pm工具为包管理(package manager)的简称,可以使用pm工具来执行应用的安装和查询应用包的信息、系统权限、控制应用。pm工具是Android开发与测试过程中必不可少的工具。通常放置在System/bin下。

# 列出所有已安装应用程序的包名信息
pm list packages

# 查询所有系统应用的包名
pm list packages -s

# 查询所有第三方应用的包名
pm list packages -3

# 获取指定应用程序包(PACKAGE)的详细信息,包括包名、版本号、权限等
pm dump PACKAGE

# 启用指定包名的应用程序
pm enable PACKAGE_NAME

# 卸载软件
pm uninstall  PACKAGE_NAME

# 禁用指定包名的应用程序
pm disable PACKAGE_NAME

# 授权给指定包名的应用程序指定权限
pm grant PACKAGE_NAME PERMISSION

# 撤销指定包名的应用程序指定权限
pm revoke PACKAGE_NAME PERMISSION

# 清除指定包名应用程序的数据及缓存
pm clear PACKAGE_NAME

# 强制停止指定包名的应用程序
am force-stop PACKAGE_NAME

am系列

# 通过命令启动APK
am start -n APK包名/启动类名   

截屏录屏

# 截屏
/system/bin/screencap -p /sdcard/screencap.png 

# 录屏10秒钟
screenrecord --time-limit 10 /sdcard/BlackScreen.mp4  

抓取log

# 清除当前日志缓冲区的内容
logcat -c

# 捕获设备上的日志,使用 "threadtime" 格式显示,并将日志输出到 "/data/123.log" 文件
logcat -c && logcat -v threadtime > /data/123.log

# 捕获设备上的日志,使用 "time" 格式显示,并将日志输出到 "/data/123.log" 文件
logcat -c && logcat -v time > /data/123.log

# 使用adb pull命令将设备上的 "/data/123.log" 文件拉到本地目标路径
adb pull /data/123.log /本地目标路径/

控制gpio口

# 创建 GPIO 控制口,将 GPIO 编号 488 导出到/sys/class/gpio/ 目录下
echo 488 > /sys/class/gpio/export

# 查看 GPIO 控制口的方向,输入还是输出
cat /sys/class/gpio/gpio488/direction

# 设置 GPIO 控制口的方向为输出
echo out > /sys/class/gpio/gpio488/direction

# 设置 GPIO 控制口的值为高电平(1),将 GPIO 置为高电平状态
echo 1 > /sys/class/gpio/gpio488/value

# 设置 GPIO 控制口的值为低电平(0),将 GPIO 置为低电平状态
echo 0 > /sys/class/gpio/gpio488/value

# 取消 GPIO 的导出,释放 GPIO 控制口
echo 488 > /sys/class/gpio/unexport

获取系统属性

# 获取系统的属性
getprop
e.g :getprop persist.sys.timezone

# 设置系统的属性
setprop
e.g :setprop persist.sys.timezone Asia/Tokyo

log级别

echo 7 >/proc/sys/kernel/printk

查看内存

adb shell df -h 查看分区情况
du -sh * 查询目录的磁盘使用空间
adb shell dumpsys meminfo $package_name or $pid 获取单个进程对应的内存信息

SVC系列

svc power stayon [true|false|usb|ac|wireless]   // 屏幕保持亮起或暗屏 [长亮|长暗|usb接入长亮|充电长亮|连接wifi长亮]
svc power reboot [reason]                       // 重启设备,可选参数 [reason] 表示重启原因
svc power shutdown                              // 关机
svc power forcesuspend [time]                   // 强制休眠,time为定时休眠时间(毫秒)

svc usb setFunctions [function]                 // 设置USB功能,[function] 可选项:`mtp`, `ptp`, `rndis`, `midi`
svc usb getFunctions                            // 获取当前启用的USB功能列表
svc usb resetUsbGadget                          // 重置USB设备

svc data enable                                 // 打开数据流量
svc data disable                                // 关闭数据流量

svc wifi enable                                 // 打开Wi-Fi
svc wifi disable                                // 关闭Wi-Fi

svc nfc enable                                  // 打开NFC
svc nfc disable                                 // 关闭NFC

svc bluetooth enable                            // 打开蓝牙
svc bluetooth disable                           // 关闭蓝牙

uboot下

设置kernel log级别

# 设置环境变量 loglevel 的值为 7
s4_ap222# env set loglevel 7

# 将当前环境变量保存到存储设备中
s4_ap222# env save

# 重新启动设备,应用新的环境变量设置
s4_ap222# reboot

控制gpio口

# 查看所有 GPIO 口的状态
gpio status -a

# 拉高指定 GPIOX_8 口的电平
gpio set GPIOX_8

# 拉低指定 GPIOX_8 口的电平
gpio clear GPIOX_8

不过这个操作方式在reboot之后就失去作用了

code下

查看apk的包名和权限

./sdk_name/prebuilts/sdk/tools/linux/bin/aapt dump badging /apk_path/apkName
#需要修改sdk_name\apk_path\apkName为自己对应的信息
example: ./prebuilts/sdk/tools/linux/bin/aapt dump badging ./xxx.apk

删除out下面的.dtb文件(修改dtsi文件时需要)

#查找out目录下的所有dtb文件并执行删除
find out/ -name *.dtb | xargs rm -rf

查看一个apk的详细信息

# 查看 APK 文件的基本信息,包括包名、版本等
aapt dump badging xxx.apk

# 使用 grep 过滤出 APK 文件的包名信息
aapt dump badging xxx.apk | grep package

# 使用 grep 过滤出 APK 文件的权限信息
aapt dump badging xxx.apk | grep permission

# 使用 grep 过滤出 APK 文件的活动(Activity)信息
aapt dump badging xxx.apk | grep activity

# 解包查看完整的 AndroidManifest.xml
aapt dump xmltree base.apk AndroidManifest.xml

这个命令可以查看到apk的包名,版本信息,启动活动,SDK版本,权限信息,目标设备等

也可以在【consol】下使用

dumpsys package 包名

这个命令不仅会显示apk的基本信息还会显示UID,进程信息等,比较多,建议使用的时候结合grep

常用信息

TV的settings:am start -n com.android.tv.settings/.MainSettings

TV的settings代码位置:vendor/amlogic/common/apps/DroidTvSettings/Settings/

AOSP Settings代码位置:packages/apps/Settings/

AOSP Settings:am start -n com.android.settings/.Settings

log: import android.util.Log;

开机启动的DefaultActivity :packages/apps/Provision/src/com/android/provision/DefaultActivity.java

开机执行的shell脚本:

build/make/tools/buildinfo.sh

输出系统属性:

settings get

在代码中给apk签名:

java -Djava.library.path="prebuilts/sdk/tools/linux/lib64" -jar ./prebuilts/sdk/tools/lib/signapk.jar vendor/xxxx/android-certs/platform.x509.pem vendor/xxxx/android-certs/platform.pk8 OTAForAB-1.1.apk OTAForAB-1.1_si.apk

常见问题

Android 11 进入开发者模式显示developer options are not available for this user

原因是开机没有执行com.android.provision/.DefaultActivity这个开机向导活动

注意:如果这个DefaultActivity没有效果,那说明没有编译Provision,需要编译这个。

手动输入

settings put global device_provisioned 1
settings put secure user_setup_complete 1
settings put secure tv_user_setup_complete 1

然后重新打开就可以了,更多信息请查看下面的commit:Changed Provision app so it can trigger device owner provisioning

❗目录结构

device:关于各种不同产品的配置,一些ro. 属性,一些软件的内置(Settings), "kl"文件,init.rc文件(权限和服务),开机动画, 语言时区

vendor: 厂商的定制化软件

framework: 系统设置、app权限、按键监听

Android源码根目录描述
art全新的ART运行环境
bionic系统C库
bootable启动引导相关代码
build存放系统编译规则及generic等基础开发包配置
ctsAndroid兼容性测试套件标准
dalvikdalvik虚拟机
developers开发者目录
development应用程序开发相关
device设备相关配置
docs参考文档目录
external开源模组相关文件
frameworks应用程序框架,Android系统核心部分,由Java和C++编写
hardware主要是硬件抽象层的代码
kernelAndroid的内核配置
libcore核心库相关文件
libnativehelper动态库,实现JNI库的基础
out编译完成后代码输出在此目录
pdkPlug Development Kit 的缩写,本地开发套件
platform_testing平台测试
prebuiltsx86和arm架构下预编译的一些资源
sdksdk和模拟器
packages应用程序包
system底层文件系统库、应用和组件
test安卓供应商测试套件(VTS)实验室
toolchain工具链文件
tools工具文件
Makefile全局Makefile文件,用来定义编译规则
vendor厂商定制内容
;