Android如何在root設(shè)備上開啟ViewServer詳解
前言
關(guān)于什么是Hierarchy Viewer,請(qǐng)查看官方文檔:http://developer.android.com/tools/debugging/debugging-ui.html。
個(gè)人理解:Hierarchy Viewer能獲得當(dāng)前手機(jī)實(shí)時(shí)的UI信息,給界面設(shè)計(jì)人員和自動(dòng)化測試人員帶來極大的便利。
Hierarchy Viewer 工具提供了一個(gè)可視化界面顯示布局的層次結(jié)構(gòu),讓我們可以進(jìn)行調(diào)試,從而優(yōu)化界面布局結(jié)構(gòu),它需要手機(jī)開啟 ViewServer 配合使用
但是在真機(jī)上并不能使用,Android的官方文檔中提到:出于安全考慮,Hierarchy Viewer只能連接Android開發(fā)版手機(jī)或者模擬器
在代碼中是在 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
即可達(dá)到目的
這兩個(gè)屬性被定義在 /default.prop 文件中,每次系統(tǒng)啟動(dòng)會(huì)被加載到內(nèi)存中,之前看過一些修改 system 的方法,不過需要刷機(jī),風(fēng)險(xiǎn)比較大,今天偶然返現(xiàn)一個(gè)工具 mprop
這個(gè)工具可以修改內(nèi)存中一些屬性的值,但是在手機(jī)重啟后需要重新修改,不過這都是小事
依照工具內(nèi)給定的步驟修改了 ro.debuggable 的值為 1 ,然后使用下面的命令
# 判斷手機(jī)是否開啟了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
機(jī)型:一加2 氧OS 6.0.1 ,其他不同型號(hào)不同系統(tǒng)需自行測試,不保證成功
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Android實(shí)現(xiàn)GPS定位代碼實(shí)例
這篇文章主要介紹了Android實(shí)現(xiàn)GPS定位實(shí)例,對(duì)關(guān)鍵操作部份給出代碼示例并做了一定的注釋,需要的朋友可以參考下2014-07-07
解決Android Studio Design界面不顯示layout控件的問題
這篇文章主要介紹了解決Android Studio Design界面不顯示layout控件的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03
android在異步任務(wù)中關(guān)閉Cursor的代碼方法
android在異步任務(wù)中如何關(guān)閉Cursor?在我們開發(fā)應(yīng)用的時(shí)候,很多時(shí)候會(huì)遇到這種問題,下面我們就看看代碼如何實(shí)現(xiàn)2013-11-11
Android中WebView無法后退和js注入漏洞的解決方案
這篇文章主要介紹了Android中WebView無法后退和js注入漏洞解決方案,其中js注入主要針對(duì)安卓4.2及以下版本中WebView的漏洞,需要的朋友可以參考下2016-02-02
flutter實(shí)現(xiàn)掃碼槍獲取數(shù)據(jù)源禁止系統(tǒng)鍵盤彈窗示例詳解
這篇文章主要為大家介紹了flutter實(shí)現(xiàn)掃碼槍獲取數(shù)據(jù)源禁止系統(tǒng)鍵盤彈窗示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01

