使用android.util
包的Log
打印日志,应该是个Android
开发人员都知道的吧,通过调用Log
的v
、d
、i
、w
、e
等方法可使日志在Logcat
控制台打印。Log
在Logcat
控制台所打印日志String.length
超过4061
,length
从4062
起,将不再打印日志,缺少的日志不会显示在Logcat
控制台。
针对这个问题,推荐使用logger组件
1、导入项目
implementation 'com.orhanobut:logger:2.2.0'
2、初始化
Logger.addLogAdapter(AndroidLogAdapter())
3、使用
Logger.d("hello")
通过logger
打印的日志length
大于4061
,会自动换行在4062
继续打印。
单元测试是应用程序测试策略中的基本测试,通过对代码进行单元测试,可以轻松地验证单个单元的逻辑是否正确,在每次构建之后运行单元测试,可以帮助您快速捕获和修复因代码更改(重构、优化等)带来的回归问题。
系列文章:
Android 单元测试只看这一篇就够了
Android单元测试(一):前言
Android单元测试(二):什么是单元测试
Android单元测试(三):测试难点及方案选择
Android单元测试(四):JUnit介绍
Android单元测试(五):JUnit进阶
Android单元测试(六):Mockito学习
Android单元测试(七):Robolectric介绍
Android单元测试(八):怎样测试异步代码
Debug
断点调试,在需要测试代码所在行左侧打好断点,连接设备后只需要点击Android Studio右上角菜单栏的Debug app
或启动应用后点击Attach Debugger to Android Process
即可开启断点调试。
Debug
不仅仅可以进行断点测试,还可以在for
循环指定断点的变量值,在if
修改指定判断的值。
具体使用详情可参考以下文章
1、Debug your app
2、Android 调试实战与原理详解
其它文章参考
1、Debug web apps
2、Debug WorkManager
Monkey
是一个在模拟器或设备上运行的程序,可生成伪随机用户事件(例如点击、轻触或手势)流以及很多系统级事件。可以使用Monkey
以随机且可重复的方式对正在开发的应用进行压力测试。
Monkey
的使用基于ADB
,通过ADB
的shell
脚本执行Android系统命令。你可以使用计算机上的命令行启动Monkey
,也可以通过脚本启动。由于Monkey
在模拟器/设备环境中运行,因此必须从该环境中通过shell
启动它。为此,可以在每个命令前面加上 adb shell
,或者直接进入shell
并输入Monkey
命令。
Monkey
在运行时会生成事件并将其发送到系统。它还会监视被测系统并查找三种特殊情况:
Monkey
限制为在一个或多个特定软件包中运行,它会监视并阻止转到任何其他软件包的尝试。Monkey
会停止并报告错误。Monkey
会停止并报告错误。基本使用:
adb shell monkey -p your.package.name -v number.of.events
Monkey
不仅仅可以使用生成伪随机用户事件,还可以指定用户事件触发位置,详情请看:
1、UI/Application Exerciser Monkey
2、Android自动化测试入门(一)Monkey和MonkeyRunner
3、【极客学院】 Android 测试
4、Android 查看apk包名、当前Activity名等
Android Studio 3.0 及更高版本中的 Android Profiler 取代了 Android Monitor 工具。Android Profiler 工具可提供实时数据,帮助您了解应用的 CPU、内存、电池资源使用情况。
Profiler
使用教程:Android Profiler
Android Studio 3.0 利用 Android Profiler 测量应用性能
为什么要介绍ADB
?ADB
不就是一个无线连接设备吗?用数据线连接设备不是更稳定吗?为什么要使用ADB
?
ADB
的全称为Android Debug Bridge
,就是可以起到调试桥的作用。
ADB
可以在局域网内通过IP地址连接到设备,使得Android Studio可以通过它对设备的应用进行安装调试等一系列设备操作,但网络不稳定可能会出现时不时连接中断的情况。
手机使用数据线连接设备相对于ADB
来说更便捷,Android 11+ 的设备还可以通过扫码进行无线连接。但这种情况是相对于小型设备和有相机扫码且系统版本Android 11+的设备来说的。一些厂家魔改的Android设备是没有Type-c接口,部分设备可能会有相机,但Android版本大于10的设备少之又少,而TV设备呢,既没有Type-c接口,也没有相机,这时候要想安装设备并调试应该只剩下ADB
这一条路可以走了。
关于ADB
连接设备调试,可以看我的文章:ADB无线连接Android设备
另外,华为的HDB
也是可以通过使用ADB
进行连接的。
Appium
是一个开源测试自动化框架,用于原生、 混合和移动 Web 应用程序的自动化测试。
关于Appium
连接设备调试,可以看我的文章:App自动化测试 —— Appium的使用
对我个人而言,Appium
的局限性还是蛮大的,与Monkey
相比,执行效率较慢,操作较为繁琐,且小型项目不适合使用Appium
进行测试。
除了以上的Appium
、Monkey
以外,还有很多很多的自动化测试工具供大家挑选,Google
力推的Espresso
也是个不错的自动化测试框架,缺点就是要写代码…感兴趣的可以了解一下:Android自动化测试入门(三)Espresso
BlockCanary
是Android平台的一个非侵入式的性能监控组件,应用只需要实现一个抽象类,提供一些该组件需要的上下文环境,就可以在使用应用之时检测主线程上的各种卡慢问题,并通过组件提供的各种信息分析出卡顿原因。
BlockCanary
的使用极其简单,仅需在build.gradle
导入依赖,接着初始化即可。
dependencies {
implementation 'com.github.markzhai:blockcanary-android:1.5.0'
// 仅在debug包启用BlockCanary进行卡顿监控和提示的话,可以这么用
// debugImplementation 'com.github.markzhai:blockcanary-android:1.5.0'
// releaseImplementation 'com.github.markzhai:blockcanary-no-op:1.5.0'
}
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
BlockCanary.install(this, BlockCanaryContext()).start()
}
}
如果有需要上传卡顿日志、调整卡顿阈值等一系列需求,可以通过继承BlockCanaryContext
类重写相关method
实现。
将代码运行至设备上,发生主线程阻塞之时,顶部通知栏会显示一条阻塞通知,点击即可观看阻塞详情。如下图MainActivity 16行代码主线程出现了阻塞1008ms的问题。
注意:部分Android版本安装
BlockCanary.install(this, BlockCanaryContext()).start()
安装程序会出错,出错建议换个设备测试。
详情请看:AndroidPerformanceMonitor
App Inspection
位于Android Studio底部的菜单栏,通过App Inspection
,Android API 26及以上设备在运行时可观察Database
、Network
、Background Task
的相关数据。
Database Inspector
用于观察本地数据库数据。
具体详情可参考:使用 Database Inspector 调试数据库
Network Inspector
用于观察网络请求相关数据,该功能类似抓包。目前,Network Inspector
仅支持 HttpsURLConnection
和OkHttp
网络连接库。如果您的应用使用的是其他网络连接库,您可能无法在Network Inspector
中查看网络活动。
具体详情可参考:使用 Network Inspector 检查网络流量
Background Task Inspector
可以让你直观呈现、监控和调试应用的后台worker
。
具体详情可参考:
WorkManager 代码示例
使用后台任务检查器调试 WorkManager worker
内存泄漏(Memory Leak),简称ML,指程序在申请内存后,无法释放已申请的内存空间,导致系统无法及时回收内存、分配内存给其他进程使用。通常少次数的内存无法及时回收并不会到程序造成什么影响,但是如果在内存本身就比较少,内存多次无法正常回收时,会导致内存不够分配,最终导致内存溢出。
内存溢出(Out Of Memory),简称OOM,指程序申请内存时,没有足够的内存供申请者使用,导致数据无法正常存储到内存中。
Leakcanary
是一个Android系统的内存泄漏检测库。
Leakcanary
添加依赖即可使用,当你你的应用程序安装上设备的同时会附带安装Leaks
App,运行应用程序的过程中若是检测到内存泄漏,通知栏与Leaks
都可以看到内存泄漏通知。
dependencies {
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.10'
}
具体详情可参考:
Leakcanary
源码:LeakcanaryLeakcanary
工作原理:How LeakCanary worksLeakcanary
修复内存泄漏:Fixing a memory leak