一、android系统
1. android系统的结构
-
Linux内核层
Android系统基于Linux2.6内核,这一层为Android设备各种硬件提供了底层驱动,如显示驱动,音频驱动,照相机驱动,蓝牙驱动,WIFI驱动,电源管理等 -
系统运行库层
程序库:
Android包含一些C/C++库,这些库能被Android系统中不同的组件使用。他们通过Android应用程序框架为开发者提供服务Android运行库:
Android包括了一个核心库,该核心库提供了Java编程语言核心库的大多数功能。 -
应用框架层
这一层主要提供构建应用程序是可能用到的各种API,Android自带的一些核心应用就是使用这些API完成的,开发者也可以通过使用API来构建自己的应用程序
活动管理者(Activity Manager):控制应用程序生命周期和活动栈的所有方面
内容提供器(Content Providers):允许程序之间发布和分享数据。
资源管理器(Resource Manager):提供对非代码嵌入资源的访问,如字符串、颜色设置和用户界面布局。
通知管理器(Notification Manager):允许应用程序显示对话框或者通知给用户
视图系统(View System):一个可拓展的视图集合,用于创建应用程序用户界面 -
应用程序
顶层中有所有的Android应用程序,包括通讯录、浏览器等,你写的应用程序也被安装在这层;所有的的应用程序都是使用Java语言编写的。
2. Android应用的构成
- Android四大组件(活动,服务,内容提供者,广播接收器)
- 活动(Activity)
Activity从字面上的意思理解是活动行动的意思
在Android中,activity指与用户交互的界面,从你打开一个android应用所见到的第一个页面,就是一个Activity。
Activity作为一个可见的界面,给用户以良好的体验很重要,所以布局的漂亮与否决定一个应用用户体验
activity的生命周期:即“产生、运行、销毁”,但是这其中会调用许多方法
onCreate(创建)
onStart(激活)
onResume(恢复)
onPause(暂停)
onStop(停止)
onDestroy(销毁)
onRestart(重启) - 服务(Service)
Android下的服务是在后台运行,也是没有界面,一旦启动就会在后台运行,直到手机关机为止。
比如:用户可以使用QQ音乐在后台进行音乐播放,虽然退出了操作界面但是还在正常运行。
Service承担着大部分的数据处理工作。 - 内容提供者( ContentProvider )
Android 平台提供了Content Provider 使一个程序的指定数据集提供给其他应用程序。
可以理解为是一个特殊的“数据库”,主要是用来存取数据。 - 广播接收器( BroadcastReceiver )
主要用于接收系统或者app发送的广播事件
广播:发送消息和接收消息
- 活动(Activity)
3. Android应用测试的常用术语
- 系统碎片化:通俗的讲亦是指整个安卓平台的差异化越来越大。
- 屏幕尺寸:屏幕对角线的长度。(英寸)
- 分辨率:分辨率(屏幕分辨率)是屏幕图像的精密度,是指显示器所能显示的像素有多少。
由于屏幕上的点、线和面都是由像素组成的,显示器可显示的像素越多,画面就越精细,同样的屏幕区域内能显示的信息也越多,所以分辨率是个非常重要的性能指标之一。 - 像素:像素是指由图像的小方格组成的,这些小方块都有一个明确的位置和被分配的色彩数值,小方格颜色和位置就决定该图像所呈现出来的样子。
可以将像素视为整个图像中不可分割的单位或者是元素 - 网络制式:手机网络制式主要包括GSM、CDMA、3G、4G四种。
4. Android环境搭建介绍
- 真机测试环境
- 第三方模拟器测试
- Android自带的模拟器测试(需要搭建Android开发环境)
5. 真机环境的搭建
真机环境的搭建(将真机连接在pc上,通过pc上操作来控制手机设备的app)
- Android手机用usb数据线连接到pc的usb口上
- 打开手机的开发者模式(默认没打开):设置->关于手机->版本号10.0.0.162,连续点五次以上,会提示已经打开开发者模式
- 在设置的最上端,搜索“开发人员选项”,点进去
- 勾选其中的USB调试,弹出的提示框,要点确定确认
- 勾选仅充电模式下允许ADB调试
- 在屏幕的通知栏(屏幕从上往下划),其中usb连接的通知,点进去,都选传输文件mtp
- 在cmd->adb devices,如果能够列出设备的序列号就说明环境搭建成功
6. 第三方模拟器
- 夜神
- iTools
7. Android开发环境
- jdk环境搭建
- adt环境搭建
配置Android环境。使得其可以使用adb命令。
配置变量“ANDROID_SDK_HOME”
用户名:ANDROID_SDK_HOME
变量值:D:\alsp\java_android\adt-bundle-windows-x86_64_20140101\sdk
修改Path。
在path的变量值的最后加上:
.;%ANDROID_SDK_HOME%\platform-tools;%ANDROID_SDK_HOME%\tools;
打开cmd,输入adb进行验证
二、ADB
1. ADB简介
adb的全称为Android Debug Bridge,就是起到调试桥的作用。借助adb工具,我们可以手机管理设备或模拟器的状态。还可以进行很多手机操作,如安装软件、系统升级、运行shell命令等等。其实简而言说,adb就是连接Android手机与PC端的桥梁,可以让用户在电脑上对手机进行全面的操作。
APK:APK是Android Package的缩写,即Android安装包,APK是类似Symbian Sis或Sisx的文件格式。通过将APK文件直接传到Android模拟器或Android手机中执行即可安装。把android sdk编译的工程打包成一个安装程序文件,格式为apk。
它就是一个命令行窗口,用于通过电脑端与模拟器或者真实设备交互。包括三大内容:
电脑上运行的客户端。
在你用于开发的机器上作为后台进程运行的服务器。
一个以后台进程的形式运行于模拟器或设备上的守护程序(daemon)。
ADB命令的主要功能
1.运行Android设备的shell(命令行)
2.管理模拟器或Android设备的端口映射
3.安装/卸载APK程序
4.计算机和Android设备之间上传/下载文件
2. ADB指令的用法
-
关闭和启动adb服务 —ok
adb kill-server 关闭ADB服务 adb start-server 启动ADB服务
-
查看设备连接情况
adb devices
查看当前连接的设备, 连接到计算机的android设备或者模拟器将会列表显示
输出信息格式为:[serialNumber] [state]
例如:
-
安装和卸载APK
adb install <apk文件路径> ---将指定的apk文件安装到设备上 adb uninstall <软件名> ---卸载设备上的指定程序 这个软件名是手机上的程序包,如com.tencent.mm adb uninstall -k <软件名> --卸载程序但是保留其配置和缓存文件 com.tencent.mobileqq --qq的包名
-
指定设备进行操作
当有多个设备连接时,可以用下面的命令来直接选择执行命令的设备adb [-d|-e|-s <serial Number>] <command> d:真机(多个设备中只有一个真机时适用) e:模拟器(多个设备中只有一个模拟器时适用) s:序列号
例如:
adb -d install helloWorld.apk
adb -s emulator-5556 install helloWorld.apk -
列出当前设备上的程序包
adb shell pm list packages
删除微信APP
adb uninstall com.tencent.mm
-
上传和下载文件
- adb push <本地路径> <远程路径>
例如,把pc上的文件或文件夹上传到设备adb push foo.txt /sdcard/foo.txt
- adb pull <远程路径> <本地路径>
例如,把设备上的文件或文件夹下载到pc
演示步骤:adb pull system/app D:\apps`
1.打开cmd,输入adb shell,然后进入cd data/app
2.可以看到后缀为.apk的文件
3.新打开一个cmd,输入adb pull /data/app/com.tencent.mobileqq-1.apk E:
4.在e盘上可以看到后缀为.apk的文件
- adb push <本地路径> <远程路径>
-
日志Logcat的操作
adb logcat 在命令行中显示调试信息 adb logcat > 文件名 将logcat信息保存在文件中
控制日志格式
日志消息在标记和优先级之外还有很多元数据字段,这些字段可以通过修改输出格式来控制输出结果, -v选项加上下面列出的内容可以控制输出字段brief — 显示优先级/标记和原始进程的PID (默认格式) process — 仅显示进程PID tag — 仅显示优先级/标记 thread — 仅显示进程:线程和优先级/标记 raw — 显示原始的日志信息,没有其他的元数据字段 time — 显示日期,调用时间,优先级/标记,PID long —显示所有的元数据字段并且用空行分隔消息内容
比如:
adb logcat -v thread
日志等级
每一条日志记录都有一个等级的V:所有的信息都打印 D:debug调试信息 I: Information,信息 W:warning,警告,编译器认为你可能有问题;实际上可能没问题 E:error,错误 F: fatal,致命的 S:静默的,啥也不打印到日志 通过分析,v、s没啥用,D、I、W对我们测试人员来说用处也不大,需要过滤掉 adb logcat -v time *:W > e:\log1.txt
-
其他命令
android 启动SDK管理器 adb bugreport 查看bug报告 adb get-serialno 获取设备的序列号 adb root 获得Root权限 adb remount 将system分区从只读变成可读可写(需要ROOT权限) android list targets 显示系统内所有的android平台 android list avd 显示系统中所有模拟器 ddms 启动ddms adb reboot 重启 dmesg 打印出内核的调试信息 adb shell 挂载到Linux的空间 root: 将adb指令挂载到Android的底层Linux下 adb shell top: 获取linux下运行系统进程 我们会关注其中最后一列:包名 adb shell top -n 1 -d 1 -n 1:表示获取后台进程的次数 -d 1:获取多次的时候,每次之间的时间间隔1秒 adb push <local> <remote>:将本地的文件推送到远程设备上(模拟器或者是真机设备) adb pull <remote> <local>:将远程设备上文件拉取到本地(pc) adb shell dumpsys window | findstr mCurrentFocus :获取当前焦点的包名及activity名