IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android ROM 常见debug方法 -> 正文阅读

[移动开发]Android ROM 常见debug方法

Android ROM 常见debug方法

logcat

1 原生自带开机抓log, 如果没有抓取到,可能和selinux权限有关

setprop persist.logd.logpersistd logcatd

2 设置logcat buffer

// reboot生效,log buffer 16M
setprop persist.logd.size 16777216              

// 重启失效
logcat -G 10M 

selinux

Enforcing: SELinux处于开启状态,会阻止进程违反SELinux策略访问资源的行为

Permissive: SELinux关闭,不会阻止进程违反SELinux策略访问资源的行为

getenforce
setenforce [ Enforcing | Permissive | 1 | 0 ]

calltrace

java

try { ...... }catch(Exception e){ e.printStackTrace(); } }

c/c++

CallStack::logStack(LOG_TAG);
Add the this line in Android.mk : LOCAL_SHARED_LIBRARIES := libutils libutilscallstack

settings

settings put system sound_effects_enabled 0
settings get system sound_effects_enabled

dumpsys

// 可以dump的当前所有服务
adb shell service list

dumpsys activity services
dumpsys activity broadcasts
dumpsys SurfaceFlinger

Debugging Log

adb shell dmesg > dmesg.txt
adb shell bugreportz > bugreportz.txt

am

命令功能实现方法
am start [options] <INTENT>启动ActivitystartActivityAsUser
am startservice <INTENT>启动ServicestartService
am stopservice <INTENT>停止ServicestopService
am broadcast <INTENT>发送广播broadcastIntent
am kill <PACKAGE>杀指定后台进程killBackgroundProcesses
am kill-all杀所有后台进程killAllBackgroundProcesses
am force-stop <PACKAGE>强杀进程forceStopPackage
am hang系统卡住hang
am restart重启restart
am bug-report创建bugreportrequestBugReport
am dumpheap <pid> <file>进程pid的堆信息输出到filedumpheap
am send-trim-memory <pid> <level>收紧进程的内存setProcessMemoryTrimLevel
am monitor监控MyActivityController.run

常用参数

  • -a <ACTION>: 指定Intent action, 实现原理Intent.setAction();
  • -n <COMPONENT>: 指定组件名,格式为{包名}/.{主Activity名},实现原理Intent.setComponent();
  • -d <DATA_URI>: 指定Intent data URI
  • -t <MIME_TYPE>: 指定Intent MIME Type
  • -c <CATEGORY> [-c <CATEGORY>] ...]:指定Intent category,实现原理Intent.addCategory()
  • -p <PACKAGE>: 指定包名,实现原理Intent.setPackage();
  • -f <FLAGS>: 添加flags,实现原理Intent.setFlags(int ),紧接着的参数必须是int型

pm

命令功能实现方法
list packages列举app包信息PMS.getInstalledPackages
install [options] <PATH>安装应用PMS.installPackageAsUser
uninstall [options]<package>卸载应用IPackageInstaller.uninstall
enable <包名或组件名>enablePMS.setEnabledSetting
disable <包名或组件名>disablePMS.setEnabledSetting
hide <package>隐藏应用PMS.setApplicationHiddenSettingAsUser
unhide <package>显示应用PMS.setApplicationHiddenSettingAsUser
get-install-location获取安装位置PMS.getInstallLocation
set-install-location设置安装位置PMS.setInstallLocation
path <package>查看App路径PMS.getPackageInfo
clear <package>清空App数据AMS.clearApplicationUserData
get-max-users最大用户数UserManager.getMaxSupportedUsers
force-dex-opt <package>dex优化PMS.forceDexOpt
dump <package>dump信息AM.dumpPackageStateStatic
trim-caches <目标size>紧缩cache目标大小PMS.freeStorageAndNotify

pm install命令

安装应用

pm install [options] <PATH>

其中[options]参数:

  • -r: 覆盖安装已存在Apk,并保持原有数据;
  • -d: 运行安装低版本Apk;
  • -t: 运行安装测试Apk
  • -i : 指定Apk的安装器;
  • -s: 安装apk到共享快存储,比如sdcard;
  • -f: 安装apk到内部系统内存;
  • -l: 安装过程,持有转发锁
  • -g: 准许Apk manifest中的所有权限;

debuggerd

debuggerd -b [pid],可输出Native进程的调用栈


sysrq-trigger

// 导出内存分配信息
echo m > /proc/sysrq-trigger

// 导出当前任务状态信息
echo t > /proc/sysrq-trigger 

// 导出当前CPU寄存器和标志位信息
echo p > /proc/sysrq-trigger 

debuggerd

debuggerd -b [pid],可输出Native进程的调用栈


sysrq-trigger

// 导出内存分配信息
echo m > /proc/sysrq-trigger

// 导出当前任务状态信息
echo t > /proc/sysrq-trigger 

// 导出当前CPU寄存器和标志位信息
echo p > /proc/sysrq-trigger 

内存分析命令

1. dumpsys meminfo
2. procrank
3. cat /proc/meminfo
4. free
5. showmap
6. vmstat
  1. dumpsys meminfo适用场景: 查看进程的oom adj,或者dalvik/native等区域内存情况,或者某个进程或apk的内存情况,功能非常强大;
  2. procrank适用场景: 查看进程的VSS/RSS/PSS/USS各个内存指标;
  3. cat /proc/meminfo适用场景: 查看系统的详尽内存信息,包含内核情况;
  4. free适用场景: 只查看系统的可用内存;
  5. showmap适用场景: 查看进程的虚拟地址空间的内存分配情况;
  6. vmstat适用场景: 周期性地打印出进程运行队列、系统切换、CPU时间占比等情况
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-07-03 10:57:45  更:2022-07-03 10:59:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 2:26:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码