遍歷 AccessibilityNodeInfo 報 StackOverflowError
在使用 AccessibilityService 遍歷包含 WebView 的 AccessibilityNodeInfo 時會在某些情況下必現StackOverflowError
的錯誤,導致應用崩潰。
0x00 異常
最近使用 Android 的 AccessibilityService 做一些自動化操作時發現,在部分機器上遍歷包含 WebView 頁面的 AccessibilityNodeInfo 時,某些頁面必定會引起StackOverflowError
錯誤,經過一番查證,定位到主要與系統所使用的 Android System WebView 版本有關,屬於 WebView 的 Bug。
相關說明可以參考Android: Infinite loop of FrameLayouts in accessibility tree 的討論。
檢視 Android System WebView 版本(以下2種方法任一均可):
-
應用程式
- 選單:顯示系統應用程式
- 點選列表中的:Android System WebView
- 詳情頁內包含版本
-
開發者選項
- 開啟「開發者選項」
- 開發者選項 -> WebView 實現
0x01 解決
方法有2種:
StackOverflowError
當然,方法2更具有可控性和相容性,某些情況下我們並不能左右使用者手機上 Android System WebView 的版本。
0x02 總結
此類情況發生在特定的 Android System WebView 和 Android 版本上,建議使用了相關功能的應用加上 Bug 上報的功能。
如果有什麼建議或者問題可以隨時聯絡我,共同探討學習: