Android:如何使用"adb shell wm"来模拟其他设备

Bri*_*Rak 32 android adb

所以我买了一台用于开发的Nexus 10,并且对能够使用"adb shell wm"命令模拟其他设备的前景感到非常兴奋,该命令具有大小,密度和过扫描子命令.

但是,我在制作这项工作时遇到了一些问题.我想看看是否还有其他人遇到过这些问题.为了便于讨论,我想说我正在尝试模拟一部典型的手机,运行以下内容:

adb shell wm size 800x480
adb shell wm density 240
adb shell wm overscan reset
Run Code Online (Sandbox Code Playgroud)

首先,设置大小会使菜单栏变得混乱.在纵向模式下,只有部分按钮存在且尺寸错误,而在横向模式下,菜单栏完全丢失.实际上,即使重置了所有内容,在重新启动设备之前,它仍然会丢失.有什么解决方法吗?

其次,过扫描命令有什么作用?我无法在任何地方找到任何文档.

第三,有没有办法让设备使用新尺寸的1个像素渲染屏幕到物理屏幕的1个像素?也就是说,如果我将大小设置为800x480,我希望看到新屏幕占用的空间非常大.相反,似乎发生的事情是800x480屏幕被拉伸,因此最长的一面恰好适合物理显示器.我怀疑过扫描可能是答案,但当我尝试将其设置为0,0,800,480时,它会永久挂起我的系统,我不得不重置为出厂图像以便恢复.

最后,有没有办法让平板电脑根据菜单栏在方向更改期间发生的情况来模拟手机?在平板电脑上,菜单栏会进入屏幕的新底部,但在手机上,它会保持原样.

到目前为止,我喜欢这个设备,但如果我能让这个设备模拟工作正常,我会喜欢它!提前感谢任何指针.

Bri*_*Rak 25

好吧,我想我已经弄清楚这个有用了.我将尝试回答我在原帖中提出的每个问题.然后我将分享一些我已经了解的有关如何有效使用它的其他事情.

  • 有没有办法避免在主屏幕上弄乱菜单栏?

不是我发现的,并且更改设置似乎具有累积效果,通常会在重新启动设备之前将主屏幕搞砸.但是,您通常至少可以解锁设备,这足以使用.关键是首先启动您的应用程序,然后在运行它时调整大小和密度.只需按下电源按钮即可关闭屏幕,根据需要调整大小和密度,然后重新启动屏幕,解锁,您的应用程序将以新的大小和密度正常运行.

  • 过扫描命令有什么作用?

我发现只有对此的倾斜引用,但我能确定的最好,它适用于电视或其他显示器,并不是所有的屏幕都可以保证可用/可见.我不认为它真的适用于普通手机或平板电脑.

  • 有没有办法让设备使用新尺寸的1个像素渲染屏幕到物理屏幕的1个像素?

不是我发现的.但它可能没关系.我认为使用adb shell wm命令的主要目的是测试布局,而不是看像素完美的图形.(相信我,你得到的是像素完美可能最远的东西.)

  • 有没有办法让平板电脑根据菜单栏在换向期间发生的情况来模拟手机?

也许我做错了,但对我来说,菜单栏表现得奇怪且不可预测.有时它很大,有时它只是缺失.不要指望能够使用它.是的,这很糟糕.如果有解决方案的话请有人问候.

  • 那么如何有效地使用"adb shell wm"呢?

我不知道为什么,但我花了一点时间来掌握这一点.这可能是因为当我第一次开始这个时,我的思维并不习惯Android的思考方式.但它实际上非常简单.

首先,设置所需的大小(以像素为单位).对于这个讨论,假设我们将使用1024x600.

接下来,设置DPI.但你应该怎么做呢?

这是棘手的部分(好吧,我最初没有得到的部分).当您设置DPI时,您将设置方程的另一半,该另一半将确定虚拟应用程序空间的DP中的维度,应用程序将使用该维度来呈现自身.(呃,我知道,但我起初认为指定的DPI主要用于选择资源,实际上也是如此.)

让我们来看看使用屏幕尺寸为1024x600的各种密度的后果.

首先,请记住

dp = px * (160 / dpi)
Run Code Online (Sandbox Code Playgroud)

这意味着如果我们将dpi指定为160,应用程序将认为可用空间为1024dp x 600dp.相反,如果我们使用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的文字显得相当微不足道.

也许我只是房间里最慢的孩子,但我花了一段时间才真正理解这一点.我希望它可以帮助其他人.

  • @breceivemail:wm仅在JellyBean 4.3及更高版本中可用.您可以在4.3之前的设备中使用am display-size和am display-density (2认同)
  • 我的 Nexus 4 底部 20% 不起作用。我使用:`wm overscan 0,0,0,210` 让 android WM 不在该区域绘制任何内容,以便我可以再次完全操作所有绘制的区域.. (2认同)