Android 安卓:如何使用;亚行壳牌wm“;模拟其他设备

Android 安卓:如何使用;亚行壳牌wm“;模拟其他设备,android,adb,Android,Adb,因此,我买了一台Nexus10进行开发,对于能够使用“ADBShellWM”命令模拟其他设备的前景,以及它的大小、密度和过扫描子命令,我感到非常兴奋 然而,我在工作中遇到了一些问题。我想看看是否有其他人遇到/克服了这些问题。为了便于讨论,假设我正在尝试模拟一款典型的手机,运行以下功能: adb shell wm size 800x480 adb shell wm density 240 adb shell wm overscan reset 首先,设置大小会弄乱菜单栏。在纵向模式下,只有部分按

因此,我买了一台Nexus10进行开发,对于能够使用“ADBShellWM”命令模拟其他设备的前景,以及它的大小、密度和过扫描子命令,我感到非常兴奋

然而,我在工作中遇到了一些问题。我想看看是否有其他人遇到/克服了这些问题。为了便于讨论,假设我正在尝试模拟一款典型的手机,运行以下功能:

adb shell wm size 800x480
adb shell wm density 240
adb shell wm overscan reset
首先,设置大小会弄乱菜单栏。在纵向模式下,只有部分按钮出现且比例错误,而在横向模式下,菜单栏完全缺失。事实上,即使在您重置了所有内容之后,它仍然会丢失,直到您重新启动设备。有解决办法吗

第二,overscan命令的作用是什么?我在任何地方都找不到它的任何文档

第三,有没有办法让设备使用1个像素的新尺寸渲染屏幕到1个像素的物理屏幕?也就是说,如果我将大小设置为800x480,我希望看到新屏幕占用的空间正好如此。取而代之的是,800x480屏幕被拉长,使最长的一面正好适合物理显示器。我怀疑过扫描可能是答案,但当我试图将其设置为0,0800480时,它永久挂起了我的系统,我必须重置为出厂映像才能恢复

最后,有没有办法让平板电脑模拟手机在方向改变时菜单栏会发生什么变化?在平板电脑上,菜单栏会移到屏幕的新底部,但在手机上,它会停留在原来的位置


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

我猜overscan设置的是未使用的屏幕空间(“边距”)。尝试像adb shell wm overscan 200200启动一个应用程序,你会看到不同之处。在国内,差别并不那么明显


如果这真的是有用的结合大小和密度,我不知道。我做了一些测试,但没有有用的结果。这有点复杂(?)看看要使用什么值…

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

  • 有没有办法避免在主屏幕上弄乱菜单栏
我并没有发现这一点,而且更改设置似乎会产生累积效应,通常会在重启设备之前严重破坏主屏幕。但是,您通常至少可以解锁设备,这就足够有用了。关键是先启动你的应用程序,然后在已经运行的时候调整大小和密度。只需按电源按钮关闭屏幕,根据需要调整大小和密度,然后重新打开屏幕电源,解锁,您的应用程序将以新的大小和密度正常运行

  • overscan命令的作用是什么
我只找到了一些间接的参考,但我能确定的最好的情况是,它适用于电视或其他屏幕不保证所有屏幕都可用/可见的显示器。我认为这并不适用于普通手机或平板电脑

  • 有没有办法让设备使用1像素的新尺寸渲染屏幕到1像素的物理屏幕
我没有发现。但这可能并不重要。我认为使用adb shell wm命令的主要目的是测试布局,而不是查看像素完美的图形。(相信我,你所得到的是最完美的像素。)

  • 有没有办法让平板电脑模拟手机在方向改变时菜单栏会发生什么变化
也许我做错了,但对我来说,菜单栏的行为怪异而不可预测。有时它是巨大的,有时它只是丢失了。不要指望能够使用它。是的,这太糟糕了。如果有解决办法,请有人插话

  • 那么,如何有效地使用“adb shell wm”
我不知道为什么,但我花了一点时间才明白这一点。这可能是因为当我第一次开始这项工作时,我的大脑还不习惯Android的思维方式。但其实很简单

首先,以像素为单位设置所需的大小。在本次讨论中,假设我们将使用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的虚拟区域,但是它被挤压到你实际使用的任何大小的物理屏幕上。自1601年以来