Android Configuration相关问题如何定位分析(中英文切换、黑夜白天模式等).
Configuration的常见问题场景:
- app的size position不正确
- 中英文显示不正确
- 白天黑夜模式不正确
Configuration信息如下:
mFullConfiguration={1.0 ?mcc?mnc [en_GB] ldltr sw960dp w1707dp h795dp 240dpi xlrg long land car finger -keyb/v/h -nav/h
winConfig={ mBounds=Rect(0, 0 - 2560, 1440) mAppBounds=Rect(0, 0 - 2560, 1312)
mMaxBounds=Rect(0, 0 - 2560, 1440) mDisplayRotation=ROTATION_0
mWindowingMode=fullscreen mDisplayWindowingMode=fullscreen mActivityType=undefined
mAlwaysOnTop=undefined mRotation=ROTATION_0} s.767 fontWeightAdjustment=0}
本文重点讲解Configuration问题的分析手段,并结合真实案例进行定位分析。
1. 问题描述
前置条件:车辆电源模式为ON
操作步骤:
1.语言模式切换英文,查看界面显示
- 重启车机
预期结果:1.界面显示英文
实际结果:1.语言模式显示中文,界面显示英文
2.分析过程以及常用的debug手段
(1) adb shell dumpsys window w > ws.log
从dump WMS可以看出,系统侧的configuration是英文,也就是正常的,但是app侧确实中文,那么说明是app侧的问题。
(2)config debug如何开启config log:定位系统侧问题的手段
1. ActivityThread.java
public static final boolean DEBUG_CONFIGURATION = true;
2. WindowManagerDebugConfig.java
static final boolean DEBUG_CONFIGURATION = true;
(3)分析app调用的接口,然后针对性的在framewrok加log和堆栈信息debug:定位app侧问题的手段

Resources.java
java
/**
* Return the current configuration that is in effect for this resource
* object. The returned object should be treated as read-only.
*
* @return The resource's current configuration.
*/
public Configuration getConfiguration() {
Log.w("config200", "Resources, getConfiguration " + mResourcesImpl.getConfiguration());
if (mResourcesImpl.getConfiguration() != null && mResourcesImpl.getConfiguration().toString().contains("zh_CN]")) {
Log.w("config200", "Resources, getConfiguration ", new Throwable("xxxx"));
}
return mResourcesImpl.getConfiguration();
}
