【问题标题】:How to get the Android device screen size from the adb command line?如何从 adb 命令行获取 Android 设备屏幕尺寸?
【发布时间】:2011-11-23 13:20:49
【问题描述】:

我需要一种使用 adb 检测设备屏幕尺寸和密度的方法。 如果没有解决方案,我在哪里可以获得所有现有 Android 设备及其屏幕尺寸和密度的完整列表?

【问题讨论】:

  • 如果使用Appium,可以使用Dimension windowSize = driver.manage().window().getSize();。

标签: android adb


【解决方案1】:

您也可以通过 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

【讨论】:

    【解决方案2】:
    ANDROID:/ # dumpsys window | grep  mGlobalConfiguration                                                                                                                                                
    mGlobalConfiguration={1.0 ?mcc?mnc [en_US] ldltr sw720dp w1920dp h532dp 160dpi
    

    所以分辨率是 1920x720

    【讨论】:

      【解决方案3】:

      工作很好:

      dumpsys window | grep Display
      

      返回:显示:init=320x480 cur=320x480 app=320x480 rng=320x295-480x455

      【讨论】:

        【解决方案4】:
        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

        【讨论】:

          【解决方案5】:

          要从 ADB 获取所需信息,从命令行执行的以下命令将返回许多有关连接设备的有用属性

          > adb shell getprop
          

          通过这些属性进行过滤

          在 Unix 上使用 grep 之类的

          > adb shell getprop | grep density
          

          在 Windows 上使用 find like

          > adb shell getprop | findstr "density"
          

          返回值看起来像

          [ro.sf.lcd_density]: [240]
          

          屏幕尺寸放显示而不是密度

          【讨论】:

          • 屏幕尺寸不显示
          • 对于屏幕尺寸放显示而不是密度
          • 例如,Motorola Xoom 不显示显示信息
          • 是的,我知道,它并不适用于所有设备。
          • 密度和屏幕宽度一样吗?
          【解决方案6】:

          LCD 密度在 build.prop 中:

          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 的某个值开始。
          • ro.sf.lcd_density 不适用于我尝试过的两台设备(GT-P7510 和 Dell Streak),但适用于其他 5 台设备(GT-P1000、Galaxy Nexus、MotoA953、DROID2 GLOBAL、Xoom )
          • 如果上述命令不起作用,请尝试命令 adb shell dumpsys window |找到“mUnrestrictedScreen”
          【解决方案7】:

          查看 adb shell dumpsys 的输出。屏幕尺寸多次显示在那里,以及许多其他信息。

          ...虽然现在我在办公室,但它可以在我的手机上运行,​​但它在 Galaxy 平板电脑上却没有。该死。

          【讨论】:

            【解决方案8】:

            如果您需要使用它Screen Sizes and Densities Click here获取市场上可用的Android设备范围的当前状态

            此数据基于截至数据收集日期的 7 天内访问 Android 电子市场的 Android 设备数量

            【讨论】:

            • 我需要获取特定设备的屏幕尺寸,而不是所有现有尺寸。
            【解决方案9】:

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

            public int getScreenHeight() {
                return getDisplay().getHeight();
            }
            
            private Display getDisplay() {
                return ((WindowManager) getContext().getSystemService(
                        Context.WINDOW_SERVICE)).getDefaultDisplay();
            }
            
            
            public int getScreenWidth() {
                return getDisplay().getWidth();
            }
            

            一旦您在上面的代码中获得了显示,您就可以使用DisplayMetrics 来获取密度。 DisplayMetrics 还会为您提供绝对显示和高度。

            【讨论】:

            • 我无法在设备上启动任何应用程序。
            猜你喜欢
            • 2023-03-17
            • 1970-01-01
            • 2011-09-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多