Android Studio步入错误的sdk源

Joh*_*igg 37 debugging android android-studio

我有以下build.gradle设置.

compileSdkVersion 21
buildToolsVersion '21.1.1'

defaultConfig {
    minSdkVersion 18
    targetSdkVersion 21
}
Run Code Online (Sandbox Code Playgroud)

问题是,当我在KitKat设备(Genymotion或Device上的19)上进入Android SDK源时,它仍然坚持步入Android-21源而不是19.

更改上述任何设置只会破坏我的应用程序的编译,因为我有v21代码.所有19调用适当的保护和代码工作在19,只是源代码衔接不正确.

提前干杯Stack Overflow兄弟姐妹们!

Ale*_*pov 10

编辑(2016年7月1日):
Android Studio 2.2修复它,并将跳转到与您实际运行的设备对应的API级别的源(只要您安装了这些源).它在这里宣布.


以下解决方法对我有用:

  1. 编译应用程序而不做任何更改.
  2. 在调试模式下启动应用程序(并可选择在断点处中断).
  3. 转到File> Project Structure,找到您的app模块(或/和/或任何其他模块)并将其更改为Compile Sdk Version与您正在调试的设备匹配的模块(即19).
  4. 进入框架代码 - 它应该进入SDK 19源代码.

  • 它似乎没有固定.我正在使用AndroidStudio 2.3,但它仍显示错误的文件.当我进入View.java时,它向我展示了SDK API-25中的一个(作为我的compileSdkVersion),但它正在运行到API 23设备中. (12认同)
  • 虽然这有效,但如果您使用的是appcompat支持库,则会失败. (4认同)

小智 6

正如在另一个答案中提到的,它已在Android Studio 2.2中修复(错误报告).

但是,即使在Android Studio 3.0中,它仍然无法正常工作.只有在我在"设置"中选中"显示替代源切换器"后才开始工作.

截图


big*_*_29 1

如果您尝试在运行 android 5.0.x Lollipop 映像的模拟器上调试源代码,会发生什么情况?它是否突出显示了正确的来源?我也一直在努力解决这个问题,我得出的结论是,问题是由于硬件供应商对 android 源代码的定制造成的。

我一直在尝试在运行 4.4.2 KitKat 的三星设备上单步执行 Android 源代码。有些文件排列得很好,有些文件偏离了几行,而其余的则完全不正常。Instrumentation.java 是我经常遇到的一个。它有 5 行左右的偏差。

那么为什么我认为供应商要定制android源呢?我在 ActivityThread.java 和 Instrumentation.java 中逐步完成了应用程序启动。即使源代码未对齐,调试器仍将正确执行步骤。我在 grepcode.com 上交叉引用了我所使用的 Android 源代码的例程。最终我看到调试器进入了一个函数调用,该函数调用在 grepcode 上发布的任何版本的 java 文件中都不存在。

下面是一个具体的例子:ActivityThread.HandleLaunchActivity。我目睹了调试器进行这些调用

unscheduleGcIdler          : present in android source
intent.getWindowStyle      : not present. Samsung customization?
handleConfigurationChanged : present
Run Code Online (Sandbox Code Playgroud)

如果我是对的,那么调试器应该正确地单步执行模拟图像,因为它不包含供应商定制的代码。