09-11 19:17:47.707 E/AndroidRuntime( 2980): FATAL EXCEPTION: main
09-11 19:17:47.707 E/AndroidRuntime( 2980): Process: com.android.phone, PID: 2980
09-11 19:17:47.707 E/AndroidRuntime( 2980): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.phone/com.android.phone.settings.fdn.FdnSetting}: android.view.InflateException: Binary XML file line #20: Error inflating class com.android.phone.settings.fdn.EditPinPreference
09-11 19:17:47.707 E/AndroidRuntime( 2980): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2891)
09-11 19:17:47.707 E/AndroidRuntime( 2980): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2969)
09-11 19:17:47.707 E/AndroidRuntime( 2980): at android.app.ActivityThread.-wrap11(Unknown Source:0)
09-11 19:17:47.707 E/AndroidRuntime( 2980): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1658)
09-11 19:17:47.707 E/AndroidRuntime( 2980): at android.os.Handler.dispatchMessage(Handler.java:108)
09-11 19:17:47.707 E/AndroidRuntime( 2980): at android.os.Looper.loop(Looper.java:206)
09-11 19:17:47.707 E/AndroidRuntime( 2980): at android.app.ActivityThread.main(ActivityThread.java:6730)
09-11 19:17:47.707 E/AndroidRuntime( 2980): at java.lang.reflect.Method.invoke(Native Method)
09-11 19:17:47.707 E/AndroidRuntime( 2980): at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
09-11 19:17:47.707 E/AndroidRuntime( 2980): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:845)
09-11 19:17:47.707 E/AndroidRuntime( 2980): Caused by: android.view.InflateException: Binary XML file line #20: Error inflating class com.android.phone.settings.fdn.EditPinPreference
09-11 19:17:47.707 E/AndroidRuntime( 2980): at android.preference.GenericInflater.createItem(GenericInflater.java:372)
09-11 19:17:47.707 E/AndroidRuntime( 2980): at android.preference.GenericInflater.createItemFromTag(GenericInflater.java:416)
09-11 19:17:47.707 E/AndroidRuntime( 2980): at android.preference.GenericInflater.rInflate(GenericInflater.java:467)
09-11 19:17:47.707 E/AndroidRuntime( 2980): at android.preference.GenericInflater.inflate(GenericInflater.java:300)
09-11 19:17:47.707 E/AndroidRuntime( 2980): at android.preference.GenericInflater.inflate(GenericInflater.java:237)
09-11 19:17:47.707 E/AndroidRuntime( 2980): at android.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:254)
09-11 19:17:47.707 E/AndroidRuntime( 2980): at android.preference.PreferenceActivity.addPreferencesFromResource(PreferenceActivity.java:1410)
09-11 19:17:47.707 E/AndroidRuntime( 2980): at com.android.phone.settings.fdn.FdnSetting.onCreate(FdnSetting.java:532)
09-11 19:17:47.707 E/AndroidRuntime( 2980): at android.app.Activity.performCreate(Activity.java:6975)
09-11 19:17:47.707 E/AndroidRuntime( 2980): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213)
09-11 19:17:47.707 E/AndroidRuntime( 2980): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2844)
09-11 19:17:47.707 E/AndroidRuntime( 2980): ... 9 more
09-11 19:17:47.707 E/AndroidRuntime( 2980): Caused by: java.lang.NoSuchMethodException: <init> [class android.content.Context, interface android.util.AttributeSet]
09-11 19:17:47.707 E/AndroidRuntime( 2980): at java.lang.Class.getConstructor0(Class.java:2320)
09-11 19:17:47.707 E/AndroidRuntime( 2980): at java.lang.Class.getConstructor(Class.java:1725)
09-11 19:17:47.707 E/AndroidRuntime( 2980): at android.preference.GenericInflater.createItem(GenericInflater.java:363)
09-11 19:17:47.707 E/AndroidRuntime( 2980): ... 19 more
检查代码:
1.自定义控件在xml文件中引用,看看应用方法是否有问题
2.由于是xml中引用,在控件自定义类中应该定义构造如下方法,检查构造方法的可见域是否为public
public AccountSelectionPreference(Context context) {
this(context, null);
}
public AccountSelectionPreference(Context context, AttributeSet attrs) {
super(context, attrs);
}
3.检查1和2后,都没有问题,但就是找不到构造方法,意外发现是模块代码默认打开了混淆编译,而proguard.flags文件中并未–keep报错的类,因此java在反射查找自定义类的构造方法时提示NoSuchMethodException异常
4.修改方法是在模块.mk文件中配置LOCAL_PROGUARD_ENABLED := disabled关闭混淆或在proguard.flags中–keep具体的类