Android如何在root設(shè)備上開啟ViewServer詳解
前言
關(guān)于什么是Hierarchy Viewer,請查看官方文檔:http://developer.android.com/tools/debugging/debugging-ui.html。
個人理解:Hierarchy Viewer能獲得當(dāng)前手機實時的UI信息,給界面設(shè)計人員和自動化測試人員帶來極大的便利。
Hierarchy Viewer 工具提供了一個可視化界面顯示布局的層次結(jié)構(gòu),讓我們可以進行調(diào)試,從而優(yōu)化界面布局結(jié)構(gòu),它需要手機開啟 ViewServer 配合使用
但是在真機上并不能使用,Android的官方文檔中提到:出于安全考慮,Hierarchy Viewer只能連接Android開發(fā)版手機或者模擬器
在代碼中是在 WindowManagerService.java 類中做的限制,如下
private static final String SYSTEM_SECURE = "ro.secure"; private static final String SYSTEM_DEBUGGABLE = "ro.debuggable"; public boolean startViewServer(int port) { if (isSystemSecure()) { // 判斷系統(tǒng)是否是安全的 return false; } // ... try { mViewServer = new ViewServer(this, port); return mViewServer.start(); } catch (IOException e) { Slog.w(TAG_WM, "View server did not start"); } return false; } private boolean isSystemSecure() { return "1".equals(SystemProperties.get(SYSTEM_SECURE, "1")) && "0".equals(SystemProperties.get(SYSTEM_DEBUGGABLE, "0")); }
可以看到,在 isSystemSecure()
函數(shù)中,判斷了 ro.secure
和 ro.debuggable 的值
所以我們的思路就是
使 SystemProperties.get(SYSTEM_SECURE, "1")
返回 0
或者 SystemProperties.get(SYSTEM_DEBUGGABLE, "0")
返回 1
即可達到目的
這兩個屬性被定義在 /default.prop 文件中,每次系統(tǒng)啟動會被加載到內(nèi)存中,之前看過一些修改 system 的方法,不過需要刷機,風(fēng)險比較大,今天偶然返現(xiàn)一個工具 mprop
這個工具可以修改內(nèi)存中一些屬性的值,但是在手機重啟后需要重新修改,不過這都是小事
依照工具內(nèi)給定的步驟修改了 ro.debuggable 的值為 1 ,然后使用下面的命令
# 判斷手機是否開啟了view server,如果沒開啟則開啟 adb shell service call window 3 # 返回 Result: Parcel(00000000 00000001 '........') 開啟 # 返回 Result: Parcel(00000000 00000000 '........') 關(guān)閉 # 開啟 ViewServer adb shell service call window 1 i32 4939 # 關(guān)閉 ViewServer adb shell service call window 2 i32 4939
機型:一加2 氧OS 6.0.1 ,其他不同型號不同系統(tǒng)需自行測試,不保證成功
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
一個簡單的toolabar結(jié)合drawlayout使用方法
這篇文章主要為大家詳細介紹了一個簡單的toolabar結(jié)合drawlayout的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-10-10Android studio將Module打包成Jar的方法
這篇文章主要介紹了Android studio將Module打包成Jar的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-10-10Android利用MediaRecorder實現(xiàn)錄音功能
這篇文章主要為大家詳細介紹了Android利用MediaRecorder實現(xiàn)錄音功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03Android自定義ViewGroup實現(xiàn)受邊界限制的滾動操作(3)
這篇文章主要為大家詳細介紹了Android自定義ViewGroup實現(xiàn)受邊界限制的滾動操作,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-12-12詳解Android 通過Socket 和服務(wù)器通訊(附demo)
Android 通過Socket 和服務(wù)器通訊,是一種比較常用的通訊方式,這篇文章主要介紹了詳解Android 通過Socket 和服務(wù)器通訊,有興趣的可以了解一下。2016-12-12Android 圖片保存到相冊不顯示的解決方案(兼容Android 10及更高版本)
這篇文章主要介紹了Android 圖片保存到系統(tǒng)相冊不顯示的解決方案,幫助大家更好的理解和學(xué)習(xí)使用Android開發(fā),感興趣的朋友可以了解下2021-04-04