微信号:grzlwx

介绍:光荣之路官方资讯

【Android测试】ADB之源码浅谈

2015-10-31 22:58 carter_d

吴老的《selenium webdriver 实战宝典》出版了!


 由于本人水平有限,所以这里简单的说说ADB源码。

 首先根据前面的理解,我们已经知道了ADB是“连接手机和PC的一个桥梁”,我们经常在PC端开发的时候,会用到eclipse这个工具,这里面有一个工具叫DDMS,如下图:

 是不是发现通过DDMS在PC端可以看到手机的一些信息,其实呢 它就是通过 “ddmlib.jar” 来建立起ADB的。因此我们今天就通过反编译 “ddmlib.jar” 来分析一下ADB源码。

反编译


 首先不得不吐槽一下百度经验的审核人员,我看到里面“反编译jar”的经验没有,于是呢我就写了一个提交了上去,结果提交了很多次,都给我打回了,真不知道这帮审核的人员是怎么想的,这种方便别人参考的内容难道不应该被通过吗?切

 好了,说正事吧。

 ddmlib.jar 放在 <SDk path>\tools\libs 的文件夹下。

 整个反编译的过程如下:

  1、下载jd-gui-0.3.3.windows.zip (我的微云链接:http://url.cn/Zz8sOj )

  2、解压之后打开,将要编译的jar导入:

  3、展开坐标的树形结构,就是源码啦

上源码


AndroidDebugBridge(源码1285行,有兴趣请点击“原文阅读”并细细研读)

实现


 既然ddmlib包含了ADB,因为我们就引入它,来进行一些ADB操作。

 1、建立一个普通的Java工程;

 2、将ddmlib.jar,包含进来(这里需要主要,还需要引入guava-15.0.jar,否则会提示少 com/geogle/common/*** 的错误,guava和ddmlib存放在同一个目录下)

 3、调用AndroidDebugBridge类中的方法,完成要实现的方法(例如下面)

import com.android.ddmlib.AndroidDebugBridge;
import com.android.ddmlib.IDevice;

public class test
{
public static void main(String[] args)
{
System.out.println(" begin ");
AndroidDebugBridge.init(false);
//AndroidDebugBridge adb = AndroidDebugBridge.createBridge("E:\\adt-bundle-windows-x86_64-20140702\\sdk\\platform-tools\\adb.exe", true);
AndroidDebugBridge adb = AndroidDebugBridge.createBridge();

WaitDevices(adb);

for (IDevice device : adb.getDevices())
{
System.out.println("Device Name: " + device.getName());
System.out.println("Device isOnline: " + device.isOnline() );
System.out.println("Device SerialNumber: : " + device.getSerialNumber());
}
System.out.println(" end ");
}

public static void WaitDevices(AndroidDebugBridge adb)
{
int count = 0;
while (adb.hasInitialDeviceList() == false)
{
try
{
Thread.sleep(500);
System.err.println("wait for devices");
count++;
} catch (InterruptedException e)
{
}
if (count > 50)
{
System.err.println("time out\n");
break;
}
}
}
}

运行上面的代码输出结果为:

begin
wait for devices
Device Name: samsung-gt_i9500-4d0019214ab6608f
Device isOnline: true
Device SerialNumber: : 4d0019214ab6608f
end

  注意区分,上面代码里的createBridge() 的方法,无参得到代表使用系统当前的ADB,如果指定了参数,且第二个参数为ture,则启动指定的ADB,这些通过源代码都可以看到。另外 createBridge() 之前必须要调用 init 的方法。接下来拿到Idevice 对象就可以实现各种各样的功能了,这里只是说一下怎么用这个lib,具体的还是自己练习吧。

(作者:carter_dream 来源:http://www.cnblogs.com/by-dream/p/4651724.html)


 
            
 
            
 
            
 
           
 
           
 
           
 
           
 
           
 
           
 
           
 
           
 
           
 
           

感谢作者,传播测试知识、技能与正能量!
分享测试生活,思考测试人生!欢迎来稿735821166@qq.com

光荣之路软件测试培训

官网:http://www.gloryroad.cn/

微信公众号:gloryroadtrain

性能测试QQ群:415987441
软件测试招聘QQ群: 203715128
自动化3群QQ: 371211499

 
光荣之路 更多文章 今天晚上的 linux 公开课- Awk 编程 7月28日(今天)晚上的 linux 公开课- shell编程 8月4日(今天)晚上的 linux 公开课- shell编程 9月1日(本周一)晚8点半,光荣之路Web自动化系列基础课—javascript第二讲 推荐本好书《与机器赛跑》
猜您喜欢 回归初心到底有多难 关于Preload,你应该知道些什么? 创业公司快速搭建立体化监控之路(WOT2016) 2016 IBM智胜数据极限存储峰会 Spark核心谈