NoClassDefFoundError:解析失败:Landroid/support/v7/appcompat/R$styleable
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/25430551/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
NoClassDefFoundError: Failed resolution of: Landroid/support/v7/appcompat/R$styleable
提问by howdoyouturnthison
Newbie trying to finish the My first App tutorial provided by Google. On the way to this fatal exception I did import a lot of random packages to get rid of "cannot be resolved" errors for a number of things, ActionBarActivity, EditText, Fragment, LayoutInflater, etc, but not sure this matters. Anyway, my app crashes and produces a Fatal exception when I click on the "Send" button in the Main Activity. Here is my code and logcat file.
新手试图完成谷歌提供的我的第一个应用教程。在解决这个致命异常的过程中,我确实导入了很多随机包,以消除许多事情的“无法解决”错误,ActionBarActivity、EditText、Fragment、LayoutInflater 等,但不确定这很重要。无论如何,当我单击主活动中的“发送”按钮时,我的应用程序崩溃并产生致命异常。这是我的代码和 logcat 文件。
MyActivity.java (aka MainActivity.java of the tutorial)
MyActivity.java(又名教程的 MainActivity.java)
package magiccoupons.tutapp;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
public class MyActivity extends Activity {
public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.my, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
/** Called when the user clicks the Send button */
public void sendMessage(View view) {
// Do something in response to button
Intent intent = new Intent(this, DisplayMessageActivity.class);
EditText editText = (EditText) findViewById(R.id.edit_message);
String message = editText.getText().toString();
intent.putExtra(EXTRA_MESSAGE, message);
startActivity(intent);
}
}
DisplayMessageActivity.java:
显示消息活动.java:
package magiccoupons.tutapp;
import android.widget.*;
import android.content.Intent;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.*;
import android.support.v7.app.ActionBarActivity;
import android.app.Fragment;
public class DisplayMessageActivity extends ActionBarActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Get the message from the intent
Intent intent = getIntent();
String message = intent.getStringExtra(MyActivity.EXTRA_MESSAGE);
// Create the text view
TextView textView = new TextView(this);
textView.setTextSize(40);
textView.setText(message);
// Set the text view as the activity layout
setContentView(textView);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* A placeholder fragment containing a simple view.
*
public static class PlaceholderFragment extends Fragment {
public PlaceholderFragment() { }
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.activity_display_message,
container, false);
return rootView;
}
}
*/
}
build.gradle:
构建.gradle:
apply plugin: 'com.android.application'
android {
compileSdkVersion 'android-L'
buildToolsVersion '20'
defaultConfig {
applicationId "magiccoupons.tutapp"
minSdkVersion 20
targetSdkVersion 20
versionCode 1
versionName "1.0"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:support-v4:20.0.0'
//compile 'com.android.support:appcompat-v7:21.0.0-rc1'
}
activity_my.xml:
活动_我的.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="magiccoupons.tutapp.MainActivity">
<EditText android:id="@+id/edit_message"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:hint="@string/edit_message" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send"
android:onClick="sendMessage" />
</LinearLayout>
activity_display_message.xml:
activity_display_message.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="magiccoupons.tutapp.DisplayMessageActivity">
<TextView
android:text="@string/hello_world"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
and logcat:
和日志猫:
08-21 11:24:36.088 3645-3645/magiccoupons.tutapp I/Process﹕ Sending signal. PID: 3645 SIG: 9
08-21 11:37:33.584 4149-4149/magiccoupons.tutapp W/Resources﹕ Preloaded drawable resource #0x1080093 (android:drawable/sym_def_app_icon) that varies with configuration!!
08-21 11:37:33.676 4149-4149/magiccoupons.tutapp I/am_on_resume_called﹕ [0,magiccoupons.tutapp.MyActivity]
08-21 11:37:33.905 4149-4149/magiccoupons.tutapp D/gralloc_goldfish﹕ Emulator without GPU emulation detected.
08-21 11:37:38.139 4149-4149/magiccoupons.tutapp I/am_on_paused_called﹕ [0,magiccoupons.tutapp.MyActivity]
08-21 11:37:38.218 4149-4149/magiccoupons.tutapp I/Choreographer﹕ Skipped 75 frames! The application may be doing too much work on its main thread.
08-21 11:37:38.356 4149-4149/magiccoupons.tutapp D/AndroidRuntime﹕ Shutting down VM
08-21 11:37:38.369 4149-4149/magiccoupons.tutapp E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: magiccoupons.tutapp, PID: 4149
java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v7/appcompat/R$styleable;
at android.support.v7.app.ActionBarActivityDelegate.onCreate(ActionBarActivityDelegate.java:106)
at android.support.v7.app.ActionBarActivityDelegateICS.onCreate(ActionBarActivityDelegateICS.java:57)
at android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.java:99)
at magiccoupons.tutapp.DisplayMessageActivity.onCreate(DisplayMessageActivity.java:15)
at android.app.Activity.performCreate(Activity.java:5720)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1102)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2208)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2317)
at android.app.ActivityThread.access0(ActivityThread.java:143)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1258)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5070)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:836)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:631)
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.v7.appcompat.R$styleable" on path: DexPathList[[zip file "/data/app/magiccoupons.tutapp-1.apk"],nativeLibraryDirectories=[/data/app-lib/magiccoupons.tutapp-1, /vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
????????????at android.support.v7.app.ActionBarActivityDelegate.onCreate(ActionBarActivityDelegate.java:106)
????????????at android.support.v7.app.ActionBarActivityDelegateICS.onCreate(ActionBarActivityDelegateICS.java:57)
????????????at android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.java:99)
????????????at magiccoupons.tutapp.DisplayMessageActivity.onCreate(DisplayMessageActivity.java:15)
????????????at android.app.Activity.performCreate(Activity.java:5720)
????????????at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1102)
????????????at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2208)
????????????at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2317)
????????????at android.app.ActivityThread.access0(ActivityThread.java:143)
????????????at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1258)
????????????at android.os.Handler.dispatchMessage(Handler.java:102)
????????????at android.os.Looper.loop(Looper.java:135)
????????????at android.app.ActivityThread.main(ActivityThread.java:5070)
????????????at java.lang.reflect.Method.invoke(Native Method)
????????????at java.lang.reflect.Method.invoke(Method.java:372)
????????????at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:836)
????????????at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:631)
Suppressed: java.lang.ClassNotFoundException: android.support.v7.appcompat.R$styleable
at java.lang.Class.classForName(Native Method)
at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
... 18 more
Caused by: java.lang.NoClassDefFoundError: Class "Landroid/support/v7/appcompat/R$styleable;" not found
... 22 more
Sorry if I missed something and this question is completely unnecessary and/or a dupe. Thanks.
对不起,如果我错过了什么,这个问题完全没有必要和/或被骗。谢谢。
采纳答案by Patty P
You are getting that error because of the following reasons:
由于以下原因,您收到该错误:
In your Gradle build file your app is targeting and compiling with the beta version of Android that is still in development with:
在您的 Gradle 构建文件中,您的应用程序的目标是使用仍在开发中的 Android 测试版进行编译:
compileSdkVersion 'android-L'
buildToolsVersion '20'
as well as
也
minSdkVersion 20
targetSdkVersion 20
First thing to note is that this app will not run correctly (at this time) on any device without android-L flashed to it.
首先要注意的是,如果没有 android-L 闪存到它,这个应用程序将无法在任何设备上正确运行(此时)。
The real crux of your issue is in DisplayMessageActivity, it extends via inheritance [ActionBarActivity]:(https://developer.android.com/reference/android/support/v7/app/ActionBarActivity.html) this is one of the support library classes for AppCompat.
您问题的真正症结在于 DisplayMessageActivity,它通过继承 [ActionBarActivity] 进行扩展:( https://developer.android.com/reference/android/support/v7/app/ActionBarActivity.html) 这是支持库之一AppCompat 的类。
To fix this, change your min SDK to 10 (or 14 which is ice cream sandwich), your max SDK to 19 (Kit Kat) and un-comment the appcompat-v7 library in your dependencies.
要解决此问题,请将最小 SDK 更改为 10(或 14,即冰淇淋三明治),将最大 SDK 更改为 19(Kit Kat)并取消对依赖项中 appcompat-v7 库的注释。
As a side note, when you declare widgets in their respective activities/fragments it's usually good practice to have their scope be outside of any methods:
作为旁注,当您在各自的活动/片段中声明小部件时,将它们的范围置于任何方法之外通常是一种很好的做法:
EditText editText;
Button sendMessageButton;
// Then in your onCreate() method
editText = (EditText) findViewById(R.id.editText);
sendMessageButton = (Button) findViewById(R.id.sendMessageButton);
This helps reduce memory re-allocation and make your code a little more readable. Sometimes you may have to bend the rules a bit but this is the common practice.
这有助于减少内存重新分配并使您的代码更具可读性。有时您可能需要稍微改变规则,但这是常见的做法。
回答by Darshn
I deleted 'build' folder in "yourAppName\app" folder
我删除了“yourAppName\app”文件夹中的“build”文件夹
and everything worked fine. If above solution didn't work, try this. build folder will be auto-generate when you build your project again.
一切正常。如果上述解决方案不起作用,请尝试此操作。当您再次构建项目时,将自动生成 build 文件夹。
回答by ucMedia
Just Build->Clean Project
,
and then Build->Rebuild Project
.
That's all.
只是Build->Clean Project
,
然后Build->Rebuild Project
。
就这样。
回答by Hitesh Sahu
In my case I had a layout which was defined for 720p but not defined for default resolutions so it was crashing. Adding that layout file fixed this issue, logcat dont lie.
就我而言,我有一个为 720p 定义的布局,但没有为默认分辨率定义,所以它崩溃了。添加该布局文件解决了这个问题,logcat 不要说谎。