【问题标题】:How to resolve this error VFY: unable to resolve virtual method如何解决此错误 VFY:无法解析虚拟方法
【发布时间】:2016-04-26 20:10:51
【问题描述】:

我正在使用 android studio 2.0,上次我将 jdk 7 升级到 jdk 8,我正在对文件 gradle 进行一些更改,但现在我收到此错误

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

这是一个 gradle 文件

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

我该如何处理该错误,我尝试将 compile compile 'com.android.support:appcompat-v7:23.3.0' 的版本转换为 compile 'com.android.support:appcompat-v7:23.0.0 ' 它也崩溃了,我该怎么办? 提前谢谢

【问题讨论】:

    标签: java android java-8 android-appcompat


    【解决方案1】:

    如果您在运行时签入 Android 版本,则可以放心地忽略此警告。这只是意味着您引用了一个在您当前运行代码的平台上不可用的方法。您只需要确保不在旧平台上使用更新的 API。通常,如果您在发布版本中做错了什么,lint 会警告您。只要您牢记这一点,就不必担心。

    仅作为此类运行时切换的示例:

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

    【讨论】:

    • 谢谢你,非常感谢你的帮助
    • 在我的情况下它可以工作,但应用程序现在需要很长时间才能加载(3 或 4 秒)。有没有办法解决它?或者至少是一种解决方法?
    【解决方案2】:

    根据 google Android 工程师的说法,这是正常现象。

    参考https://code.google.com/p/android/issues/detail?id=198567

    当您针对比部署的设备 api 级别更高的 api 级别进行编译时,会发生这种情况。日志表明,某些方法不可用,虚拟机将用替代实现替换它们。

    兄弟, 尼克

    【讨论】:

      【解决方案3】:

      我有同样的警告,然后是致命的 NoClassDefFoundError。该问题可能来自于 android-plugin 的多 dex 模式下的 dex 生成文件。所有找不到的类都在一个包中。该软件包分为 2 个 dex 文件。一种解决方案是生成 MainDexList 文件,其中我只包含连接到一个 dex 文件的未解析类。有关更多详细信息,另请参阅here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多