FATAL EXCEPTION: java.lang.NoClassDefFoundError: android.support.v7.appcompat.R$layout
FATAL EXCEPTION: java.lang.NoClassDefFoundError: android.support.v7.appcompat.R$layout
我刚从 eclipse 迁移到 studio。我关注了一个博客,将项目从 eclipse 导出到 studio。该应用程序在棒棒糖中运行良好,并在棒棒糖之前的设备中抛出以下错误。
仅在工作室中出现此错误。不在日食中。
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')
}
}
如果您想查看我的清单和 act_splash.xml,请告诉我。我会在这里更新。
有什么想法吗?
你的logcatreturns
java.lang.NoClassDefFoundError: android.support.v7.appcompat
因此请更新您的支持存储库(版本 23)
和
** 对于 API 23:**
compile 'com.android.support:appcompat-v7:23.0.0'
据我所知,您在此处发布的 gradle 文件是顶级 gradle 文件,其中包含不应存在的内容。替换您的顶级 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()
}
}
在 v7 appcompat 的 android 文档中
是注释:
Note: This library depends on the v4 Support Library. If you are using
Ant or Eclipse, make sure you include the v4 Support Library as part
of this library's classpath.
我认为那是你的问题,因为你已经注释掉了 gradle:
中的行
// compile "com.android.support:support-v4:18.0.+"
再次添加该行并尝试编译项目。
而且我在你的 gradle
中没有看到 com.android.support:appcompat-v7:21.0.0
行
我遇到了同样的问题并解决了它。
这是 Dex 限制的问题。因为达到了 dex 限制,所以它创建了两个 dex 文件。 Lollipop 知道如何阅读,pre-Lollipop 不知道,除非您在 Application
class.
中指定它
请确保以下内容到位:
在build.gradle
dependencies {
compile 'com.android.support:multidex:1.0.0'
}
defaultConfig {
multiDexEnabled true
}
重要 支持 pre-Lollipop:
在Manifest中,在application标签下,
<application
...
android:name="android.support.multidex.MultiDexApplication">
...
</application>
或者如果您使用了自己的 Application
class,
让你的 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
可能是一个远景,但确保您的图像在 /res/drawable 而不是 /res/drawable-v24
看到这个答案:
我刚从 eclipse 迁移到 studio。我关注了一个博客,将项目从 eclipse 导出到 studio。该应用程序在棒棒糖中运行良好,并在棒棒糖之前的设备中抛出以下错误。
仅在工作室中出现此错误。不在日食中。
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')
}
}
如果您想查看我的清单和 act_splash.xml,请告诉我。我会在这里更新。
有什么想法吗?
你的logcatreturns
java.lang.NoClassDefFoundError: android.support.v7.appcompat
因此请更新您的支持存储库(版本 23) 和 ** 对于 API 23:**
compile 'com.android.support:appcompat-v7:23.0.0'
据我所知,您在此处发布的 gradle 文件是顶级 gradle 文件,其中包含不应存在的内容。替换您的顶级 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()
}
}
在 v7 appcompat 的 android 文档中 是注释:
Note: This library depends on the v4 Support Library. If you are using Ant or Eclipse, make sure you include the v4 Support Library as part of this library's classpath.
我认为那是你的问题,因为你已经注释掉了 gradle:
中的行 // compile "com.android.support:support-v4:18.0.+"
再次添加该行并尝试编译项目。
而且我在你的 gradle
中没有看到com.android.support:appcompat-v7:21.0.0
行
我遇到了同样的问题并解决了它。
这是 Dex 限制的问题。因为达到了 dex 限制,所以它创建了两个 dex 文件。 Lollipop 知道如何阅读,pre-Lollipop 不知道,除非您在 Application
class.
请确保以下内容到位:
在build.gradle
dependencies {
compile 'com.android.support:multidex:1.0.0'
}
defaultConfig {
multiDexEnabled true
}
重要 支持 pre-Lollipop:
在Manifest中,在application标签下,
<application
...
android:name="android.support.multidex.MultiDexApplication">
...
</application>
或者如果您使用了自己的 Application
class,
让你的 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
可能是一个远景,但确保您的图像在 /res/drawable 而不是 /res/drawable-v24
看到这个答案: