如何通过adb命令行获取Android设备的屏幕尺寸?

82

我需要一种通过adb检测设备屏幕尺寸和像素密度的方法。如果没有解决方案,那么我可以在哪里获取所有现有安卓设备的完整列表,包括它们的屏幕尺寸和像素密度?


如果使用Appium,您可以使用Dimension windowSize = driver.manage().window().getSize(); - Joshua Pinter
9个回答

128

你也可以通过ADB访问WindowManager:

$ adb shell wm
usage: wm [subcommand] [options]
       wm size [reset|WxH]
       wm density [reset|DENSITY]
       wm overscan [reset|LEFT,TOP,RIGHT,BOTTOM]

获取屏幕分辨率:

$ adb shell wm size
Physical size: 2880x1600

获取屏幕密度:

$ adb shell wm density
Physical density: 320

您也可以通过添加新的密度来覆盖原有的密度:

$ adb shell wm density 160

40

在build.prop文件中可以找到LCD密度的设置:

adb shell getprop ro.sf.lcd_density

解决方案可以在输入活动的dumpsys中找到:

# windows
adb shell dumpsys window | find "DisplayWidth"
# linux
adb shell dumpsys window | grep DisplayWidth

我已经测试了所有的设备(2.2、2.3.3、2.3.4、4.0.3; Acer Liquid E、HTC Wildfire S、HTC Incredible S、Motorola Atrix 4G、Samsung Galaxy Note、Samsung Galaxy Nexus),并且在模拟器上也能正常工作,尽管模拟器输出的内容过于干净,不适合用作解析的良好示例


还有一些事件处理程序的有效输入坐标的最小/最大范围,您可以使用getevent -p获取。在某些触摸输入设备位于边框下方的情况下,这是相关的,因此可用的最小值实际上从大于0的某个值开始。 - Nisan.H
1
ro.sf.lcd_density在我尝试的两个设备(GT-P7510和Dell Streak)上无效,但在其他5个设备(GT-P1000、Galaxy Nexus、MotoA953、DROID2 GLOBAL、Xoom)上有效。 - stansult
11
如果上述命令无效,请尝试使用以下命令:adb shell dumpsys window | find "mUnrestrictedScreen"。 - Vins

27

使用dumpsys

dumpsys window displays

显示出类似于这样的内容:

Display: mDisplayId=0
  init=1080x1920 480dpi cur=1080x1920 app=1080x1920 rng=1080x1005-1920x1845
  layoutNeeded=false

另一种方法:

dumpsys display

还显示一些有趣的东西,例如:

mDefaultViewport=DisplayViewport{valid=true, displayId=0, orientation=0, logicalFrame=Rect(0, 0 - 1080, 1920), physicalFrame=Rect(0, 0 - 1080, 1920), deviceWidth=1080, deviceHeight=1920}

最后但并非最不重要的:

dumpsys power

将显示类似于

Electron Beam State:
  mPrepared=false
  mMode=2
  mDisplayLayerStack=0
  mDisplayWidth=1080
  mDisplayHeight=1920
  mSurfaceVisible=false
  mSurfaceAlpha=0.0

您可以轻松使用它来grep mDisplayWidth和mDisplayHeight


14
从命令行执行以下命令,将返回有关连接设备的许多有用属性,以获取来自ADB的所需信息。
> adb shell getprop

要筛选这些属性

在Unix上使用类似于grep的命令

> adb shell getprop | grep density

在Windows上使用类似于find的命令

> adb shell getprop | findstr "density"

返回值看起来像

[ro.sf.lcd_density]: [240]

针对屏幕尺寸,请使用"display"而不是"density"


屏幕尺寸未显示。 - user954469
对于屏幕大小,请使用“display”而不是密度。 - Ilya Saunkin
例如,Motorola Xoom没有显示信息。 - user954469
是的,我知道,它并不适用于所有设备。 - Ilya Saunkin
“密度”和“屏幕宽度”是一样的吗? - IgorGanapolsky

1

工作是好的:

dumpsys window | grep Display

返回值: 显示: 初始=320x480 当前=320x480 应用程序=320x480 范围=320x295-480x455


1
ANDROID:/ # dumpsys window | grep  mGlobalConfiguration                                                                                                                                                
mGlobalConfiguration={1.0 ?mcc?mnc [en_US] ldltr sw720dp w1920dp h532dp 160dpi

所以分辨率是1920x720。

0

你可以使用以下代码获取屏幕尺寸:

public int getScreenHeight() {
    return getDisplay().getHeight();
}

private Display getDisplay() {
    return ((WindowManager) getContext().getSystemService(
            Context.WINDOW_SERVICE)).getDefaultDisplay();
}


public int getScreenWidth() {
    return getDisplay().getWidth();
}

一旦您在上述代码中拥有了Display,您可以使用DisplayMetrics来获取密度。DisplayMetrics还将为您提供绝对显示宽度和高度。


我无法在设备上启动任何应用程序。 - user954469

-1

查看adb shell dumpsys的输出。屏幕大小会在其中多次显示,以及许多其他信息。

...虽然现在我在办公室,虽然它在我的手机上可以使用,但在Galaxy平板电脑上却不行。真糟糕。


-2

如果你需要获取市场上可用的Android设备范围的当前状态,包括屏幕尺寸和密度点击这里

这些数据基于在数据收集日期结束的7天内访问Android Market的Android设备数量。


我需要获取特定设备的屏幕尺寸,而不是所有现有尺寸。 - user954469

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接