2013-08-29 93 views
29

因此,我購買了Nexus 10進行開發,並且對能夠使用「adb shell wm」命令模擬其他設備的前景感到非常興奮大小,密度和過掃描子命令。Android:如何使用「adb shell wm」來模擬其他設備

但是,我在做這項工作時遇到了一些問題。我想看看是否有其他人遇到/克服了這些問題。爲了討論的緣故,讓我們說,我試圖模擬一個典型的電話,運行以下:

adb shell wm size 800x480 
adb shell wm density 240 
adb shell wm overscan reset 

首先,設置大小食堂菜單欄。在縱向模式下,只有一些按鈕會出現並且尺寸錯誤,而在橫向模式下,菜單欄完全缺失。事實上,即使在您重置所有設備之後,它仍然會丟失,直到您重新啓動設備。任何解決方法?

其次,過掃描命令有什麼作用?我無法在任何地方找到任何文檔。

第三,有沒有什麼辦法讓設備渲染屏幕,使用1像素的新尺寸到1像素的物理屏幕?也就是說,如果我將尺寸設置爲800x480,我希望看到新屏幕佔據了這麼多空間。相反,似乎發生的事情是800x480屏幕被拉伸,以便最長的一面恰好適合物理顯示屏。我懷疑過掃描可能是答案,但是當我嘗試將其設置爲0,800,480時,它永久掛起我的系統,並且必須重置爲出廠映像才能恢復。

最後,有沒有什麼辦法讓平板電腦根據在方向更改期間菜單欄發生的情況來模擬手機?在平板電腦上,菜單欄會顯示在屏幕的最下方,但在手機上,它會保持原樣。

我很喜歡這個設備,但如果我能夠得到這個設備模擬的東西工作,我很喜歡它!提前感謝任何指針。

+0

布賴恩你有這個問題,其中WM大小在景觀中顯示肖像,浪費太多的屏幕空間? – pt123

+0

@ pt123我的應用程序是一個風景應用程序,所以我沒有嘗試。 –

+0

沒有它交換景觀的其他方式,我忘了鏈接我的問題,它有一個圖http://stackoverflow.com/questions/20086099/adb-set-display-size-is-incorrectly-displaying-portrait- using-landscape thansk – pt123

回答

22

好吧,我想我覺得足夠的這是有用的。我將嘗試回答我在原始帖子中提出的每個問題。然後,我會分享一些我已經瞭解的有關如何有效使用這些知識的其他內容。

  • 有什麼辦法可以避免在主屏幕上搞亂菜單欄嗎?

不是我已經發現,並且改變設置似乎有一個累積效應,通常將皇家擰緊主屏幕,直到您重新啓動設備。但是,通常您至少可以解鎖該設備,這足夠有用。關鍵是首先啓動您的應用程序,然後在運行時調整大小和密度。只需按電源按鈕即可關閉屏幕,根據需要調整大小和密度,然後重新啓動屏幕,解鎖,並且您的應用將以新的尺寸和密度正常運行。

  • 過掃描命令的作用是什麼?

我發現只有斜面引用這個,但我可以確定的最好的,它是用於電視或其他顯示器,而不是所有的屏幕都保證可用/可見。我認爲這不適用於普通手機或平板電腦。

  • 有什麼辦法讓設備渲染屏幕使用1像素的新尺寸到1像素的物理屏幕?

不是我發現的。但它可能並不重要。我認爲使用adb shell wm命令的主要目的是測試佈局,而不是看像素完美的圖形。 (相信我,你會得到什麼是完美的像素可能最遠的東西。)

  • 有什麼辦法使平板電腦的方向變化期間,模擬在發生什麼菜單欄項的電話?

也許我做錯了,但對我來說,菜單欄的行爲奇怪和不可預知的方式。有時它很龐大,有時它只是缺失。不要指望能夠使用它。是的,這很糟糕。如果有解決方案,請有人打聽。

  • 那麼如何有效地使用「adb shell wm」呢?

我不知道爲什麼,但花了我一點時間來掌握這一點。這可能是因爲當我第一次開始這個時,我的思維並不習慣於Android的思考方式。但其實很簡單。

首先,以像素爲單位設置所需的大小。對於這個討論,假設我們要使用1024x600。

接下來,設置DPI。但是你應該怎麼做?

這是一個棘手的部分(當然,我沒有得到的部分)。當您設置DPI時,您將設置等式的另一半,以確定虛擬應用程序空間的DP中的尺寸,應用程序將使用該尺寸來呈現其自身。 (Duh,我知道,但我起初認爲指定的DPI將主要用於選擇資源,實際上它也是如此。)

讓我們來看看使用各種密度的後果,屏幕大小爲1024x600 。

首先,請記住,

dp = px * (160/dpi) 

如果我們指定在160 DPI這意味着,應用程序將認爲可用空間1024dp X爲600 dp。相反,如果我們使用240,就會變成微弱的683dp x 400 dp,反之,如果我們使用120,我們會得到令人印象深刻的1365 dp x 800 dp。將其設置爲80,現在您正在晃動2048dp x 1200dp。

反直覺的部分是意識到指定一個低密度會產生一個圖像,看起來像你可能在超高分辨率顯示器中看到的 - 一切都很微小。但是,這是因爲該應用程序現在正在處理相同的物理空間,就好像它是dp中的非常大的尺寸

因此,回到密度爲80的例子,我們有一個2048dp x 1200dp的虛擬區域,但它正在縮小到您實際使用的任何大小的物理屏幕。由於160dp應該是大約1英寸,那麼這將是一個寬度爲12.8英寸的幾乎是另一世界的平板電腦。但是,整個事情被縮小到平板電腦的實際大小,使您的大小30dp文本看起來很小。

也許我只是房間裏最慢的孩子,但是我花了一段時間才真正瞭解這一點。我希望它能幫助別人。

+0

當我運行'adb shell wm density 240'時出現錯誤:'/ system/bin/sh:wm:not found'。爲什麼? 我的設備已經紮根! – breceivemail

+2

@breceivemail:wm僅適用於JellyBean 4.3及以上版本。您可以在4.3之前的設備中使用顯示大小和顯示密度 – aravindsagar

+1

我的Nexus 4的底部20%不起作用。我使用'wm overscan 0,0,0,210'讓android WM不在該區域繪製任何東西,以便我可以再次完全操作所有繪製區域。 – SuperSaiyan

1

我猜過掃描是設置未使用的屏幕空間(「邊距」)。嘗試使用類似adb shell wm overscan 200,200,200,200啓動應用程序,您將看到不同之處。在家中,差異不是很清楚。

如果這對於尺寸和密度的組合非常有用,我不知道。我做了一些測試,但沒有有用的結果。這是一個有點複雜(?)看什麼值使用...

+0

看看我的問題謝謝你的答覆。它有助於確認我所看到的。我認爲它會使部分屏幕不可用,這對CRT和其他顯示器並不保證所有屏幕都可見的情況非常有用。我不明白的是,它似乎實際上超出了指定的應用程序大小。因此,如果您將應用尺寸設置爲800x600,但設置了200,0,0,0的過掃描,那麼您的實際界面只有600x600。我猜如果你真的想使用過掃描,你只需要將過掃描的數量添加到原始大小的尺寸。 –

+0

我還使用Nexus 10測試各種屏幕尺寸的應用程序。我認爲adb shell wm很有用。正如你所說的,「物理屏幕大小」不正確(它被拉伸)並且導航欄已損壞(並且還有主屏幕)。但組件的相對大小似乎是正確的,你可以看到是否適合在屏幕上等。AVD是非常緩慢的模擬舊PC上的平板電腦... –

+0

我注意到過掃描將碎片扔進狂亂。可能是什麼原因?嘗試設置過掃描並打開gmail等應用程序,並且比過掃描區域保持白色的空間更多。 – aravindsagar