web-dev-qa-db-fra.com

Comment résoudre cette erreur VFY: impossible de résoudre la méthode virtuelle

J'utilise Android studio 2.0 et la dernière fois que j’ai mis à niveau jdk 7 vers jdk 8, j’ai apporté quelques modifications au fichier gradle mais c’est maintenant que je reçois cette erreur.

E/InstantRun: Could not find slices in APK; aborting.
I/dalvikvm: Could not find method Android.content.Context.getSystemService, referenced from method com.mstr.malik.elbalaapps.ControlPanel.access$super
W/dalvikvm: VFY: unable to resolve virtual method 435: Landroid/content/Context;.getSystemService (Ljava/lang/Class;)Ljava/lang/Object;
D/dalvikvm: VFY: replacing opcode 0x6f at 0x004b
I/dalvikvm: Could not find method Android.app.Activity.stopLockTask, referenced from method com.mstr.malik.elbalaapps.ControlPanel.access$super
W/dalvikvm: VFY: unable to resolve virtual method 231: Landroid/app/Activity;.stopLockTask ()V
D/dalvikvm: VFY: replacing opcode 0x6f at 0x00b9
E/dalvikvm: Could not find class 'Android.os.PersistableBundle', referenced from method com.mstr.malik.elbalaapps.ControlPanel.access$super
W/dalvikvm: VFY: unable to resolve check-cast 224 (Landroid/os/PersistableBundle;) in Lcom/mstr/malik/elbalaapps/ControlPanel;
D/dalvikvm: VFY: replacing opcode 0x1f at 0x00f1
I/dalvikvm: Could not find method Android.content.Context.getColorStateList, referenced from method com.mstr.malik.elbalaapps.ControlPanel.access$super
W/dalvikvm: VFY: unable to resolve virtual method 417: Landroid/content/Context;.getColorStateList (I)Landroid/content/res/ColorStateList;
D/dalvikvm: VFY: replacing opcode 0x6f at 0x0101
I/dalvikvm: Could not find method Android.app.Activity.onVisibleBehindCanceled, referenced from method com.mstr.malik.elbalaapps.ControlPanel.access$super
W/dalvikvm: VFY: unable to resolve virtual method 154: Landroid/app/Activity;.onVisibleBehindCanceled ()V
D/dalvikvm: VFY: replacing opcode 0x6f at 0x0111
I/dalvikvm: Could not find method Android.app.Activity.onWindowStartingActionMode, referenced from method com.mstr.malik.elbalaapps.ControlPanel.access$super
W/dalvikvm: VFY: unable to resolve virtual method 158: Landroid/app/Activity;.onWindowStartingActionMode (Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode;
D/dalvikvm: VFY: replacing opcode 0x6f at 0x0137
E/dalvikvm: Could not find class 'Android.os.PersistableBundle', referenced from method com.mstr.malik.elbalaapps.ControlPanel.access$super
W/dalvikvm: VFY: unable to resolve check-cast 224 (Landroid/os/PersistableBundle;) in Lcom/mstr/malik/elbalaapps/ControlPanel;
D/dalvikvm: VFY: replacing opcode 0x1f at 0x019a

C'est un fichier de classement

apply plugin: 'com.Android.application'

Android {
    compileSdkVersion 23
    buildToolsVersion "24.0.0 rc3"

    defaultConfig {
        applicationId "com.mstr.malik.elbalaapps"
        minSdkVersion 18
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.Android.support:appcompat-v7:23.3.0'
}

Comment puis-je gérer l'erreur, j'ai essayé de changer la version de compilation compiler 'com.Android.support:appcompat-v7:23.3.0' pour compiler 'com.Android.support:appcompat-v7:23.0.0' crash, comment puis-je le faire? merci d'avance

8
Dev Kim

Si vous enregistrez la version Android à l'exécution, vous pouvez ignorer en toute sécurité ces avertissements. Cela signifie simplement que vous avez une référence à une méthode qui n'est pas disponible sur la plate-forme sur laquelle votre code est actuellement exécuté. Vous devez simplement vous assurer que vous n'utilisez pas les nouvelles API sur les anciennes plates-formes. Normalement, les peluches vous avertiront si vous faites quelque chose de mal dans les versions de version. Tant que vous gardez cela à l'esprit, vous n'avez pas à vous en préoccuper.

Juste à titre d'exemple pour un tel commutateur d'exécution:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
    // You can use here an API which was added in Lollipop.
}
10
rekire

c'est normal selon les ingénieurs de Google Android.

Voir https://code.google.com/p/Android/issues/detail?id=198567

Cela se produit lorsque vous compilez avec un niveau d'api supérieur au niveau d'api de périphérique déployé. Les journaux indiquent que certaines des méthodes ne sont pas disponibles et que la machine virtuelle va les remplacer par la mise en œuvre alternative.

Fr. Nick

4
Zaicheng Qi

J'ai les mêmes avertissements, puis la fatale NoClassDefFoundError. Le problème peut provenir de fichiers générés par dex en mode multi-dex du plug-in Android. Toutes les classes qui n'ont pas pu être trouvées étaient dans un seul paquet. Le paquet a été divisé entre 2 fichiers dex. Une solution génère un fichier MainDexList où je n’ai inclus que les classes non résolues qui ont été jointes à un fichier dex. Pour plus de détails, voir aussi ici .

1
zhen_khokh