二进制 XML 文件第 5 行:膨胀 class 和 appcompat 支持库更新时出错

Binary XML file line #5: Error inflating class and appcompat support library update

我的 android 应用最近遇到了问题。它工作得很好,突然一切都从一开始就崩溃了。 logcat 中的问题表明 setContentView(R.layout.splashscreen) 有问题,但今天早上一切正常。

我也尝试过从 git 恢复到我以前的版本,但问题仍然存在,我不知道为什么。我什至不知道我应该 post 代码的哪一部分,因为我认为这与我的 JAVA 代码无关,也许是 XML 中的某些内容? Logcat 下面显示的是我将 appcompat 支持库从 22.1.1 升级到 22.2.0

后的结果

将 appcompat 支持库升级到 22.2.0 后的输出

06-23 15:15:41.882  18349-18349/sconnected.nkmaribor E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: sconnected.nkmaribor, PID: 18349
java.lang.NoClassDefFoundError: android.support.v7.appcompat.R$layout
        at android.support.v7.app.AppCompatDelegateImplV7.ensureSubDecor(AppCompatDelegateImplV7.java:324)
        at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:246)
        at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106)
        at pribozic.sconnected.SplashScreen.onCreate(SplashScreen.java:54)
        at android.app.Activity.performCreate(Activity.java:5275)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2164)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2250)
        at android.app.ActivityThread.access0(ActivityThread.java:139)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1200)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5105)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at     com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
        at dalvik.system.NativeStart.main(Native Method)

这是使用 appcompat 22.1.1

时 Logcat 的输出
java.lang.RuntimeException: Unable to start activity ComponentInfo{sconnected.nkmaribor/pribozic.sconnected.MainActivity}: android.view.InflateException: Binary XML file line #5: Error inflating class pribozic.sconnected.views.SlidingTabLayout
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2200)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2250)
        at android.app.ActivityThread.access0(ActivityThread.java:139)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1200)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5105)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
        at dalvik.system.NativeStart.main(Native Method)
 Caused by: android.view.InflateException: Binary XML file line #5: Error inflating class pribozic.sconnected.views.SlidingTabLayout
        at android.view.LayoutInflater.createView(LayoutInflater.java:620)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
        at android.view.LayoutInflater.parseInclude(LayoutInflater.java:839)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:745)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
        at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:249)
        at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106)
        at pribozic.sconnected.MainActivity.onCreate(MainActivity.java:65)

如果我可以提供任何代码来帮助您帮助我,请告诉我。此外,我已经有一个月没有更改 SlidingTabLayout.class 上的任何代码,直到今天下午一切正常。

我添加了一些对象并更改了一些数据库存储,但与 MainActivity.class 应用程序开始失败的地方没有任何关系。 API 在 appcompat 支持更新和 SplashScreen 加载所有信息之前调用工作正常,但在 Splash Screen 关闭后,MainActivity 无故崩溃。

我期待任何帮助, 谢谢!

编辑 MainActivityxml 和 java 代码

这是 main.xml

的代码
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">

<include android:id="@+id/toolbar_actionbar" layout="@layout/toolbar"
    android:layout_width="match_parent" android:layout_height="wrap_content" />

<android.support.v4.widget.DrawerLayout android:id="@+id/drawer"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:layout_below="@+id/toolbar_actionbar">

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

        <FrameLayout android:id="@+id/container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:visibility="gone"/>

        <android.support.v4.view.ViewPager
            android:id="@+id/view_pager"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </RelativeLayout>

    <fragment android:id="@+id/fragment_drawer"
        android:name="pribozic.sconnected.fragments.NavigationDrawerFragment"
        android:layout_width="@dimen/navigation_drawer_width"
        android:layout_height="match_parent" android:layout_gravity="start"
        app:layout="@layout/fragment_navigation_drawer"
        tools:layout="@layout/fragment_navigation_drawer" />
</android.support.v4.widget.DrawerLayout>


</RelativeLayout>

这是 toolbar.xml 的代码:

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/ToolBarStyle" android:layout_width="match_parent"
android:layout_height="@dimen/abc_action_bar_default_height_material" android:background="@color/main_color" >

<pribozic.sconnected.views.SlidingTabLayout
    android:background="@color/main_color"
    android:id="@+id/sliding_tabs"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

</android.support.v7.widget.Toolbar>

这是 SlidingTabLayout 构造函数 的代码(其中显示了一些错误(第 109 行和第 96 行是 mTabStrip = new SlidingTabStrip(context);this(context, attrs, 0);

private final SlidingTabStrip mTabStrip;

public SlidingTabLayout(Context context) {
    this(context, null);
}

public SlidingTabLayout(Context context, AttributeSet attrs) {
    this(context, attrs, 0);
}

public SlidingTabLayout(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);

    // Disable the Scroll Bar
    setHorizontalScrollBarEnabled(false);
    // Make sure that the Tab Strips fills this View
    setFillViewport(true);

    mTitleOffset = (int) (TITLE_OFFSET_DIPS * getResources().getDisplayMetrics().density);

    mTabStrip = new SlidingTabStrip(context);
    addView(mTabStrip, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
}

好的,所以我弄清楚了问题所在并很快想出了解决方案。 问题是,我的程序超过了所有库的 65k 限制,所以我必须做的是导入 multidex 支持库并将我的应用程序 class 扩展到 MultiDexApplication。

对于遇到相同问题的任何人,这里是解决方案:

public class Application extends MultiDexApplication

然后我也重写了方法:

@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}

将依赖项添加到 gradle build:

compile 'com.android.support:multidex:1.0.1'

如果您之前没有将 Application.class 添加到清单中,请确保添加应用程序标签

<application>
...
android:name=".Application" //make sure you replace this with your package and name
...
</application>