分析具体耗时的Trace view;布局复杂度工具Hierarchy View;应用启动时间;Memory、CPU、Network分析;静态代码检查工具Lint;程序稳定性monkey。adb调试桥。AndroidStudio也有Device Monitor,也提供内存监测工具 Heap,可以使用 Heap 监测应用进程使用内存情况。
Studio3.0.1查看Memory、CPU、Network的使用: View > Tool Windows > Android Profiler;然后在Debug模式下 才能查看到Memory、CPU、Network的使用率。
-- android 内存泄露分析工具—Android Monitor- https://www.cnblogs.com/zhangqie/p/8571590.html
Android Monitor是Android Studio自带的一个强大的性能分析工具,里面一共包含5个模块:Logcat、Memory、CPU、Network、GPU。
-- Tcl(最早称为“工具命令语言”"Tool CommandLanguage")是一种脚本语言。 由John Ousterhout创建。Tcl很好学,功能很强大。Tcl经常被用于快速原型开发,脚本编程,GUI和测试等方面。
HierarchyViewer分析UI性能;GPU过度绘制分析UI性能;使用Memory监测及GC打印与Allocation Tracker进行UI卡顿分析;运行DDMS->Allocation Tracker;使用Traceview和dmtracedump进行分析优化;使用Systrace进行分析优化;使用traces.txt文件进行ANR分析优化。
ANR-WatchDog,Android ANR 监听,通过监听自己的 UI Thread 是否被执行确定是否发生了 ANR,并可以设置相关事件
ANR-WatchDog- https://github.com/SalomonBrys/ANR-WatchDog
-- Android性能全面分析与优化方案研究- https://blog.csdn.net/Ch97CKd/article/details/79847070
性能优化工具:
1、手机开发者选项:调试GPU过度绘制、启用严格模式、显示CPU使用情况、GPU呈现模式分析、显示所有"应用程序无响应"。(小米手机开发开发者选项中名字)
2、IDE中:Android Studio,比如静态代码检测工具、Memory Monitor、CPU Monitor、NetWork Monitor、GPU Monitor、Layout Inspector、Analyze APK等。
3、SDK中:sdk\tools,比如DDMS、HierarchyViewer、TraceView等。
4、第三方工具:MAT、LeakCanary、GT等。
-- DoraemonKit滴滴的一款功能齐全的客户端( iOS 、Android )研发助手
App 快速接入一些常用的或者你没有实现的一些辅助开发工具、测试效率工具、视觉辅助工具,而且能够完美在 Doraemon 面板中接入你已经实现的与业务紧密耦合的一些非通有的辅助工具,功能强大,接入方便,便于扩展。
滴滴开源的研发助手- https://github.com/didi/DoraemonKit
开源组件DoraemonKit之Android版本技术实现(一)- https://juejin.im/post/5c4dcfe8518825261e1f2978
一、常用工具
【App 信息查看】 快速查看手机信息,App 信息,权限信息的渠道,避免去手机设置查找或者查看项目源代码的麻烦;
【沙盒浏览】 App 内部文件浏览的功能,支持删除和预览, 并且能通过 AirDrop 或者其他分享方式上传到 PC 中,进行更加细致的操作;
【MockGPS】 App 能定位到全国各地,支持地图地位和手动输入经纬度;
【H5任意门】 开发测试同学可以快速输入 H5 页面地址,查看该页面效果;
【Crash查看】 方便本地打印出出现 Crash 的堆栈;
【子线程UI】 快速定位哪一些 UI 操作在非主线程中进行渲染,避免不必要的问题;
【清除本地数据】 一键删除沙盒中所有数据;
【NSLog】 把所有 NSLog 信息打印到UI界面,避免没有开发证书无法调式的尴尬;
【Lumberjack】 每一条 CocoaLumberjack 的日志信息,都在在 App 的界面中显示出来,再也不需要导出日志这么麻烦。
二、性能检测
【帧率】 App 帧率信息提供波形图查看功能,让帧率监控的趋势更加明显;
【CPU】 App CPU 使用率信息提供波形图查看功能,让 CPU 监控的趋势更加形象;
【内存】 App 内存使用量信息提供波形图查看功能,让内存监控的趋势更加鲜明;
【流量】 拦截 App 内部流量信息,提供波形图展示、流量概要展示、流量列表展示、流量筛选、流量详情,对流量信息统一拦截,成为我们 App 中自带的 “Charles”;
【卡顿】 锁定 App 出现卡顿的时刻,打印出对应的代码调用堆栈;
【自定义】 可以选择你要监控的选项,包括 FPS、CPU、内存、流量。监控完毕之后,把数据保存到本地,也可以导出来做更加细致的分析;
【Load 耗时】 Load 函数耗时是 iOS 启动性能优化中重要的一项,该功能可以打印出所有 Load 函数的耗时,给开发者以参考。
三、视觉工具
【颜色吸管】 方便设计师 UI 捉虫的时候,查看每一个组件的颜色值是否设置正确;
【组件检查】 可以抓取任意一个UI控件,查看它们的详细信息,包括控件名称、控件位置、背景色、字体颜色、字体大小;
【对齐标尺】 参考 Android 系统自带测试工具,能够实时捕获屏幕坐标,并且可以查看组件是否对齐;
【元素边框线】 绘制出每一个 UI 组件的边框,对于组件布局有一定的参考意义。
> Logcat, Android Logcat调试中的V、D、I、W、E的分别代表什么?
1、Log.v 的调试颜色为黑色的,任何消息都会输出,这里的v代表verbose啰嗦的意思,平时使用就是Log.v("","");
2、Log.d的输出颜色是蓝色的,仅输出debug调试的意思,但他会输出上层的信息,过滤起来可以通过DDMS的Logcat标签来选择
3、Log.i的输出为绿色,一般提示性的消息information,它不会输出Log.v和Log.d的信息,但会显示i、w和e的信息
4、Log.w的意思为橙色,可以看作为warning警告,一般需要我们注意优化Android代码,同时选择它后还会输出Log.e的信息。
5、Log.e为红色,可以想到error错误,这里仅显示红色的错误信息,这些错误就需要我们认真的分析,查看栈的信息了。
-- Trojan是一个稳定高效的移动端轻量级日志SDK:
Trojan is an efficient mobile terminal lightweight log SDK- https://github.com/eleme/Trojan
1 简洁的 API,通过几行代码就可以接入,实现日记记录功能;
2 使用 AOP 技术 Lancet 框架插桩收集通用日志,并且支持增量编译;
3 使用 mmap 技术,保证日记记录的高效性;
4 扩展性高,开发者可以自定义日志文件的上传功能;
5 流量开销小,支持在线配置,远程控制用户日志文件上传与否;
6 稳定性高,目前已稳定运行在饿了么物流团队众包等多个 APP 上。
A lightweight and fast AOP framework for Android App and SDK developers- https://github.com/eleme/lancet
> 工具集
Android取得唯一标识符方案- https://github.com/appdevzhang/AndroidUniqueID
一个Nice的Android 工具类- https://github.com/l123456789jy/Lazy
android 工具- http://blog.csdn.net/h416756139/article/details/51489984
An Android library to hook and fix Toast BadTokenException- https://github.com/drakeet/ToastCompat
Android各种工具类Utils-Everywhere- https://github.com/SenhLinsh/Utils-Everywhere
A OkHttp 3 downloader implementation for Picasso 2.- https://github.com/JakeWharton/picasso2-okhttp3-downloader
美团点评集团移动端基础日志组件Logan进行日志收集、上传、分析- https://github.com/Meituan-Dianping/Logan
-- 对读取短信验证码封装库的思考- https://github.com/parkingwang/sms-captcha
在界面创建时注册:
mCaptchaObserver = SmsCaptcha.with(this)
.captchaLength(4)
.addressLike("10657%")
.fillTo(mSmsCode)
.createAndRegister();
界面销毁时移除注册:
mCaptchaObserver.unregister();
Android功能最全的快速开发框架- https://blog.csdn.net/qq_33445600/article/details/78487857
collect the following utils- https://github.com/Blankj/AndroidUtilCode
Personal android code from my technology blogs- https://github.com/Jhuster/Android
2017 Android GitHub 常用开源框架汇总- https://blog.csdn.net/u011791526/article/details/76653264
Android Common Knowledge- https://github.com/LiuGuiLinAndroid/Android
-- 测试工具,严苛模式StrictMode
// 在Application 或Activity的onCreate中调用
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork() // or .detectAll() for all detectable problems
.penaltyLog()
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.detectLeakedClosableObjects()
.penaltyLog()
.penaltyDeath()
.build());
> 1.下载工具,APP升级工具:
多任务下载,断点续传,支持线程数控制- https://github.com/why168/FileDownloader
APP升级工具:
Android--APK更新总结- http://blog.csdn.net/trent1985/article/details/42293371
Android Downloader是一个开源的多线程,多任务下载框架- https://github.com/ixuea/AndroidDownloader
> 应用的启动时间统计:adb shell am start -W [PackageName]/[PackageName.MainActivity]
> 2.内存优化和内存分析工具,调优工具,(MAT或YourKit内存检测工具)
Android Studio 自带的内存分析工具Memory。
Android内存优化和内存分析- https://blog.csdn.net/chenjian723122704/article/details/79015868
1.Android Lint工具时AndroidStudio中集成的一个Android代码提示工具,它可以给你的布局、代码提高非常强大的帮助。
2.Memory Monitor工具是Android Studio自带的一个内存监视工具,他可以很好的帮助我们进行内存实时分析。通过点击Android Studio左下角的“Android Profiler”标签,打开Memory Monitor工具
3.TraceView是一个Android下的可视化性能调查工具,它用来分析TraceView日志。通过代码生成精确范围的TraceView日志;通过Android Device Monitor生成TraceView日志
4.MAT(Memory Analyzer Tool)工具是一个分析内存的强力助手。生成HPROF文件
Memory Monitor - 内存监视工具,内存泄露分析工具。Android工具:LeakCanary—内存泄露检测神器 MAT.
- Android安全专项- ADB动态调试工具- https://github.com/swdunlop/AndBug
Andbug 有两种启动方式,一种是以进程id方式启动,一种是以包名方式启动;
-- 性能检测和监测
Android自带的SysTrace与TraceView性能分析工具。
AndroidPerformanceMonitor - https://github.com/markzhai/AndroidPerformanceMonitor
Watchdog - https://github.com/wojteklu/Watchdog
-- 内存泄露LeakCanary,MAT
MAT(内存分析工具)-- http://www.eclipse.org/mat/downloads.php
内存泄露LeakCanary- https://github.com/square/leakcanary
LeakCanary- http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0510/2860.html
LeakCanary eclipse version- https://github.com/cheyiliu/leakcanary/tree/leakcannary_eclipse_project
-- 其他调优工具
(1) dmtracedump
sdk tools下的另外一个工具dmtracedump可用于生成上述log文件内的函数调用关系图,不过在windows上稍微大点的文件即或报错
(2) visualvm
看到ddms提供了dump hprof file的功能,本来准备生成hprof文件用visualvm打开试试,结果一直打不开..
在银狐的帮忙下,发现android sdk tools dump的hprof需要经过sdk tools下的hprof-conv转换为标准的hprof文件,才能通过visualvm或eclipse的MemoryAnalyzer打开进行分析
-- TraceView是一个非常强大的性能分析工具;Eclipse Memory Analyzer Tool 来分析Android app的内存使用;
TraceView是从每个方法运行的时间的角度来分析应用的性能:
第一种方法:最简单的方式就是直接打开DDMS
第二种方法:使用android.os.Debug.startMethodTracing();和android.os.Debug.stopMethodTracing();方法
使用adb pull /sdcard/test.trace /tmp 命令将trace文件复制到你的电脑中,然后用DDMS工具打开就会出现上面图了。
-- 移动开发:美团外卖Android Lint代码检查实践- https://blog.csdn.net/MeituanTech/article/details/79922364
静态代码检查框架有很多种,例如FindBugs、PMD、Coverity,主要用于检查Java源文件或class文件;再例如Checkstyle,主要关注代码风格;但我们最终选择从Lint框架入手,因为它有诸多优势:
1.功能强大,Lint支持Java源文件、class文件、资源文件、Gradle等文件的检查。
2.扩展性强,支持开发自定义Lint规则。
3.配套工具完善,Android Studio、Android Gradle插件原生支持Lint工具。
4.Lint专为Android设计,原生提供了几百个实用的Android相关检查规则。
5.有Google官方的支持,会和Android开发工具一起升级完善。
6.Android 内存检测工具,内存泄露工具LeakCanary
Lint开发过程中最主要的工作就是实现Scanner。Lint中包括多种类型的Scanner如下,其中最常用的是扫描Java源文件和XML文件的Scanner。
JavaScanner / JavaPsiScanner / UastScanner:扫描Java源文件;
XmlScanner:扫描XML文件;
ClassScanner:扫描class文件;
BinaryResourceScanner:扫描二进制资源文件;
ResourceFolderScanner:扫描资源文件夹;
GradleScanner:扫描Gradle脚本;
OtherFileScanner:扫描其他类型文件;
-- lint的配置与使用
android studio如何运行lint:File——Settings——Editor——Inspections;在Inspection模块里找到Android Lint。
Lint、FindBugs等静态代码检测工具
【我的Android进阶之旅】Android自定义Lint实践- https://blog.csdn.net/ouyang_peng/article/details/80374867
android studio 使用lint工具优化app时全过程记录;android studio lint的配置与使用?
Android 性能优化:使用 Lint 优化代码、去除多余资源。Lint 是Android Studio 提供的 代码扫描分析工具,它可以帮助我们发现代码结构/质量问题,同时提供一些解决方案,而且这个过程不需要我们手写测试用例。
-- Lint 优化的内容主要包括以下几方面:
Correctness:不够完美的编码,比如硬编码、使用过时 API 等
Performance:对性能有影响的编码,比如:静态引用,循环引用等
Internationalization:国际化,直接使用汉字,没有使用资源引用等
Security:不安全的编码,比如在 WebView 中允许使用 JavaScriptInterface 等.
Lint 也可以使用 Gradle 运行:Windows:gradlew lint;Gradle 中配置 Lint
android {
lintOptions {
// Turns off checks for the issue IDs you specify.
disable 'TypographyFractions','TypographyQuotes'
// Turns on checks for the issue IDs you specify. These checks are in
// addition to the default lint checks.
enable 'RtlHardcoded','RtlCompat', 'RtlEnabled'
// To enable checks for only a subset of issue IDs and ignore all others,
// list the issue IDs with the 'check' property instead. This property overrides
// any issue IDs you enable or disable using the properties above.
check 'NewApi', 'InlinedApi'
// If set to true, turns off analysis progress reporting by lint.
quiet true
// if set to true (default), stops the build if errors are found.
abortOnError false
// if true, only report errors.
ignoreWarnings true
}
}
-- StrickMode与ANR,BlockCanary
StrickMode严苛模式检测耗时与内存问题- https://blog.csdn.net/u013263323/article/details/53760135
ANR检测工具BlockCanary- https://github.com/moduth/blockcanary
> 3.App性能监视工具Emmagee,测试工具
App性能监视工具Emmagee:Emmagee主要用于监控单个App的CPU,内存,流量,启动耗时,电量,电流等性能状态的变化,且用户可自定义配置监控的频率以及性能的实时显示,并最终生成一份性能统计文件。Emmagee是网易杭州研究院QA团队开发的一个简单易上手的Android性能监测小工具。
网易QA测试工具Emmagee- https://github.com/NetEase/Emmagee
> 4.Facebook APk压缩和优化Redex
> 5.Android编译工具
facebook buck加快构建App,Buck 的侵入性太强了,微信已经切换到了Buck;buck 是Facebook推出的一款高效率的Android App/Java项目构建工具,目前仅支持 Unix/Linux 平台。因为它使用多线程编译方式,所以相对于其他的构建工具而言编译时间可以缩短50%甚至更多。
从 Gradle 切换过去的成本挺高的,现在 Android Studio 2.0 Preview 版已经出了,支持 Instant Run Feature,Instant run,android studio 2.0 后推出的 Instant run,支持三种 swap,各有特点,但是功能最强大的 cold swap 仅仅支持 5.0以上版本;
阿里 Freeline,目前正在用的动态编译,八月份开源的。
> 6.Android文件监控,文件改动监视器工具
watchman文件监控,用来监视文件并且记录文件的改动情况,当文件变更它可以触发一些操作,例如执行一些命令等等。
> 7.调试优化工具类:
Android调试工具:debug;
facebook stetho安卓调试工具,网络请求,sqlite,preference,一切都是可视化的操作,无须自己在去使用adb,也不需要root你的设备。 buck编译工具.
Stetho 是 Faceboo k开源的Andorid调试工具。当你的应用集成Stetho时,开发者可以访问Chrome,在Chrome Developer Tools中查看应用布局,网络请求,sqlite,preference 等等。官网:http://facebook.github.io/stetho/
> 8.布局优化
1.Android布局优化:Hierarchy Viewer
2.layoutopt是一个可以提供layout及其层级优化提示的命令行,在sdk16以后已经被lint取代,在Windows->Show View->Other->Android->Lint Warnings查看lint优化提示.
3.Dump UI Hierarchy for UI Atomator,分析UI层级
4.systrace
> 9.日志工具:日志调试工具:Logcat/Debug
Android 日志记录框架 ZLog- https://github.com/0xZhangKe/ZLog
logcat AndroidStudio控制台中找不到Android Monitor,
并且也找不到Logcat- http://blog.csdn.net/zxc514257857/article/details/73834327
支持手机和控制台log的小工具-ZeusLog- https://github.com/xsfelvis/ZeusLog
Logcat更优雅的日志分析- http://blog.csdn.net/lebang08/article/details/73718213
Android log tools, AndroidLoggerAPK - https://github.com/GuangliHan/AndroidLoggerAPK
好的Log工具,灵感来自于Logger- https://github.com/ZhaoKaiQiang/KLog
方便的打印函数调用和耗时日志,Method call logging based on dexposed- https://github.com/promeG/XLog
A lightweight android logger support auto tag, file logging and show logs on screen- https://github.com/allenz8512/zlog
> 10.XML/JSON解析
XML中有dom4j,JSON有Jackson、Gson。dom4j.jar官网- https://dom4j.github.io/
> 11.Gradle插件
Jake Wharton写的Gradle插件,下载和管理Android SDK- https://github.com/JakeWharton/sdk-manager-plugin
> 12.测试工具
单元测试框架:Juint,Robolectric,Mockito
UI自动化测试框架:Monkey,MonkeyTalk,Robotium,UIAutomator,Appium
静态代码分析:CheckStyle,FindBugs,PMD,Lint
持续集成:Jenkins+Gradle
通过monkey对程序在提交测试前做自测,可以检测出明显的导致程序不稳定的问题,执行monkey只需要一行命令,提交测试前跑一次可以避免应用刚提交就被打回的问题。adb shell monkey -p com.jared.performancetool -v 50011
-- Monkeyrunner和Appium自动化工具,研究了几种响应时间的测试方案
第一种测试方案是针对App启动时间的测试;
第二个方案是针对App启动到首页加载的测试;同时也可扩展于页面响应时间的测试;
第三钟方案主要用于页面响应时间的测试。
> 13.应用上传和下载的平台
蒲公英fir.im 是应用内测平台,请自行甄别应用风险
持续集成- Jenkins+Android+fir+蒲公英 搭建持续集成环境
> 14.网络请求工具
OkHttp3 的多路复用及缓存实现原理;
OkHttp3 的核心 API 结构及作用;
基于Glide的二次封装- http://blog.csdn.net/github_33304260/article/details/70237052 https://github.com/libin7278/ImageLoader
Android Okhttp3框架二次封装请求管理类- http://blog.csdn.net/csdn_aiyang/article/details/67634476
okhttp是高性能的http库,支持同步、异步,而且实现了spdy、http2、websocket协议,api很简洁易用,和volley一样实现了http协议的缓存。
OKHttp正确取消网络请求- http://blog.csdn.net/huwan12345/article/details/78294016
下载工具:强大的下载引擎 okdownload- https://github.com/lingochamp/okdownload
Android使用DownloadManager实现文件下载- http://blog.csdn.net/q4878802/article/details/53749276
> 15.内存泄露检测工具 LeakCanary,OOM
能显示内存泄露的对象的引用链(显示泄露通知在leak中)。
Eclipse 上使用LeakCanary 请移步:https://github.com/SOFTPOWER1991/LeakcanarySample-Eclipse
Android studio上使用LeakCanary 请移步:https://github.com/SOFTPOWER1991/leakcanarySample_androidStudio
内存泄露自动探测神器leakcanary- https://github.com/square/leakcanary
LeakCanary开源项目(使用及原理github项目文档的翻译)- http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0510/2860.html
Android性能优化之利用强大的LeakCanary检测内存泄漏及解决办法- http://www.jb51.net/article/97694.htm
Android性能优化之利用LeakCanary检测内存泄漏及解决办法- https://www.cnblogs.com/whoislcj/p/6001422.html
- 关键的步骤:LeakCanary与显式的内存泄露 隐式的内存泄露
1.通过 Bugsnag, Crashlytics, 或者 Developer Console了解OOM
2.主动重现问题。你可能需要买或者借或者偷一个遭遇了崩溃的特殊设备(并不是所有的设备上都会发生内存泄漏!)。你还需要找出是什么串在一起导致了内存泄漏。
3.当OOM出现时进行堆转储(dump the heap)(这里介绍了如何做).
4.使用MAT或YourKit内存检测工具检测内存的变化,并找出哪个对象应该被垃圾回收;
5.从那个对象到GC roots推断最短的强引用路径;
6.在路径中找出不存在的引用,并修复memory leak;
LeakCanary,Android|Java的内存检测库
有时,leak trace 不够,你需要通过 MAT 或者 YourKit 深挖 dump 文件。
内存泄露基本上都是由于不恰当的使用,当对象使用完了之后,还存在强引用,导致该释放的时候,没有释放,一直占用内存.
在打release包的时候LeakCanary库根本就不会打进去,所以不不用担心引入额外的方法,只有在debug或者test模式下LeakCanary库才会打包进APK。
LeakCanary 中文使用说明- https://www.liaohuqiu.net/cn/posts/leak-canary-read-me/
LeanCanary源码及源码分析- https://github.com/square/leakcanary
.hropf内存快照分析- https://github.com/square/haha
使用dump内存的方式来进行泄漏确认,HAHA这个开源项目直接提供了解析hprof文件的功能。
LeakCanary源码分析- https://www.jianshu.com/p/481775d198f0
LeakCanary核心原理源码浅析- https://blog.csdn.net/cloud_huan/article/details/53081120
LeakCanay的入口是在application的onCreate()方法中声明的,其实用的就是Application的ActivityLifecycleCallbacks回调接口监听所有activity的onDestory()的,在这个方法进行RefWatcher.watch对这个对象进行监控。
具体是这样做的,封装成带key的弱引用对象,然后GC看弱引用对象有没有回收,没有回收的话就怀疑是泄漏了,需要二次确认。然后生成HPROF文件,分析这个快照文件有没有存在带这个key值的泄漏对象,如果没有,那么没有泄漏,否则找出最短路径,打印给我们,我们就能够找到这个泄漏对象了。
-- LeakCanary基本工作原理如下:
1.RefWatcher.watch() 创建一个 KeyedWeakReference 到要被监控的对象。
2.然后在后台线程检查引用是否被清除,如果没有,调用GC。
3.如果引用还是未被清除,把 heap 内存 dump 到 APP 对应的文件系统中的一个 .hprof 文件中。
4.在另外一个进程中的 HeapAnalyzerService 有一个 HeapAnalyzer 使用HAHA 解析这个文件。
5.得益于唯一的 reference key, HeapAnalyzer 找到 KeyedWeakReference,定位内存泄漏。
6.HeapAnalyzer 计算 到 GC roots 的最短强引用路径,并确定是否是泄漏。如果是的话,建立导致泄漏的引用链。
7.引用链传递到 APP 进程中的 DisplayLeakService, 并以通知的形式展示出来。