web-dev-qa-db-fra.com

Erreur AppcompatActivity avec le studio Android

Je reçois cette erreur lors de la création d'une application Android avec Android Studio:

24192-24192/com.mkapp.apps.demo1 W/dalvikvm﹕ VFY: unable to find class referenced in signature (Landroid/os/PersistableBundle;)
08-20 10:53:23.605  24192-24192/com.mkapp.apps.demo1 I/dalvikvm﹕ Could not find method Android.support.v7.app.AppCompatActivity.onCreate, referenced from method com.mkapp.apps.demo1.TourActivity.onCreate
08-20 10:53:23.605  24192-24192/com.mkapp.apps.demo1 W/dalvikvm﹕ VFY: unable to resolve virtual method 8393: Landroid/support/v7/app/AppCompatActivity;.onCreate (Landroid/os/Bundle;Landroid/os/PersistableBundle;)V
08-20 10:53:23.605  24192-24192/com.mkapp.apps.demo1 D/dalvikvm﹕ VFY: replacing opcode 0x6f at 0x0000

mes dépendances:

    compile 'com.Android.support:support-v4:22.2.1'
    compile 'com.google.Android.gms:play-services:7.3.0'
    compile 'com.Android.support:appcompat-v7:22.1.0+'
    compile 'com.Android.support:multidex:1.0.1'

merci beaucoup pour votre aide

les anciennes activités héritées d'AppcompatActivity fonctionnent correctement. mais si j'en crée un nouveau, l'erreur se produit . voici mon gradle.build:

apply plugin: 'com.Android.application'

Android {
    compileSdkVersion 23
    buildToolsVersion "23.0.0"

    defaultConfig {
        applicationId "com.mkapp.apps.demo1"
        minSdkVersion 10
        targetSdkVersion 22
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_7
            targetCompatibility JavaVersion.VERSION_1_7
        }
        multiDexEnabled true
    }
    dexOptions {
        incremental true
        javaMaxHeapSize "4g"
    }
    packagingOptions {
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }
    lintOptions {
        checkReleaseBuilds false
        // Or, if you prefer, you can continue to check for errors in release builds,
        // but continue the build even when errors are found:
        abortOnError false
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile project(':photocollage')
    compile project(':gWFacebookSDK')
//    compile project(':listViewAnimation')
    compile 'com.google.Android.gms:play-services:7.3.0'
    compile 'com.Android.support:appcompat-v7:22.1.0'

    compile 'com.Android.support:multidex:1.0.1'
    compile files('libs/aws-Android-sdk-2.1.0-core.jar')
    compile files('libs/aws-Android-sdk-2.1.0-sns.jar')
    compile files('libs/dexmaker-1.1.jar')
    compile files('libs/dexmaker-mockito-1.1-custom.jar')
//    compile files('libs/listviewanimations_lib-core_3.1.0.jar')
    compile files('libs/signpost-commonshttp4-1.2.1.1.jar')
    compile files('libs/signpost-core-1.2.1.1.jar')
    compile files('libs/signpost-jetty6-1.2.1.1.jar')
    compile files('libs/Twitter4j-core-4.0.1.jar')
    compile files('libs/universal-image-loader-1.9.3.jar')
}
14
Linh Nguyen

Vous avez ce problème car vous essayez d'utiliser onCreate (Bundle savedInstanceState, PersistableBundle persistentState) , mais cette méthode n'est disponible qu'à partir du niveau 21 de l'API. 

Je suis capable de reproduire le problème avec cet exemple de code sur Android 4.4:

public class TourActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState, new PersistableBundle());
    }

    @Override
    public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
        super.onCreate(savedInstanceState, persistentState);
    }
}

Et le problème est résolu en supprimant chaque occurrence de PersistableBundle:

public class TourActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
}

Vérifiez où vous utilisez PersistableBundle dans votre TourActivity et supprimez-le ou mettez à jour votre réponse avec le code de votre activité.

16
Mattia Maestrini

Mettez à jour votre bibliothèque de support avec 23 et votre compileSdkVersion en 23 dans build.gradle.

compileSdkVersion 23

...

compile 'com.Android.support:support-v4:23.0.0'
compile 'com.Android.support:appcompat-v7:23.0.0'

Synchronisez ensuite votre projet avec les fichiers Gradle.

En outre, les services Google Play sont maintenant 7.8.0

11
Jared Rummler

Le problème est que votre TourActivity utilise une classe disponible uniquement à partir de l'API de niveau 21 PersistableBundle . La question ici est pourquoi fait cela.

N'oubliez pas que votre nouvelle activité doit également hériter de AppCompatActivity.

Question rapide, remplacez-vous public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) dans l'activité problématique? Si vous le faites, vous enregistrez probablement une référence à PersistableBundle qui n'est pas disponible dans le périphérique/émulateur. Essayez de l'enlever si vous ne faites rien ici ou commentez-le pour essayer ...

5
Arturo

Tout d'abord, mettez à jour vos bibliothèques avec les dernières versions ..__ Ensuite, nettoyez et reconstruisez votre projet.

De plus, s'il s'agit d'une liste complète des bibliothèques que vous incluez:

    compile 'com.Android.support:support-v4:22.2.1'
    compile 'com.google.Android.gms:play-services:7.3.0'
    compile 'com.Android.support:appcompat-v7:22.1.0+'
    compile 'com.Android.support:multidex:1.0.1'

alors vous n'avez pas besoin d'inclure celui-ci

    compile 'com.Android.support:multidex:1.0.1'
3
Ivan V

Simplement , Goto the File -> Invalidate Caches and Restart.Merci

1
Abhijeet Singh

Voici une solution ringarde, mais elle a vraiment fonctionné pour moi! J'ai créé manuellement le chemin nécessaire vers la bibliothèque manquante:

 C:\Users\spomerleau\AppData\Local\Android\Sdk\extras\Android\support\v7\appcompat\libs

et ajouté les deux fichiers .jar manquants de ici et ici . Le studio Android a finalement trouvé les dépendances nécessaires à l'exécution de Java. 

0
sebseb24

1.Il suffit de changer vos dépendances pour présenter dans le build.gradle--

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    testImplementation 'junit:junit:4.12'
    implementation 'com.Android.support:support-v4:23.4.0'
    implementation 'com.Android.support:appcompat-v7:23.4.0'
    implementation 'com.Android.support:support-annotations:27.1.1'
}

2.Ensuite, il indiquera de synchroniser gradation, puis de synchroniser build.gradle pour mettre à jour les modifications.

0
arpit1714