web-dev-qa-db-fra.com

NoClassDefFoundError: Echec de la résolution de: Landroid/support/v7/appcompat/R $ styleable

Débutant essayant de terminer le didacticiel Ma première application fourni par Google. Sur le chemin de cette exception fatale, j'ai importé de nombreux paquets aléatoires pour éliminer les erreurs "impossible à résoudre", ActionBarActivity, EditText, Fragment, LayoutInflater, etc. Quoi qu'il en soit, mon application se bloque et génère une exception Fatal lorsque je clique sur le bouton "Envoyer" de l'activité principale. Voici mon code et mon fichier logcat.

MyActivity.Java (alias MainActivity.Java du didacticiel)

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:

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:

 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:

    <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:

<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>

et 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.access$800(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.access$800(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

Désolé si j'ai manqué quelque chose et cette question est complètement inutile et/ou une dupe. Merci.

19
howdoyouturnthison

Vous obtenez cette erreur pour les raisons suivantes:

Dans votre fichier de construction Gradle, votre application cible et compile avec la version bêta d'Android en cours de développement avec:

compileSdkVersion 'Android-L'
buildToolsVersion '20'

aussi bien que 

minSdkVersion 20
targetSdkVersion 20

La première chose à noter est que cette application ne fonctionnera pas correctement (pour le moment) sur aucun appareil sans Android-L clignotant.

Le véritable noeud de votre problème est dans DisplayMessageActivity, il s’étend via l’héritage [ActionBarActivity]: ( https://developer.Android.com/reference/Android/support/v7/app/ActionBarActivity.html c'est l'une des classes de la bibliothèque de support pour AppCompat.

Pour résoudre ce problème, modifiez votre SDK min à 10 (ou 14 qui est un sandwich à la crème glacée), votre SDK max à 19 (Kit Kat) et supprimez le commentaire de la bibliothèque appcompat-v7 dans vos dépendances.

En remarque, lorsque vous déclarez des widgets dans leurs activités/fragments respectifs, il est généralement conseillé de laisser leur portée en dehors de toute méthode:

EditText editText;
Button sendMessageButton;

// Then in your onCreate() method
editText = (EditText) findViewById(R.id.editText);
sendMessageButton = (Button) findViewById(R.id.sendMessageButton);

Cela permet de réduire la réaffectation de mémoire et de rendre votre code un peu plus lisible. Parfois, vous devrez peut-être plier les règles un peu, mais c'est la pratique courante.

5
Patty P

J'ai supprimé le dossier 'build' dans le dossier "yourAppName\app"

et tout a bien fonctionné. Si la solution ci-dessus ne fonctionne pas, essayez ceci. Le dossier build sera généré automatiquement lorsque vous reconstruirez votre projet. 

2
Darshn

Dans mon cas, j'avais une mise en page définie pour 720p mais non définie pour les résolutions par défaut, elle se bloquait. L'ajout de ce fichier de présentation a résolu ce problème. Logcat ne ment pas.

0
Hitesh Sahu

Juste Build->Clean Project,
et ensuite Build->Rebuild Project.
C'est tout.

0
ucMedia