android_qqApk反编译/android小工具/ddms截屏
qqApk反编译:
android,开一个QQ,后台显示运行3个QQ程序:QQ的运行组件;配置文件780行;12个service;15个receiver;309个activity;
android开发小工具:
HierarchyView,弄处正在现实view的结构;
MemoryAnalyzer,内存分析;
AllocationTracker,内存分配跟踪;
Heap,堆内存信息;
DdmsTrace:分析方法调用的次数,调用时间等;
SystemInformation:(CpuLoad,MemoryUsage,FrameRenderTime);
eclipse截屏:Ddms中ScreenCapture; eclipse手机UI信息:Ddms中DumpViewHierarchyForUiAutomator;
测试分析:monkey,monekyrunner,uiautomator,Robotium(同一签名权限),单元测试,启动性能;
启动过程:Init进程->Zygote进程->SystemServer进程->SurfaceFlinger服务; Init是linux启动的第一个进程,Zygote就是由Init进程fork出来的;
SurfaceFlinger直译就是surface的投递者;每个应用在它自己的surface完成各种图形操作后,请求SurfaceFlinger显示到屏幕,surfaceflinger就会将所有的surface叠加起来,并且反映到framebuffer;
SurfaceFlinger服务运行在Android系统的System进程中,它负责管理Android系统的帧缓冲区(FrameBuffer);
SurfaceFlinger.cpp继承了BinderService
ListView优化:convertView的重复利用(item量大),利用WeakRefference(item量小); scrap,废料;
convertView是在AbsListView类中的obtainView方法中取出来的,mRecycleBin.getScrapView(position);同一个View对象不能同时被展示多次;
调试工具traceView的使用:
内部通过android.os包下,public final class Debug{ *** }实现;//生成的文件存储在/sdcard/dmtrace.trace;
可视图说明,每行下面粗的线段标注了ProfilePanel中被选中函数调用所消耗的时间段,每个线段对应一次函数的运行; Calls+RecurCalls/Total:非递归调用和递归调用的次数; time/calls:表示平均的调用时间;
tcpdump和wireshark使用:
安装tcpdump,$adb root; $adb push tcpdump /data/local/tcpdump; $adb shell chmod 6755 /data/local/tcpdump;
启动tcpdump,$adb shell /data/local/tcpdump -n -s 0; $adb shell /data/local/tcpdump -i any -p -s 0 -w /sdcard/netCapture.pcap; $adb pull /sdcard/netCapture.pcap
wireshark,安装$sudo apt-get install wireshark; $wireshark netCapture.pcap;
DDMS截屏:
DDMS通过adb调用设备端的adbd(ADB daemon)提供的framebuffer service进行截屏(源码在system/core/adb/framebuffer_service.c),在较早版本的Android中,framebuffer service通过直接读framebuffer设备(/dev/graphics/fb0)来截屏,在较新版本的Android中,framebuffer service则调用截屏工具screencap来截屏;
screencap是Android原生自带的工具,是一个C写的可执行文件,在设备上的/system/bin/下面可以找到它,screencap截屏后可保存为PNG格式文件或RGB RAW文件.
screencap的源码在frameworks/base/cmds/screencap/,它调用SurfaceFlinger提供的截屏接口ScreenshotClient,其源码在frameworks/native/include/gui/SurfaceComposerClient.h; ScreenshotClient通过进程间通信调用SurfaceFlinger service的截屏功能,源码在frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp中的函数SurfaceFlinger::captureScreen(*);
在各种截屏方法中,读framebuffer设备(/dev/graphics/fb0)在某些使用硬件overlay显示时可能无法截取到某些画面(例如video playback和camera preview画面),但是SurfaceFlinger提供的上述截屏接口则可以完美截取任何屏幕画面;
截屏操作方法:同时按下电源键和"音量-"键1秒,源码在frameworks/base/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java,调用hide类SurfaceControl的screenshot方法;
SurfaceControl.screenshot(*);//android.view包下hide类; 内部调jni的nativeScreenshot(*); 内部调SurfaceComposerClient.h的,ScreenshotClient::capture(*);
更多相关文章
- ConfigurationTest以及横竖屏切换及2.3与4.0Configuration的区别
- Android系统的四大组件详解
- Android源码阅读方式——教你如何找到ActivityManagerService
- android拾遗——四大基本组件介绍与生命周期
- Ubuntu 18 android 5.1.0源码编译
- AIDL 消息通信
- Android(安卓)进程间通讯之通过Intent+bundle实现跨进程通讯
- Android(安卓)7.1 系统Setting界面增加返回机制
- Android快速开发框架ZBLibrary源码分享