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调试技巧 -> 正文阅读

[移动开发]Android调试技巧

1、定位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

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-12-05 12:09:21  更:2021-12-05 12:10:31 
 
开发: 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/24 6:19:20-

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