2014-03-14 61 views
4

我是新來的android開發我開始使用「層次結構查看器」......它可以很好地與模擬器一起使用sdk。
事情是我想在真實的設備上使用它。我做了我的研究,並發現,由於安全原因,它只適用於模擬器和開發人員手機,從各種來源。如何使「Hierarchy Viewer」在真實設備中工作?

Official Android Developer Site

但我也發現,在我們的項目中使用了「ViewServer.java」,我們可以使用真實設備此工具。

GitHub romainguy/ViewServer Link:

我明白了什麼是有兩件事情要做......

  1. 包含此ViewServer.java到我們的項目

  2. 添加INTERNET權限清單中。 (<uses-permission android:name="android.permission.INTERNET"/>

在閱讀java文件中的註釋的同時,我也瞭解瞭如何在onCreate和stuffs中使用addWindow方法。

但即使所有這些試圖這個程序安裝到我的設備,偏食「無效的APK文件!」 ......兩個真實設備和仿真器。

但正常的應用程序可與模擬器,倒是沒有應用程序與此Java文件中它!

如果還有其他事情需要處理,有人會好好解釋一下。因爲我分享的鏈接有很多其他文件,我不確定它們是什麼以及如何使用它們。我關心的只是其中的「ViewServer.java」文件。

如果可能的話,有人可以一步一步解釋我需要做什麼?

+0

數字體系瀏覽器不與舊版本的Android兼容啓用階層觀衆的詳細信息。你的設備運行什麼版本? – CaptainTeemo

+0

請參閱[在真實設備上使用herarchy查看器](https://stackoverflow.com/a/45055690/6521116)。 –

回答

3

嘗試使用HierarchyViewerSupport註解,但不知道它會有多少幫助。

這@HierarchyViewerSupport註釋允許你在任何設備上使用HierarchyViewer檢查工具。

確保您的應用程序有INTERNET權限和android:可調試=真正的清單。

就註解你的活動與@HierarchyViewerSupport:

@HierarchyViewerSupport 
@EActivity 
public class MyActivity extends Activity { 

} 

我不知道夥計多少,這可以幫助基於你的問題我也有點RND,我認爲它不可能在產品構建的原因,你已經解釋。

無論如何,如果你希望你當前活動的屏幕像小部件信息的細節以及所有你仍然可以得到它使用一個Python腳本,以及我所開發的,但再不會生產建設工作。

請嘗試以上解決方案,並告訴我們是否有幫助。

+0

:我會檢查你的建議並回復Pawan,謝謝反正...... –

+0

請參閱http://stackoverflow.com/questions/13244374/how-can-i-get-all-component-and-widget-id -of-current-android-window-screen-progr/14394852#14394852,以防萬一,如果你想要一些現成的解決方案來獲取使用python的活動屏幕的小部件信息。 – 2014-03-14 09:46:38

+0

對不起,它不能解決問題,我仍然可以至少給你一個建議的投票... –

-1

有激活查看服務器的一個真實的設備上執行的proccess是基於一種方式

Enabling hierarchy viewer on rooted android devices

注:我們改變了一些步驟,使其工作。


步驟0:您的設備必須植根,你需要安裝Busybox的安裝程序(HTTP:// play.google.com/store/apps/details?id=com.jrummy.busybox.installer & HL = EN)


第1步:備份

我們應該讓位於/系統/框架中的所有庫的備份。

$ mkdir ./system 
$ mkdir ./system/framework 
$ adb pull /system/framework/ ./system/framework/ 

第2步:啓動類路徑

$ adb shell 
# echo $BOOTCLASSPATH 

請保留它,我們將在以後使用它!它應該是這個樣子:

/system/framework/core.jar:/system/framework/conscrypt.jar:/system/framework/okhttp.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/framework2.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/mms-common.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/apache-xml.jar:/system/framework/webviewchromium.jar 

步驟3:用baksmali

Donwload smali和baksmali here

$ java -jar baksmali-2.0.3.jar -x ./system/framework/services.odex -a 19 -d ./system/framework/ 
  • -x = ODEX文件
  • -a = api等級
  • -d =框架目錄

您將看到一個.OUT /文件夾


第4步:修改WindowManagerService.smali

修改的.out/COM /安卓/服務器/ WM/WindowManagerService.smali文件始終返回false

查找「.method private isSystemSecure()Z」並在返回語句「return v0」之前添加「const/4 v0,0x0」。


步驟5:重新組裝

$ java -jar smali-2.0.3.jar ./out -o classes.dex 
  • -o =輸出文件

步驟6:郵編DEX文件

$ zip services_hacked.jar ./classes.dex 

步驟7:上傳設備

$ adb push ./services_hacked.jar /data/local/tmp 
$ adb push ./dexopt-wrapper /data/local/tmp 

步驟8上的文件:重新裝入

$ adb shell 
# su 
# mount -o rw,remount /system 

步驟9:使dexopt-包裝可執行

# cd /data/local/tmp 
# chmod 777 ./dexopt-wrapper 

第10步:生成.odex文件

排除 「:/system/framework/services.jar」 從引導類路徑!

# ./dexopt-wrapper ./services_hacked.jar ./services_hacked.odex <copied bootclasspath excluding ":/system/framework/services.jar"> 

應該是這個樣子:

# ./dexopt-wrapper ./services_hacked.jar ./services_hacked.odex /system/framework/core.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/framework2.jar:/system/framework/android.policy.jar:/system/framework/apache-xml.jar:/system/framework/filterfw.jar:/system/framework/sechardware.jar:/system/framework/wimax.jar 

第11步:複製簽名

「每個ODEX與位於52字節ODEX內的偏移量20字節簽名簽名。讓我們讓操作系統認爲我們的黑客索引與系統簽名相匹配,方法是將其從原始的「

# busybox dd if=/system/framework/services.odex of=/data/local/tmp/services_hacked.odex bs=1 count=20 skip=52 seek=52 conv=notrunc 
  • 如果=輸入文件的
  • =輸出文件
  • BS =塊大小(1個字節)
  • 計數=塊數
  • 跳過=輸入文件偏移
  • 尋求=輸出文件偏移量
  • conv = notrunc - 不截斷輸出文件。

第12步:替換原文件

# dd if=/data/local/tmp/services_hacked.odex of=/system/framework/services.odex 

第13步:啓動ViewServer

服務器將開始在端口4939

$ adb shell service call window 1 i32 4939 

服務器正在運行?

$ adb shell service call window 3 

你必須看到類似

結果:地塊(00000000 00000001 '........')


注:第9步之後,所有的過程是非常與apkudo相同

5

ViewServer僅適用於Android 4.1之前的Android以外的非根用戶設備。

對於Android 4.1+以上的設備,您只需設置ANDROID_HVPROTO=ddm環境變量並重新啓動adb服務器。

這是隱藏的Android功能之一,在免費Udacity課程中找到它 - Android Performance(第1課:渲染,第12部分「層次結構查看器演練」,視頻下面的鏈接)。

+0

這工作得很好! +1! –