-
2021-05-26 12:08:42
在应用开发中,我们常常会进行日志打印或者debug调试,以此来分析运行时的一些信息,便于发现bug和问题。Android Studio的Debug功能很好用,但是有时候有些情况下,就显得不是那么快捷和便利。
比如
我们调试的点在应用一打开的时候,很靠前,例如Application的onCreate方法中,以至于我们不能足够快的设置进程为debug模式
虽然上面的情况可以通过Android Studio的debug运行来解决,但是如果项目很大的话,运行起来也会比较耽误时间
那么怎么解决上面的问题呢,其实只需要执行一行命令即可adb shell am set-debug-app -w com.example.jishuxiaoheiwu.appdebugsample
其中set-debug-app 用来应用为debug模式
-w 意思为wait,在进程启动的时候,等待debugger进行连接
com.example.jishuxiaoheiwu.appdebugsample 代表想要调试的应用的包名或ApplicationId
执行上面的命令,当我们再次启动目标应用时,会得到这样的画面
然后,我们就会有足够的时间,来使用Run—> Attach Debugger to Android Process 来绑定进程debug。 绑定后对话框消失,下次启动就是正常的启动(没有上面的对话框了)
那么一次debug不一定能解决问题,多次调试则在所难免,那么每次都要执行这个命令么?
答案是可以,但是有更好的方式。即adb shell am set-debug-app -w --persistent com.example.jishuxiaoheiwu.appdebugsample
上面的代码和之前有所不同,表现在一个—persistent
—persitent意思是持久的,意思是一直设置这个应用为调试模式,即每次开启(进程创建)都会弹出对话框,即使卸载再安装或者更新应用
如果多次debug完成后,解决了问题,想要恢复正常的启动也很简单adb shell am clear-debug-app
这个调试的方法很简单,但是可能会节省我们很多的宝贵时间。希望可以帮助到各位开发同行。
另外,当你的开发中遇到效率问题时,你需要做出思考,发觉更快捷的工作方式,而不是为了调试Application中onCreate方法中的代码,每次都点击Android Studio的debug按钮。
更多相关内容 -
Qt5开发安卓调试工具(adb input以及adb shell screencap应用)
2021-01-06 09:34:59Qt5开发安卓调试工具(adb shell input以及adb shell screencap应用) 文章目录Qt5开发安卓调试工具(adb shell input以及adb shell screencap应用)一、前言二、技术点三、技术点实现及坑点记录1、QProcess执行... -
adb工具即Android Debug Bridge(安卓调试桥) tools
2018-02-10 23:06:42adb工具即Android Debug Bridge(安卓调试桥) tools.. -
Platform Tools 安卓调试工具包 r31.0.3 (Windows, Mac & Linux)
2021-10-07 20:35:11platform-tools是很多刷机的朋友都会用到的工具包,Android SDK其中的platform-tools包可以对安卓设备进行调试,包括解锁、刷机等操作都可以使用这个工具包来进行,其中包含开发app的平台依赖的开发和调试工具,包括... -
ADB 安卓调试桥 v1.0.41.zip
2020-09-04 17:23:542020-09-04从谷歌官网下载的platform-tools_r30.0.4-windows,然后从里边提取出了adb 1.0.41 -
Android Debug Bridge(安卓调试桥) tools
2019-03-18 10:28:04adb工具即Android Debug Bridge(安卓调试桥) tools。它就是一个命令行窗口,用于通过电脑端与模拟器或者真实设备交互。在某些特殊的情况下进入不了系统,adb就派上用场啦! adb工具我觉得很重要,比如说你的手机不... -
adb安卓调试工具
2018-01-13 17:10:54adb的全称为Android Debug Bridge 调试桥,是连接Android手机与PC端的桥梁,通过adb可以管理、操作模拟器和设备,如安装软件、查看设备软硬件参数、系统升级、运行shell命令等 -
Android调试技巧
2021-12-04 16:49:151、定位activity 有时候看到页面但是不知道页面相关的代码在哪,可以用下面两种方法快速定位 1、layout inspector Layout inspector中会已窗口的形式展示当前的activity ...hanking@C02CP0QNMD6V Noted-Android1、定位activity
有时候看到页面但是不知道页面相关的代码在哪,可以用下面两种方法快速定位
1、layout inspector
Layout inspector中会已窗口的形式展示当前的activity
2、adb
可以通过adb打印当前显示的activity也有两种方式
1、 adb -d shell dumpsys activity activities | grep mResumedActivity
打印的log如下:hanking@C02CP0QNMD6V Noted-Android % adb -d shell dumpsys activity activities | grep mResumedActivity mResumedActivity: ActivityRecord{6938a87 u0 com.noted.noted/.view.activity.NoteAddActivity t6513}
2、adb shell dumpsys activity top | grep ACTIVITY
打印的log如下:
hanking@C02CP0QNMD6V Noted-Android % adb shell dumpsys activity top | grep ACTIVITY ACTIVITY com.huawei.android.launcher/.unihome.UniHomeLauncher 6903383 pid=2496 ACTIVITY com.noted.noted/.view.activity.NoteAddActivity 6938a87 pid=4180
2、定位view
1、view可以点击
找到Android 中系统的View这个类,并且在这个类的接口OnclickListener中抽象方法onClick加一个断点
加完断点后,点击view,会自动定位到当前view的点击方法中
2、view无法点击
找到View这个类,并且在这onTouchEvent()方法前面加断点调试的时候会自动定位到当前触摸的view的onTouchEvent中
3、输出方法的调用栈
在该方法中加如下log
Log.d(TAG, Log.getStackTraceString(new Throwable()));
打印如下:
2021-01-12 18:01:32.438 7902-7902/com.noted.noted D/MainActivity: java.lang.Throwable at com.noted.noted.MainActivity.onCreate(MainActivity.kt:88) at android.app.Activity.performCreate(Activity.java:8085) at android.app.Activity.performCreate(Activity.java:8073) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1320) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3870) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4076) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2473) at android.os.Handler.dispatchMessage(Handler.java:110) at android.os.Looper.loop(Looper.java:219) at android.app.ActivityThread.main(ActivityThread.java:8349) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055)
4、查看h5页面的链接
有时候要去看h5打开的页面链接是什么,这个时候去加log或者debug比较麻烦可以通过chrome来直接查看在浏览器中输入chrome://inspect/ 就可以检测当前页面:
5、Debug高级技巧
1、崩溃后日志被覆盖
先看下Android studio中的日志面板
有时候崩溃了,日志很快被覆盖掉,可以通过这个restart按钮来重新打印日志。
2、debug打印log
有时候想临时打印日志,如果添加log就要改代码然后重新运行比较麻烦,这个时候通过debug也可以打印出log,
这里是在普通的断点上面修改去掉suspend,然后加上evalute and log,log里面可以添加需要的内容。
查看log的时候要通过
3、异常断点
有时候会遇到程序崩溃但是又没有打印相关的崩溃日志,或者想要快速点位到崩溃的代码位置,这时候就可以通过异常断点来实现。
异常断点的功能,就是在程序崩溃的时候断点到崩溃的位置。异常断点的设置也很简单
在Android开发中一般勾选java excption breakpoints就可以了,这样在程序崩溃的时候就会自动定位到崩溃的代码位置。
如果你项目里面用到了dart也可以勾选上dart exception breakpoints。4、field值观察点
如果要观察某个field变量值的变化情况,比如哪里赋值,哪里修改值等,可以通过这个断点
这里面可以选择field值初始化,field值获取,field值更改,看自己的需要来确定,默认是选择了field 值更改
5、drop frame
有时候debug太快错过了断点位置,一般这个时候会重新开始去debug,但是有了drop frame之后
就可以通过上图中的标志返回到上一步然后再次进入断点位置。
6、断点分组
debug时候经常会碰到debug进了之前打的断点里面,习惯性打完断点不删除,然后断点越来越多,这个时候就可以用断点分组的功能,可以把断点进行分组,不需要的断点可以整组的删除,很方便。
右键断点然后就可以根据上图来创建新分组或者移动到已有的分组。
6、adb打开开发者选项中的选项# 此命令可操作布局边界的显示隐藏 adb shell setprop debug.layout "true|false" # 此命令可操作过度绘制的显示隐藏 adb shell getprop debug.hwui.overdraw "show|false" # 此命令可操作点按操作反馈的显示隐藏 adb shell content insert --uri content://settings/system --bind name:s:show_touches --bind value:i:'1|0' # 此命令可操作显示触摸位置的显示隐藏 adb shell content insert --uri content://settings/system --bind name:s:pointer_location --bind value:i:'1|0'
7、adb一键连接Charles代理
平常使用Charles代理时, 通常需要进入WiFi管理页面, 设置代理的服务器IP地址和端口号, 对于不常用的手机型号, 找到WiFi设置页可能都要花上一分钟, 再加上手输IP和端口号的时间, 整个连接体验还是比较差的 其实Android是有设置全局代理的能力的, 通过一个ADB命令即可连接代理, 再通过获取本机IP, 保存设置代理的端口, 便可体验上一键即可连接Charles的快感 具体设置代码如下# 设置代理 adb shell settings put global http_proxy "$Ip:$Port" # 清除代理 adb shell settings put global http_proxy :0 adb shell settings delete global http_proxy adb shell settings delete global global_http_proxy_host adb shell settings delete global global_http_proxy_port
release包断点调试
其实能否加断点跟apk的构建类型无关,之所以印象中的release都没法断点调试,是因为release构建时没有加上
debugable。 android { buildTypes { release { debuggable true } } }
同时,禁用Proguard的obfuscate功能,保留行号和sourcefile等源码信息。
-keepattributes Signature -keepattributes SourceFile,LineNumberTable -renamesourcefileattribute SourceFile -dontobfuscate
加上之后打出来的release包就能加断点调试了。
参考
1、https://developer.android.com/studio/debug
-
Android Debug Bridge(安卓调试桥)
2021-05-26 12:24:30adb.exe、AdbWinApi.dll、AdbWinUsbApi.dll三个文件 -
Android调试助手
2021-05-28 02:45:36Android调试助手是一款行业软件,帮助大家进行软件方面的编写与调试,是一款十分好用的行业工具,能帮助大家解决日常工作中的许多实际问题,通过PC端即可快速进行操作,后进行解压即可使用。Android调试助手更新:...Android调试助手是一款行业软件,帮助大家进行软件方面的编写与调试,是一款十分好用的行业工具,能帮助大家解决日常工作中的许多实际问题,通过PC端即可快速进行操作,后进行解压即可使用。
Android调试助手更新:
软件截图1
更新日志:
v1.5
1.添加了 调试so和调试java 中调试模式启动apk 前 结束掉该包名的所有进程,清理缓存参与进程
2.修改调试so 中的 停止 IDA server bug
3.修改ida server的进程名为zygote
4.系统配置页中添加了 调试器保护开启 按钮(用来控制反反调试插件,保护和隐藏我们调试器的,暂时没有放出反反调试插件)
5.禁止程序页面的大小,防止拖拽
软件截图2
v1.8
1.修改获得包名bug
v1.9
添加了版本检测
软件截图3
v2.0
1.修改AndroidDebug需要管理员启动
2.升级版本apktool_2.3.0
Android调试助手:
软件截图4
软件截图5
软件截图6
更新日志:
v1.5
1.添加了 调试so和调试java 中调试模式启动apk 前 结束掉该包名的所有进程,清理缓存参与进程
2.修改调试so 中的 停止 IDA server bug
3.修改ida server的进程名为zygote
4.系统配置页中添加了 调试器保护开启 按钮(用来控制反反调试插件,保护和隐藏我们调试器的,暂时没有放出反反调试插件)
5.禁止程序页面的大小,防止拖拽
软件截图1
v1.8
1.修改获得包名bug
v1.9
添加了版本检测
软件截图2
v2.0
1.修改AndroidDebug需要管理员启动
2.升级版本apktool_2.3.0
-
安卓串口调试android studio源码
2018-12-03 14:05:01串口测试工具2018 适用于安卓平板、主板、盒子、手机、x86等安卓设备。 支持安卓2.0到安卓9.0设备。 串口设备包括:串口打印机、电子秤、投影机、矩阵、摄像机、等离子、单片机等等。...支持USB转串口调试。 -
Android调试神器stetho使用详解和改造
2020-08-26 08:23:20今天小编就为大家分享一篇关于Android调试神器stetho使用详解和改造,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧 -
Platform Tools 安卓调试工具包 r30.0.2 for Windows (2020.05.29)
2020-06-08 17:30:58platform-tools是很多刷机的朋友都会用到的工具包,Android SDK其中的platform-tools包可以对安卓设备进行调试,包括解锁、刷机等操作都可以使用这个工具包来进行,其中包含开发app的平台依赖的开发和调试工具,包括... -
Android 调试桥 (adb)
2021-03-04 16:49:36一、 adb连接手机 (1)Android 调试桥 (adb) —— 了解(1)Android 调试桥 (adb) —— 了解
adb全称(Android Debug Bridge),它是一个通用命令行工具,它可以做为Android与PC端连接的一个桥梁,所以adb又称为Android调试桥,用户可以通过adb在电脑上对Android设备进行全面操作,比如安装和调试应用,操作文件的传输等。
运行架构
-
adb client(客户端):client实际上就是shell控制台,通过Client发送命令给server。发送命令时,首先检测PC上有没有启动Server,如果没有Server,则自动启动一个Server,然后将命令发送到Server,并不关心命令发送过去以后会怎样。
-
adb server(服务器):server是运行在主机上的一个后台进程,作用是检测USB端口何时连接或者移除设备,server还将adb client的请求通过USB或者TCP的发送发送到adbd上。
-
adb demon(守护进程):运行在Android设备上的一个进程,作用是通过USB或者TCP连接到adb server,并且为运行在主机上的adb client提供一些服务。
(2)Android 调试桥 (adb) —— 下载adb并使用
如果是本身开发安卓的程序师,下载Android SDK的是时候里面会自带adb工具,但是如果只是单纯的想试试adb,可以直接下载 adb下载链接
下载之后解压就得到这样的目录结构,我们需要用到的就是其中的adb.exe了
要么这里直接用cmd操作,为了方便也可以设置一个系统环境变量,这里就先直接使用了,随便输入一个adb devices的命令看看咸淡
这里可以看出来adb是可以用了,当启动 adb 客户端时,该客户端会先检查是否有 adb 服务器进程正在运行。如果没有,它会启动服务器进程。服务器在启动后会与本地 TCP 端口 5037 绑定,并监听 adb 客户端发出的命令 - 所有 adb 客户端均通过端口 5037 与 adb 服务器通信(3)Android 调试桥 (adb) —— 启用 adb 调试
如要在通过 USB 连接的设备上使用 adb,您必须在设备的系统设置中启用 USB 调试(位于开发者选项下)
在搭载 Android 4.2 及更高版本的设备上,“开发者选项”屏幕默认情况下处于隐藏状态。如需显示开发者选项,请依次转到设置 > 关于手机,然后点按 build 号七次。返回上一屏幕,在底部可以找到开发者选项。
在某些设备上,“开发者选项”屏幕所在的位置或名称可能有所不同。
现在,通过 USB 连接设备。再通过执行 adb devices 验证设备是否已连接。
可以看到,当我用usb数据线连接之后再使用命令,设备信息马上就显示了出来,这里的一串字符 “d894ec0d” 就是手机的序列号
(4)Android 调试桥 (adb) —— 通过 WLAN 连接到设备
每次都要用数据线连接手机有点麻烦,而且手机多起来,几部手机可能会掐架抢位置,为了避免这些情况,就可以通过wifi进行连接,不过需要做一些前置条件。
- 将 Android 设备和 adb 主机连接到这两者都可以访问的同一 WLAN 网络
- 使用 USB 线将设备连接到主机。
- 设置目标设备以监听端口 5555 上的 TCP/IP 连接。
adb tcpip 5555
- 拔掉连接目标设备的 USB 线。
- 找到 Android 设备的 IP 地址。您可以在设置 > 关于手机 > 状态信息 > IP 地址下找到 IP 地址
- 通过 IP 地址连接到设备。
adb connect device_ip_address:5555
- 使用adb devices确认主机已连接到目标设备
(5)Android 调试桥 (adb) —— 使用adb进行一系列操作
如需从设备中复制某个文件或目录(及其子目录)
adb pull remote local
如需将某个文件或目录(及其子目录)复制到设备
adb push local remote
安装 APK
adb install path_to_apk
模拟点击
adb shell input tap 100 300
模拟滑动
adb shell input swipe 600 800 400 800
adb命令能做的事情还有挺多的,比如打开应用,输入文本,模拟手机按键等等,有兴趣可以自行探索
-
-
android 调试工具adb
2018-03-07 17:36:11android 调试工具adb可以独立运行,可以快速进行项目调试,特别适合不是android开发人员,但是需要adb工具。 -
安卓调试调试webview Chrome://inspect 404 windows离线资源包
2020-11-30 13:39:01安卓调试调试webview(类似Chrome://inspect的功能)国内404,大家都懂的,经过我各种折腾制作完成,不会出现空白页面,无需科学那啥,不限机型,Hybrid App等H5混合应用开发必备 -
Unity for Android 调试工具(基于UDP)
2018-07-26 16:46:20通过UDP实时打印Unity 发布Android后的调试日志。里面包含UdpClient 和 UDPServer 只用把UdpClient 挂载在项目里面, 然后启动UdpServer 。 对应好ip和端口号 -
platform-tools(安卓调试工具包).zip
2021-11-01 16:09:51包括adb:android调试工具fastboot:boot工具platforms/目录:包括android的平台。包含在android.jar库中。你必须指一个平台为你的编译目标。system-images目录:编译好的系统映像。模拟器可以直接加载。sources目录... -
Android代码-安卓调试工具
2019-08-08 05:19:25Android-Debug-Tools 安卓调试工具,包括无线链接,日志搜集! 启动以后后台手机日志,可以手动添加过滤 raoweiyz@gmail.com logcatlog@gmail.com -
Android调试工具adb
2020-12-28 18:14:59Android调试工具adb --Web页面 adb即Android Debug Bridge(安卓调试桥),用于安卓调试用,它就是一个命令行工具,通过电脑端与手机设备或模拟器交互设置。它存在于 sdk/platform-tools 目录下,调试工具adb可以独立... -
关于ADB的Android Debug Bridge(安卓调试桥)那些事
2021-01-04 13:12:12ADB是Android Debug Bridge(安卓调试桥)的缩写,用于通过电脑代码脚本(或者电脑程序等)控制手机进行操作。 2. ADB的安装与否: 判断ADB是否安装成功(此处安装成功包括已经配置了“环境变量”),只需按 win+R ... -
WiFiDebugging:无线安卓调试
2021-06-11 16:34:47通常,您通过 USB 电缆将您的 Android 设备连接到您的 PC 并使用 Android 调试桥 (adb) 进行调试。 但你不需要电缆! Adb 能够通过 wifi 连接到您的手机。 为了简化这一点,我编写了一个简单的应用程序,它设置到您... -
Android调试WebView页面
2020-05-22 19:50:27加载webview 的界面上写上: if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { mWeb.setWebContentsDebuggingEnabled(true); } 然后在谷歌浏览输入:Chrome://inspect ...最后一步开始调试: -
安卓调试桥adb
2018-01-31 11:31:35adb1.0.32 Android Debug Bridge(ADB)ADB的全称为Android Debug Bridge,就是调试桥的作用,存放在sdk安装目录下的platform-tools文件夹中,借助这个工具,我们可以管理设备或手机模拟器的状态,可以让你与仿真实例... -
react native调试篇(android调试篇02)
2020-06-24 15:02:55先用安卓手机连接usb到电脑上,且手机连上同一局域网的wifi,然后手机打开开发者模式,然后运行adb devices,看是否能连通 2.模拟器调试: Android Studio自带了模拟器,需要命令启动,或者编辑器里面启动; 其他... -
Android 调试桥 (adb) ,功能多样的命令行工具
2020-03-13 10:28:41Android 调试桥 (adb) 是一种功能多样的命令行工具,可让您与设备进行通信。adb 命令可用于执行各种设备操作(例如安装和调试应用),并提供对 Unix shell(可用来在设备上运行各种命令)的访问权限。 -
Android串口调试工具.zip
2019-05-24 13:24:10串口测试工具适用于各种安卓设备(电视、手机、平板灯),...功能强大,支持USB串口调试, APP支持发送16进制指令,发送字符串; 能接收设备返回信息,采用16进制显示。 本软件主要面向安卓开发人员及其硬件开发人员。 -
【前端开发】开启鸿蒙系统2.0(华为mate手机)的安卓调试 - 开发者选项 - USB调试
2022-02-23 20:38:39效果图 步骤 全是图... HBuilderX即可正常调试