什么会导致 Android 的 DisplayMetrics.densityDpi 在 Release 和 Debug 版本之间有所不同?

What could cause Android's DisplayMetrics.densityDpi to differ between Release and Debug builds?

我正在调试 Samsung Galaxy Note 5 Android 设备 运行 5.1.1

上的一个问题

我的问题与 DisplayMetrics.densityDpi 有关,它在 Release 和 Debug 构建(来自 Eclipse)下返回不同的值。

Debug 下通过 Eclipse,DisplayMetrics.densityDpi returns 560 而发布版本 returns 420.

我完全被这个难住了,我从来没有见过一个设备能做到这一点。我怀疑我的 AndroidManifest.xml 有问题 ...

<uses-sdk
    android:minSdkVersion="4"
    android:targetSdkVersion="22" />

<supports-screens
    android:anyDensity="true"
    android:largeScreens="true"
    android:normalScreens="true"
    android:smallScreens="true"
    android:xlargeScreens="true" />

我用来检查的代码是:

    DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);

    if (metrics.densityDpi == 420) {
        Log.d(LOGTAG, "420 DPI");
    } else if (metrics.densityDpi == 560) {
        Log.d(LOGTAG, "560 DPI");
    }

使用 aapt dump badging 进行比较时,发布版和调试版的 APK 是相同的,但输出结果很奇怪。

        package: name='com.corytrese.games.startraders' versionCode='360' versionName='5.9.35'
      sdkVersion:'4'
      targetSdkVersion:'22'
      application-label:'Star Traders RPG'
      application-icon-120:'res/drawable-ldpi/icon.png'
      application-icon-160:'res/drawable-mdpi/icon.png'
      application-icon-213:'res/drawable-hdpi/icon.png'
      application-icon-240:'res/drawable-hdpi/icon.png'
      application-icon-320:'res/drawable-xhdpi/icon.png'
      application-icon-480:'res/drawable-xxhdpi/icon.png'
      application-icon-640:'res/drawable-xxhdpi/icon.png'
      application-icon-65535:'res/drawable-xxhdpi/icon.png'
      application: label='Star Traders RPG' icon='res/drawable-mdpi/icon.png'
      application-debuggable
      launchable-activity: name='com.corytrese.games.startraders.menu.MainMenu'  label='Star Traders RPG' icon=''
      uses-feature:'android.hardware.touchscreen'
      uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional'

      main
      other-activities
      supports-screens: 'small' 'normal' 'large' 'xlarge'
      supports-any-density: 'true'
      locales: '--_--' 'ca' 'da' 'fa' 'ja' 'nb' 'de' 'af' 'bg' 'th' 'fi' 'hi' 'vi' 'sk' 'uk' 'el' 'nl' 'pl' 'sl' 'tl' 'am' 'in
      ' 'ko' 'ro' 'ar' 'fr' 'hr' 'sr' 'tr' 'cs' 'es' 'it' 'lt' 'pt' 'hu' 'ru' 'zu' 'lv' 'sv' 'iw' 'sw' 'fr_CA' 'lo_LA' 'en_GB'
       'bn_BD' 'et_EE' 'ka_GE' 'ky_KG' 'km_KH' 'zh_HK' 'si_LK' 'mk_MK' 'ur_PK' 'hy_AM' 'my_MM' 'zh_CN' 'ta_IN' 'te_IN' 'ml_IN'
       'en_IN' 'kn_IN' 'mr_IN' 'mn_MN' 'ne_NP' 'gl_ES' 'eu_ES' 'is_IS' 'es_US' 'pt_PT' 'zh_TW' 'ms_MY' 'kk_KZ' 'uz_UZ'
      densities: '120' '160' '213' '240' '320' '480' '640' '65535' 'gl_ES' 'eu_ES' 'is_IS' 'es_US' 'pt_PT' 'zh_TW' 'ms_MY' 'kk_KZ' 'uz_UZ'

密度:'120''160''213''240''320''480''640''65535'

我没有看到 560 或 420 列出,也没有看到我的 xxxhdpi 可绘制对象被引用。

这是由 Android 中的错误引起的,这些错误似乎特定于 Note 5 提供的库存 OS 图片。我将向 Google 错误跟踪器报告此问题。

虽然这个问题很不幸,但可以通过使用 android:debuggable="true" 签名的 APK 进行测试来解决这个问题。这样您就可以看到设备的 'normal' 应用程序 DPI,而不是它分配给调试版本的错误 DPI。

不幸的是,这个问题会影响我测试的所有类型的调试版本:Android Studio、Eclipse 或 Ant。 None 他们能够解决 Note 5 上的问题。