UiautomatorViewer源码(四):解决null root node returned by UiTestAutomationBridge.

Source
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hzk594512323/article/details/85763333

Android P新版本出来以后,用uiautomatorViewer工具同步时,经常会报null root node returned by UiTestAutomationBridge.导致快照屏幕失败。

问题原因并不确认,网上绕了一圈,没查到个所以然,估摸着,这可能是谷歌的锅,毕竟人家盛产BUG,这,好吧,我啥都没说。

言归正传,这里提供一个方案来规避。

经过多次dump尝试,发现null root node returned by UiTestAutomationBridge.这个问题只是概率性问题,非必现,多尝试dump几次的话,便会成功,这就给了我们操作的空间。

思路清晰了,代码也就差不多到位了。基于UiautomatorViewer源码(二):持久化 UiautomatorViewer源码(三):提升快照速度 代码上,在EasyScreenshotAction类中的内部类MyThread类中,添加了如下代码:

class MyThread extends Thread {
	public String cmd="";
	public MyThread(String cmdString) {
		this.cmd=cmdString;
	}
	
	public void run() {
		for (int i = 0; i <20; i++) {
			String result="";
			try {  
				cmd = "cmd /c "+cmd;  
				Process p =Runtime.getRuntime().exec(cmd);  
				InputStream is = p.getInputStream();
				BufferedReader reader = new BufferedReader(new InputStreamReader(is));
				String line;    
				while((line = reader.readLine())!= null){
					System.out.println("SucessMsg_"+line);    
					result=result+line;
					
				}    
				is = p.getErrorStream();
				reader = new BufferedReader(new InputStreamReader(is));
				while((line = reader.readLine())!= null){
					System.out.println("ErrorrMsg_"+line);    
					result=result+line;
				}   
				p.waitFor();
				is.close();
				reader.close(); 
				p.destroy();
			} catch (Exception e) {  
				e.printStackTrace();    
			}  
			if (result.contains(" null root")) {
				System.out.println("Fail to dump UI hierarchy, try again , try time count:"+i);
				continue;
			}else {
				System.out.println("Successful to dump UI hierarchy");
				break;
			}
		}  
		
	}
}

这样,就解决了null root node returned by UiTestAutomationBridge的问题。如果有哪位大神有其他更好的解决方法的话,还望指教,小弟在此先行谢过。

 

总结:

Uiautomatorviewer源码和二次开发部分,写了四篇,到此算是暂告一段落了,后续如果有遇到新的问题,并且有了解决方案的话,仍然会更新,所以,可能还有五六七。。

Uiautomatorviewer这部分源码的开发,其实很早就做了的,只是一直没有发到博客上。所以可能源码的版本有点低,我也看过一些比较新的版本的源码,大体思路都是差不多的,但是代码风格好像不太一样了,个人怀疑,不同版本的代码应该不是同一个人or团队写的。这个工具写完之后,我自己一直在用,组内的其他同事也在用,大都在Android O 和Android P上陆陆续续遇到问题,又陆陆续续想法子解决。感觉已经够用,所以一直没有Update到最新的版本。(其实是感觉每次翻墙都有点麻烦。。)