2016-10-12 89 views
32

我有我编写针对API级别21的应用程序: enter image description here“源代码不匹配的字节码”

,然后对它进行调试与API级23在真实设备上:

enter image description here

问题是,当我通过Android OS自己的班级尝试调试,我得到的源代码,字节码不匹配“。这是为什么发生?应用程序运行的测试设备是API级别23,并且正在调试的源文件也是级别23。 *enter image description here*

我真的很困惑。任何人都可以解释为什么我看到这个消息,我怎么能解决它?

+0

看起来像你的设备中的apk比当前代码更老或不同。我知道它很明显,但你有没有尝试卸载应用程序一次,然后再次安装? –

+2

看来,错误与您的IDE的Intellij IDEA插件有关。我可以在这里找到一个bug报告https://confluence.jetbrains.com/display/IDEADEV/IntelliJ+IDEA+2016.2+162.1812.2+Release+Notes。你可以请经过吗? –

+0

@Akash我试过了。但是我正在调试的文件是Android OS(ContentResolver)的一部分,而不是我的应用程序。 – Crocodile

回答

16

有这个在AOSP,一些用户已经给出可能的解决悬而未决的问题: https://code.google.com/p/android/issues/detail?id=225199&sort=-id&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars

给出有可能的解决方案(如这篇文章的日期)为:

  • 点击建设 - >,在设置 - >构建,执行,部署
+4

禁用Instant Run或此链接中的任何其他解决方案都不适用于我。 – mister270

+0

@ mister270你有没有找到另一种解决方案?我还没有再遇到过这个问题,所以我很难调试它,并在这里扩展我的答案。 –

+1

我提高了最低sdk,并做了一个干净的重建,使问题“消失”。但是我对这个解决方案并不满意,因为我想要一个更老的min sdk。 – mister270

0

转到清洁

  • 禁用即时运行到项目中设置Tings> Artifacts。选择有问题的工件。有一个选项“包含在项目构建中”。这需要检查(启用)。对于旧版本的IntelliJ,此选项为“Make on build”。

  • 3

    如果你使用Gradle,它可能是一个Gradle缓存的问题。 (Reference)。唉,即使你跑

    gradle --refresh-dependencies 
    

    ,它并不真正刷新所有的依赖。一些垃圾仍然存在。 (Reference)。

    所以,最肯定的(但非常激烈和长期)变体是清除[user] /。gradle/caches中的所有内容。或者在那里找到你的问题项目并且只清除它的缓存。

    0

    也许这个错误信息可能有多个原因,我的情况不像OP中的那种,在我的情况下,这是由于需要额外库的第三方库。

    例如:你手动添加X.jar到你的LIB,但是这个X.jar需要Z.jar才能工作。

    我花了一段时间才弄清楚,这个消息根本没有帮助。我不得不调试应用程序,直到我到达崩溃的类,并在该类中确保所有导入都满意。

    (Particualry:我添加MercadoLibre-0.3.4.jar,这需要公共-httpclient.jar)

    希望这有助于!

    2

    您应该使用与compileSdkVersion具有相同api级别的Android模拟器。 在你的情况下,你应该使用api level 21的Android模拟器。

    +0

    这对我有效。我的设备是API 22,因此将compileSdkVersion设置为22解决了问题。 –