Android命令&调试

本文详细介绍了Android开发中常用的各种编译、配置检查、设备控制、调试、屏幕截图、性能分析以及系统设置等命令,涵盖了ADB、AOSP、Drmcard和GDB等工具的使用技巧。
摘要由CSDN通过智能技术生成

Android编译命令

#删除上次编译的输出
make clobber

#查看编译配置
printconfig

#回到aosp根目录
croot 

#模块编译
m 模块名
mmm 相对路径
cd 目录;mm

ADB

adb install xx.apk
#可通过pm list package | grep 获取
adb uninstall 包名

screencap

#AOSP14指定某个屏幕截图
#获取-d需要的参数$id
dumpsys SurfaceFlinger --display-id 
#将$id号屏幕截图保存为/sdcard/s.png
screencap -d $id -p /sdcard/s.png
#拖到windows系统查看图片
adb pull /sdcard/s.png

投屏&录屏

#投屏
.\scrcpy.exe --display 2
#录屏
screenrecord --size 1920x1080 /sdcard/1.mp4

Wm

#设置屏幕显示分辨率和密度
wm density 120 -d 0
wm size 1920x720 -d 2

指定图层合成方式

# 使能DPU合成
service call SurfaceFlinger 1008 i32 0

#使能GPU合成
service call SurfaceFlinger 1008 i32 1 

#查看图层合成方式
dumpsys SurfaceFlinger --hwclayers

AM

#am启动Activity
#查找所有包名,启动MainActivity
#或者查找所有包名pm list package
dumpsys package | grep MainActivity
am start -n com.android.webview/org.chromium.android_webview.devui.MainActivity --display 2
am start -n com.android.documentsui/.files.FilesActivity --display 3

#am 移栈
#display move-stack <STACK_ID> <DISPLAY_ID> 
#将<STACK_ID>从当前显示移动到<DISPLAY_ID>
am stack list
#将maps移动到display 3
am display move-stack 1000039 3

选择使用drm card

setprop vendor.hwc.drm.device /dev/dri/card0 #使能card0
setprop vendor.hwc.drm.device /dev/dri/card1 #使能card1
setprop vendor.hwc.drm.device "" #使能所有card

Dumpsys

dumpsys SurfaceFlinger  input display

#查看每个屏支持的模式
dumpsys SurfaceFlinger  --displays

#查看SF支持的屏幕
dumpsys SurfaceFlinger | grep DisplayDevice

#查看每个屏上layer属性
dumpsys SurfaceFlinger  --hwclayers

#查看每个屏属性
dumpsys SurfaceFlinger --display-id

dumpsys gfxinfo
#gfxInfo 记录的是每一帧的耗时,我们重点看下面几个指标
1.Janky Frames :超过 16 ms 的帧数 (超过 16 ms 不一定会卡顿,但是会增加卡顿情况出现的风险)
2.耗时帧统计:可以看到大部分帧的区间,以及最大耗时 
3.Number High input latency = 30 说明主线程的负载是比较高的

dumpsys gfxinfo

Sdk版本

#PLATFORM_SDK_VERSION,当前Trout 32
out/XXX/system/build.prop里面ro.build.version.sdk的值

打印调用栈

#1、添加头文件:
#include "utils/CallStack.h"
#2、在需要打印函数调用栈的函数中添加如下代码:
CallStack stack;
stack.update();
stack.log("LPM_DEBUG"); //后面字符串表示log中的包含字符,在查找时会比较方便
#3、在函数文件对应的Android.mk中:
LOCAL_SHARED_LIBRARIES := libutils //这个一般都会有
libutilscallstack 

Gdb

#1. AOSP12使用gdbclient单步调试
#本机编译aosp并启动cuttlefish
adb root
adb remount
#Android侧
ps -A | grep composer
#1244是tcp端口,437是composer进程号
su
gdbserver :1244 --attach 437 
#host侧,端口映射,将pc机的1244端口映射到android的1244端口
adb -s 0.0.0.0:6520 forward tcp:1244 tcp:1244
#在source lunch工程中使用gdbclient
#1244是tcp端口,437是composer进程号 
set ANDROID_SERIAL=0.0.0.0:6520
gdbclient.py --port 1244 -p 437 
#调试断点在service和so上都有效
b HwcDisplay::PresentDisplay 
c
bt
# AOSP14直接单步调试,不需要gdbserver64
gdbclient.py -p 7016 //attach到某个进程
gdbclient.py -n surfaceflinger //attach某个名字的进程
gdbclient.py -r /system/bin/ls /bin //运行并调试某个进程

Toybox

#使用toybox的命令行
toybox vi
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 命令大全包括了许多用于开发和调试命令。以下是一些常用的 Android 命令: 1. adb:Android Debug Bridge,用于与设备进行通信和调试命令行工具。 - adb devices:列出已连接的 Android 设备。 - adb install &lt;path_to_apk&gt;:安装一个 APK 文件。 - adb uninstall &lt;package_name&gt;:卸载一个应用程序。 - adb shell:进入设备的命令行 Shell。 - adb logcat:查看设备的日志输出。 2. am:Activity Manager,用于管理 Android 应用程序的命令。 - am start &lt;intent&gt;:启动一个 Activity。 - am force-stop &lt;package_name&gt;:强制停止一个应用程序。 - am broadcast &lt;intent&gt;:发送一个广播。 3. pm:Package Manager,用于管理 Android 应用程序的包的命令。 - pm list packages:列出所有已安装的应用程序包名。 - pm path &lt;package_name&gt;:显示应用程序的 APK 文件路径。 - pm clear &lt;package_name&gt;:清除应用程序的用户数据。 4. svc:Service Manager,用于管理 Android 系统服务的命令。 - svc wifi enable/disable:启用/禁用 Wi-Fi。 - svc data enable/disable:启用/禁用移动数据。 5. input:模拟用户输入的命令。 - input tap &lt;x&gt; &lt;y&gt;:模拟点击屏幕上的指定坐标位置。 - input text &lt;text&gt;:模拟输入指定的文本。 这只是一小部分 Android 命令,还有许多其他命令可用于不同的开发和调试任务。如果你有特定的需求或问题,可以告诉我,我可以提供更详细的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值