UiautomatorViewer原始碼(四):解決null root node returned by UiTestAutomationBridge.
Android P新版本出來以後,用uiautomatorViewer工具同步時,經常會報null root node returned by UiTestAutomationBridge.導致快照螢幕失敗。
問題原因並不確認,網上繞了一圈,沒查到個所以然,估摸著,這可能是谷歌的鍋,畢竟人家盛產BUG,這,好吧,我啥都沒說。
言歸正傳,這裡提供一個方案來規避。
經過多次dump嘗試,發現null root node returned by UiTestAutomationBridge.這個問題只是概率性問題,非必現,多嘗試dump幾次的話,便會成功,這就給了我們操作的空間。
思路清晰了,程式碼也就差不多到位了。基於
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到最新的版本。(其實是感覺每次翻牆都有點麻煩。。)