android - 致命异常 : java. lang.NoClassDefFoundError : android. support.v7.appcompat.R$layout

标签 android android-studio gradle android-appcompat

我刚从 eclipse 迁移到 studio。我关注了一篇博客,将项目从 Eclipse 导出到工作室。该应用程序在 Lollipop 中运行良好,并在 Lollipop 前设备中引发以下错误。

仅在工作室中出现此错误。不在 eclipse 中。

FATAL EXCEPTION: main
    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 com.hsp.inventory.SplashActivity.onCreate(SplashActivity.java:53)
            at android.app.Activity.performCreate(Activity.java:5122)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270)
          //
          ......
          //

我的 gradle 文件

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        jcenter()
        mavenCentral()
        maven {
            url "http://dl.bintray.com/journeyapps/maven"
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.0'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

apply plugin: 'com.android.application'

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.google.android.gms:play-services:7.5.0'
    compile 'com.android.support:design:22.2.0'
    compile 'com.android.support:appcompat-v7:22.2.0'
    compile 'com.android.support:cardview-v7:22.2.0'
    compile 'com.android.support:recyclerview-v7:22.2.0'
    compile 'com.google.code.gson:gson:2.3'
   // compile "com.android.support:support-v4:18.0.+"

    compile project(':sliderLibrary')
    compile project(':camera')
    compile project(':volley')

    // Zxing library compile

    compile 'com.journeyapps:zxing-android-embedded:2.3.0@aar'
    compile 'com.journeyapps:zxing-android-legacy:2.3.0@aar'
    compile 'com.journeyapps:zxing-android-integration:2.3.0@aar'
    compile 'com.google.zxing:core:3.2.0'

}


android {

    compileSdkVersion 22
    buildToolsVersion '22.0.1'

    defaultConfig {
        applicationId "com.hsp.inventory"
        minSdkVersion 14
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }


    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets', 'src/main/assets', 'src/main/assets/fonts']
        }

        instrumentTest.setRoot('tests')


        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }
}

如果您想查看我的 list 和 act_splash.xml,请告诉我。我会在这里更新。

有什么想法吗?

最佳答案

我遇到了同样的问题并修复了它。 这是 Dex 限制的问题。因为达到了dex限制,所以创建了两个dex文件。 Lollipop 知道如何阅读,除非您在 Application 类中指定它,否则 Lollipop 之前的版本不知道。

请确保以下内容到位:

在 build.gradle 中

dependencies {
    compile 'com.android.support:multidex:1.0.0'
}
defaultConfig {          
    multiDexEnabled true
}

重要支持前 Lollipop :

在 Manifest 中,在 application 标签下,

<application
        ...
        android:name="android.support.multidex.MultiDexApplication">
        ...
</application>

或者,如果您使用了自己的 Application 类, 让你的 Application 覆盖 attachBaseContext

开头
 import android.support.multidex.MultiDexApplication;
 import android.support.multidex.MultiDex;

 public class MyApplication extends MultiDexApplication {
 // ......

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

引用:https://developer.android.com/tools/building/multidex.html#mdex-gradle

关于android - 致命异常 : java. lang.NoClassDefFoundError : android. support.v7.appcompat.R$layout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32110859/

相关文章:

android - 如何在 Android Studio 上冷启动运行 API 27+ 的模拟器?

java - 将 Spring Boot 1.5.8 迁移到 2.1.5 -- Gradle 问题

gradle - spring-boot-jersey 不会自动发现 jersey-media-moxy

java - 如何将字母附加到资源文件

android - RecyclerView 绑定(bind)到 FirebaseRecyclerAdapter,选中复选框时删除了错误的行

android - 如何从 Android 手机获得对 google.com/contacts 的读取权限?

android - 拆分 lib_main 已多次定义

android - 使用预先构建的静态库android

android - 如何解决错误 FAILURE : Build failed with an exception. * 其中:脚本 'C:\flutter\packages\flutter_tools\gradle\flutter.gradle' 行:1005

java - gradle 包装器需要哪些文件可写才能运行?