检索自定义视图时出现ClassCastException

Ema*_*lin 6 android android-layout

我有这样的布局:

<com.mypackage.QuadPaneHorizontalSplit
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/root_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

<!-- more views here -->

</com.mypackage.QuadPaneHorizontalSplit>
Run Code Online (Sandbox Code Playgroud)

QuadPaneHorizo​​ntalSplit类扩展了QuadPaneLayout(扩展了LineraLayout):

public class QuadPaneHorizontalSplit extends QuadPaneLayout {

    public QuadPaneHorizontalSplit(Context context) {
        super(context);
    }

    public QuadPaneHorizontalSplit(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    public QuadPaneHorizontalSplit(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected boolean isVerticalSplit() {
        return false;
    }

}
Run Code Online (Sandbox Code Playgroud)

使用setContentView设置布局后,我尝试检索自定义视图:

QuadPaneLayout quadPaneLayout = (QuadPaneLayout) findViewById(R.id.root_layout);
Run Code Online (Sandbox Code Playgroud)

一般来说效果很好,但我得到了一些崩溃报告,但有以下例外情况:

java.lang.ClassCastException:com.mypackage.QuadPaneHorizo​​ntalSplit无法强制转换为com.mypackage.QuadPaneLayout

QuadPaneHorizo​​ntalSplit显然扩展了QuadPaneLayout,因此不应该有例外.我收到Android 4.x设备和不同制造商的崩溃报告.有趣的是,所有的设备都扎根,所以也许这是一个自定义rom的问题?请注意,这行代码每天执行数千次没有问题,到目前为止我只有13次崩溃(BugSense),但我仍然想深究这一点.

我知道这个:https://stackoverflow.com/a/7823787/534471但我没有使用include这个布局,我不想添加合并标签,因为这可能会产生不良影响.

任何人都知道这里发生了什么?

Ema*_*lin 1

我终于找到了这个问题的答案,其他开发人员也可能会感兴趣。

由于我遇到了许多其他莫名其妙的崩溃,包括VerifyErrors、ClassNotFoundExceptions 和 ActivityNotFoundExceptions,我对这些崩溃报告的来源产生了怀疑。我添加了一些“额外代码”,以确保应用程序没有被篡改,如果是,错误报告会显示这一点。事实上,所有 ClassCastException 崩溃都发生在我的应用程序实例中,这些实例显然已被破解,这也解释了为什么我只收到该应用程序付费版本的崩溃报告,以及为什么付费应用程序似乎比免费应用程序崩溃更频繁。

也许是时候花额外的钱购买 DexGuard 许可证了......