38

因此,我购买了 Nexus 10 进行开发,并且对能够使用“adb shell wm”命令及其大小、密度和过扫描子命令来模拟其他设备的前景感到非常兴奋。

但是,我在完成这项工作时遇到了一些问题。我想看看其他人是否遇到/克服了这些。为了便于讨论,假设我正在尝试模拟典型的手机,运行以下命令:

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

首先,设置大小会弄乱菜单栏。在纵向模式下,只有一些按钮会出现并且比例错误,而在横向模式下,菜单栏完全消失了。实际上,即使您重置了所有内容,它仍然会丢失,直到您重新启动设备。有什么解决方法吗?

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

第三,有没有办法让设备使用新尺寸的1像素到物理屏幕的1像素来渲染屏幕?也就是说,如果我将尺寸设置为 800x480,我希望看到新屏幕占用的空间正好是这么多。相反,似乎发生的是 800x480 屏幕被拉伸,以便最长边正好适合物理显示器。我怀疑过扫描可能是答案,但是当我尝试将其设置为 0,0,800,480 时,它会永久挂起我的系统,我必须重置为出厂映像才能恢复。

最后,有什么方法可以让平板电脑模拟手机在方向改变期间菜单栏发生的情况?在平板电脑上,菜单栏会转到屏幕的新底部,但在手机上,它会保持原样。

到目前为止我喜欢这个设备,但如果我能让这个设备模拟的东西工作,我会喜欢的!在此先感谢您的任何指点。

4

3 回答 3

29

好的,我想我想出了足够的有用。我将尝试回答我在原始帖子中提出的每个问题。然后我将分享一些我学到的关于如何有效使用它的其他知识。

  • 有什么办法可以避免在主屏幕上弄乱菜单栏?

不是我发现的,更改设置似乎会产生累积效应,通常会严重破坏主屏幕,直到您重新启动设备。但是,您通常至少可以解锁设备,这已经足够有用了。关键是先启动你的应用程序,然后在运行时调整大小和密度。只需按下电源按钮关闭屏幕,根据需要调整大小和密度,然后重新打开屏幕电源,解锁,您的应用程序将以新的大小和密度正常运行。

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

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

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

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

  • 有什么方法可以让平板电脑模拟手机在方向改变期间菜单栏发生的情况?

也许我做错了,但对我来说,菜单栏以奇怪和不可预测的方式表现。有时它是巨大的,有时它只是失踪了。不要指望能够使用它。是的,这很糟糕。如果有解决方案,请有人插话。

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

我不知道为什么,但我花了一点时间才明白这一点。那可能是因为刚开始做这个的时候,脑子里还不习惯安卓的思维方式。但这实际上很简单。

首先,以像素为单位设置所需的大小。对于本次讨论,假设我们将使用 1024x600。

接下来,设置 DPI。但是你应该把它设置成什么?

这是棘手的部分(嗯,我一开始没有得到的部分)。当您设置 DPI 时,您正在设置等式的另一半,该等式将确定虚拟应用程序空间的 DP 中的尺寸,应用程序将使用它来呈现自身。(呃,我知道,但我一开始以为指定的 DPI 将主要用于选择资源,实际上它也是如此。)

让我们来看看在屏幕尺寸为 1024x600 的情况下使用各种密度的后果。

首先,请记住

dp = px * (160 / dpi)

这意味着如果我们将 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 文本显得非常微不足道。

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

于 2013-11-12T06:49:23.937 回答
1

我猜过扫描正在设置未使用的屏幕空间(“边距”)。尝试使用adb shell wm overscan 200,200,200,200 之类的方法启动应用程序,您会看到不同之处。在 Home 中,区别并不那么明显。

如果这与尺寸和密度结合起来真的有用,我不知道。我做了一些测试,但没有有用的结果。查看要使用的值有点复杂(?)...

于 2013-11-02T17:55:02.797 回答
0

以防其他人在尝试更改设备的分辨率后遇到“重置为出厂映像”崩溃菜单,这是我在不恢复出厂设置的情况下解决它的方法(多次硬重启总是会导致相同的“蓝屏”菜单) :

  • 通过usb将电脑连接到手机(手机重启后wifi连接不起作用)
  • 发回 adb 命令以设置原始尺寸(adb shell wm <width>x<height>),在手机启动和崩溃之间(你必须快)
于 2020-02-23T04:23:51.460 回答