ADB学习笔记
简介:
ADB的全称为Android Debug Bridge(调试桥), 它是一个客户端-服务器端程序,其中客户端是你用来操作的电脑, 服务器端是android设备。作用显而易见,能方便我们在PC上对手机进行调试的一些工作。
原理:
ADB Client即终端shell,通过shell命令,发送指令给ADB Server,Client和Server之间还是要通过TCP/IP通信的,Server侦听本机的5037端口,Client试图去连接这个端口。ADB Daemon:运行在手机上的一个进程,作用是连接到adb server(通过usb或tcp-ip),并且为client提供一些服务。
安装:
网上自行下载ADB工具包,配置安装路径至.bash_profile中。
e.g:
export PATH=$PATH:/xxx/adt-bundle-mac-x86_64-20140702/sdk/platform-tools
然后source .bash_profile后,adb version检查是否安装成功。
常用命令:
adb devices 列出所有的连接设备
adb logcat 查看Log
adb logcat -c 清除log
adb kill-server 终止adb服务进程
adb start-server 重启adb服务进程
adb install <apk文件路径> 安装apk到虚拟机
adb install -r <apk文件路径> 保留数据和缓存重新安装
adb push <本地文件地址> <设备目的地存储地址>将本地文件复制到设备
adb pull <设备文件地址> <本地存储地址> 将设备文件复制到本地
adb shell monkey -v -p 你的包名 500 执行monkey测试500次
Chrome ADB插件介绍
这里介绍2款Chrome的ADB相关插件,ChromeADB & ADB for Chrome。
ChromeADB:提供了图形化页面,调试起来比较方便。
下载地址:ChromeADB下载
手机通过usb连上PC后,启动Chrome ADB,接下来你就可以进行:
1.查看设备信息;
2.APP安装/卸载/杀进程/清除数据;
3.直接通过PC远程操作手机;(Controller)
4.查看手机的内存,进程,磁盘等信息;
ADB for Chrome:提供工作效率的小工具
下载地址:ADB for Chrome下载地址
举例一个场景:以前报bug时通过需要在bug中附带截图,通常会先通过手机截屏后,转发给微信,然后在PC微信版中保存到PC,这样路径太长,对工作效率提升肯定有不小影响。
有了这个小工具,我们可以通过手机连上usb后,开启这个应用,然后一键就可以完成截图,会在PC指定目录下保存一份,这样直接附在JIRA上是非常高效的。
通过这个工具,我们可以在chrome中完成 adb shell,截图及录像功能,提升工作效率,哈哈。
接下来在学习Android UI自动化测试时,会展开讲更多关于ADB的应用场景。
相关文章:
ADB学习笔记
简介: ADB的全称为Android Debug Bridge(调试桥), 它是一个客户端-服务器端程序,其中客户端是你用来操作的电脑, 服务器端是android设备。作用显而易见,能方便我们在PC上对手机进行调试的一些工作。 原理…...
Appium简介
Appium简介 Appium is an open source, cross-platform test automation tool for native, hybrid and mobile web apps, tested on simulators (iOS), emulators (Android), and real devices (iOS, Android, Windows). 优缺点 优点显而易见,支持webview、hybri…...
Appium-java API详解
目前appium-java最新版本是5.0.0-BETA3,因此就拿最新的说明,以Java为例,首先引入java client的依赖:<dependency><groupId>io.appium</groupId><artifactId>java-client</artifactId><version&g…...

Appium学习遇到的坑
安装篇 Q1:安装时要求java运行环境为最低1.8,我原先的jdk1.7无法运行。 A1:升级jdk后解决。附appium安装教程 配置篇 Q2:运行提示error:Error: Android bootstrap socket crashed: Error: getaddrinfo ENOTFOUND lo…...

每天一个adb命令:pm 命令详解
介绍adb shell中一个很重要的命令——pm(Package Manager),这个命令主要用于获取和安装在 Android 设备上的应用信息。 关于pm命令的用法解析。命令行下输入adb shell pm即可获得关于pm的用法帮助,如下所示: usage: …...

每天一个adb命令:am 命令详解
am 这个命令可以帮助我们直接启动activity、service及广播。 adb shell am 可以查看命令的详细说明。 usage: am [subcommand] [options] usage: am start [-D] [-W] [-P <FILE>] [--start-profiler <FILE>][--sampling INTERVAL] [-R COUNT] [-S] [--opengl-tra…...
每天一个adb命令:input 命令详解
input命令可以用于向键盘发送一些指令,先看看input的官方说明: Usage: input [<source>] <command> [<arg>...]The sources are:mousekeyboardjoysticktouchnavigationtouchpadtrackballstylusdpadtouchscreengamepadThe commands an…...

每天一个adb命令:screen 命令详解
screen命令分为截屏screencap命令及录制视频screenrecord命令。 screencap命令: sage: screencap [-hp] [-d display-id] [FILENAME]-h: this message-p: save the file as a png.-d: specify the display id to capture, default 0. If FILENAME ends with .png …...

每天一个adb命令:wm命令详解
wm命令可以用于获取屏幕分辨率、像素密度等。 前提:Android4.3及以上 usage: wm [subcommand] [options]wm size [reset|WxH]wm density [reset|DENSITY]wm overscan [reset|LEFT,TOP,RIGHT,BOTTOM]wm size: return or override display size.wm density: overrid…...

每天一个adb命令:dumpsys命令详解
dumpsys是一个能帮助我们对手机进行性能分析的命令,它可以帮助我们获取电池、内存、cpu、磁盘、wifi等等信息,具体能查询的信息可以通过命令: adb shell dumpsys | grep DUMP OF SERVICE DUMP OF SERVICE DockObserver: DUMP OF SERVICE Sm…...

每天一个adb命令:monkey命令详解
国际惯例,先用adb shell monkey 看看具体用法。 具体用法 usage: monkey [-p ALLOWED_PACKAGE [-p ALLOWED_PACKAGE] ...][-c MAIN_CATEGORY [-c MAIN_CATEGORY] ...][--ignore-crashes] [--ignore-timeouts][--ignore-security-exceptions][--monitor-native-cra…...

JSON相关知识点
JSON是工作中经常会遇到的一种数据结构,下面来讲讲与他相关的一些知识点。 JSON简介: JSON: JavaScript Object Notation(JavaScript 对象表示法) JSON 是存储和交换文本信息的语法,类似 XML。 JSON 比 XML 更小、更快,更易解析。 JSONObj…...
markdown编写入门
什么是markdown? Markdown 是一种轻量级的「标记语言」,通过简单的标记符号来格式化排版,是文本展现的更加优美,形象。 markdown优点: 1.不像office,存在版本兼容问题,markdown无此问题&#…...
log4j学习demo
log4j简介 Log4j是Apache的一个开放源代码项目,是项目中比较常用的日志记录组件。 引入log4j <dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.14</version></dependency> log4…...
idea常用技巧收集
idea相比eclipse的优点我在这里就不赘述了,更多参考:idea官网,本文重点讲下自己在idea使用过程中常用的一些技巧,以后随时更新…… 主要分成三大块: 1. 系统设置 2. 快捷键 3. 其他设置 系统设置 主题风格设置:默…...

浅谈spring
这个话题感觉是老生常谈了,但是作为基础,我还是要沉淀一下,深刻认识。 spring核心思想 简洁的讲spring的核心思想就是两个特性:控制反转(IOC)和面向切面(AOP) 。 但是这两个概念却不太容易理解,我一开始也不太理解&…...

spring装配bean
最近在看《spring实战》一书,记录下spring装配bean这一章中自己学到的一些知识点。下面简单说明下bean和装配这两个概念的意思。 bean:在spring中代表组件,通过bean将不同的组件联系在一起。装配:是指创建应用对象之间协作关系的行…...

初识spring RestTemplate
《spring实战》读书笔记之初识spring RestTemplate。首先需要先了解下什么是REST。 REST:官方解释,表述性状态转移。 感觉还是不知所云,参考下怎样用通俗的语言解释REST,以及RESTful? 即URL定位资源,用H…...
记一次爬虫实践(一):思路及模拟登录
需求背景 因为我们的应用通常运行在h5上,因此图片格式选择了加载较快的webp格式,但是运营提起有在pc上批量下载图片(要求图片格式)的需求,目前比较麻烦,需要登录h5-找到接口中对应图片资源-一张张另存为到…...

记一次爬虫实践(二):下载图片及打包
登录之后,我们开始下载图片。 这里把完整程序po一下。 程序中用到的框架是flask,参考Flask文档 # encodingUTF-8 import zipfileimport flask import requests import os import urllib2 import time from flask import Flask, jsonifyapp Flask(__n…...

spring boot入门学习
spring boot 入门基础前言什么是spring boot?为什么要用spring boot?spring boot的常用注释有哪些?Controller层RequestMapping详解配置相关自动配置一个简单的demo实践idea如何新建spring boot项目?前言 微服务这个概念最近比较…...

常用HTML标签简介
HTML:超文本标记语言 这个没啥技术含量,这里只是简单介绍,主要是要熟能生巧。 布局相关: <!-- 标记导航 --><nav></nav> <!-- 标记侧边栏 --><aside></aside> <!-- 标记正文 --><…...

idea插件开发入门
前言:最近想研究一款自动在idea中定位缺陷及发送JIRA的快捷工具,方便提升报自动化脚本的bug的效率。因为idea插件学习是必不可少了,沉淀小结如下。 idea插件开发入门插件用途工程创建配置文件Action实现开发语法常用对象常用方法运行效果打包…...

spring boot深入及启动原理探究
围绕spring boot 的优点,本文我们来探究一下spring boot具体是如何实现这些特性的。 自动配置:针对很多Spring应用程序和常见的应用功能,Spring boot能自动提供相关配置;起步依赖:告诉Spring boot需要什么功能,它就能引…...

接口测试那些事儿
什么是接口? 首先,在讲接口测试之前,我们先要搞清楚接口类型的概念。 接口:可能是系统与系统(包括服务与服务)之间的调用,像A系统(服务)给B系统(服务&#x…...

myeclipse的一些使用技巧
一直都是看别人的博客,学习别人的心得, 但是软件行业涉及的技术太多,学过的很多东西都忘了,今天我也弄个博客玩玩, 把我所学的,工作中遇到的问题也做做记录,方便自己,也方便他人&…...

mysql重置Root密码
方法一: 在my.ini的[mysqld]字段加入: skip-grant-tables 重启mysql服务,这时的mysql不需要密码即可登录数据库 然后进入mysql mysql>use mysql; mysql>更新 user set passwordpassword(新密码) WHERE Userroot; mysql>flush privileges; 运…...

JfreeChart柱状图饼图
JfreeChart画出柱状图饼图的代码片段及详细的注释,附件为JfreeChart中文API一览表,和生成的柱状图,饼图图片 import java.awt.Font; import java.io.FileOutputStream; import java.io.IOException; import org.jfree.chart.C…...

自动装配的底层实现
public void autowire(Object o, Map<String, String> map) throws Exception { // 获得map 所有key Set<String> keys map.keySet(); // 获得Object中所有属性 // 获得Class对象 Class c o.getClass(); // 获得…...

java基础需要强化之关键
多线程 进程和线程的区别 ProccessBuilder 和 Runtime.getRuntime().exec java中两种线程的创建方式 extends Thread和 implements Runnable 线程的生命周期:线程创建、Runnable、Running、Blocked、dead sleep、yield、join 等方法 线程打断 interrupt 什么是守护线…...

MD5加密算法详解
注:MD5不是绝对的安全,有俩md5解决 /******************************************************************************* * keyBean 类实现了RSA Data Security, Inc.在提交给IETF 的RFC1321中的keyBean message-digest * 算法。 *****************…...

javaSE之反射
什么是反射? 简单的说:剖析java类中的各个组成部分,映射成一个个java对象。 在java.lang.reflect中。 反射用在哪? 多用于框架和组件,利用反射技术写出复用性高的通用程序 我只列出了反射中几个常用的API 类 Class 构…...

HTTP协议详解
HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作…...

javaSE之动态代理
动态代理技术: 使程序更加灵活,可以在代理java类的时候加入一些功能。 很类似过滤器,区别: 过滤器是自己编写西横须实现的功能 动态代理是JVM内部机制 实现步骤: 1.真是业务对象(被代理对象) 2…...

javaSE之类加载器
类加载器,说白了就是加载类的呵呵 .类加载器负责将.class文件(可能在磁盘上,也可能在网络上)加载到内存中,并为之生成对应的java.lang.Class对象 .当JVM启动时,会形成由三个类加载器组成的初始类加载器层次…...

java的几种对象(PO,VO,DAO,BO,POJO)解释
一、PO:persistant object 持久对象,可以看成是与数据库中的表相映射的java对象。最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作。 二、VO:value object值对象。通常用于业务层之间的数据传递࿰…...

webservice学习记录笔记(一)
一、先理解什么是服务 现在的应用程序变得越来越复杂,甚至只靠单一的应用程序无法完成全部的工作。更别说只使用一种语言了。 写应用程序查询数据库时,并没有考虑过为什么可以将查询结果返回给上层的应用程序,甚至认为,这就是数…...

Java中堆内存和栈内存详解
Java把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后&am…...

Hibernate 主键生成策略
<generator>:主键生成策略 increment:递增,hibernate自动产生主键.max(id) ,采用带走1算法,多进程/集群环境下不推荐使用. identity:设置表主键是自增字段,映射文件采用该策略,依赖底层库, auto_increment identity 适用于MySQL、DB2、MS SQL Server,…...

flex 计算指定日期是本年度第几周
/** * 计算指定日期是本年度第几周 *传日年月日,返回number */ private function weekOfYear(yyyy:Number,mm:Number,dd:Number):Number{ var myDate:Date new Date(yyyy, mm - 1, dd); var startDate:Date new Date(yyyy,0,1); v…...

flex获得指定时间段一共多少天
/** * 获得某个时间段 共有多少天 * param start 开始时间 * param end 结束时间 * return * */ public static function getTimeDays( start:Date , end:Date , type:int0):Number { var _re:int 0 ; if(start && end) { var _str:Numbe…...

flex计算某一日期的周开始和结束日期
/** * 计算 某个日期所在周的开始日期和结束日期 * param value * param isZero 0 当前时间 , 1 日期时间设置为0 , * return Array[0] 周一的日期 Array[1] 周日的日期 * */ public static function getCurrentDayFE(value:Date, isZero:int1):Array…...

flex时间便秒,秒变时间
/** * 秒变时间 * return * */ public static function secondToTime(second:int):Array { var hh:intint(second / 3600); var mm:intint((second % 3600) / 60); var ss:intsecond % 60; return [hh, mm, ss]; } /** * 时间变秒 * param hh 小时 * …...

flex勾选,自动刷新
mxml: <s:CheckBox label"刷新" buttonMode"true" id "frc" selected "{model.autoFresh}" change "{model.startAutoQuery(frc.selected)}"/> <s:Label text"间隔"/> &…...

flex 下拉框验证组件
//继承验证 public class ObjectNullValidator extends Validator { public function ObjectNullValidator() { super(); requiredFieldError "必须填写" ; } private var _invalidCode:String "222"; public static function validateS…...

flex dataGrid组件全选,反选,并获取选中值,代码详解
//1 组建重写 package hxht.comps.datagrid{ import flash.display.DisplayObject; import flash.events.Event; import flash.events.MouseEvent; import mx.collections.ArrayCollection; import mx.collections.IList; import mx.events.DynamicEvent; import spark.comp…...

flex blaze+java通信的例子
步骤: 1:建立java web程序 2: 下载blazeDS包,解压后将WEB-INF下的 flex,lib,web.xml复制到java程序的WEB-INF下 3:打开web.xml文件将以下代码的注释去掉,并修改 <param-value>…...

flex 事件机制详解
事件机制的工作流程 1:关于事件流 当一个事件发生,必然存在一个派发事件的对象,这里称之为目标对象。 当事件发生后flashPlayer生成一个携带数据的对象,然后检查目标对象是否处于显示层中,如果是则遍历从根容器一直到目…...

flex data services
本文来自:http://www.blogjava.net/wldandan/archive/2007/12/06/165856.html 一 FDS相关概念 FDS全称Flex Data Services(现在Adobe将其改名为LiveCycle Data Services),是运行在服务器端的 java程序.它能够运行在大部分的java应用服务器上,包括JRun, JBos…...

flex验证座机,手机的框架
import mx.utils.StringUtil; import mx.validators.ValidationResult; import mx.validators.Validator; public class PhoneValidator extends Validator { public function PhoneValidator() { super(); } private var _phoneInvalid:String"正确格式(010-865…...