在使用旧API的设备上调试时,Android studio会显示来自compileSdkVersion的API的源代码

Hai*_*imS 37 api debugging android android-studio

我正在调试Android Studio(AS)1.0.2,并在build.gradle中设置了compileSdkVersion 21.使用带有API 21的模拟器时,一切正常.在具有API 19的设备上进行调试时会出现此问题.调用堆栈中的每一行(在AS中标记为"帧")正确显示与API 19匹配的函数名称,源文件和行号.但是,当我单击一个时与其中一个框架源(例如Activity.java)对应的行,AS错误地打开并显示文件的API 21版本而不是API 19版本.

在我的android sdk文件夹中,我有./sources/android-19和./sources/android-21

知道为什么AS显示错误的文件版本?

我试过的事情(按顺序):

  • 重置Android Studio(删除〜/ .AndroidStudio*)
  • 将Android Studio更新到最新版本
  • 使用API​​ 21在AS模拟器上运行 - AS显示文件的正确版本(21).
  • 将compileSdkVersion更改为19并在API 19设备上运行 - AS在调用堆栈中显示正确的行号,并在正确的行中打开文件的正确版本(API 19).
  • 将compileSdkVersion更改为19并在API 21仿真器上运行 - AS在调用堆栈中显示与API 21对应的行号(在我看来这是正确的行为),但是,当单击它时,AS错误地打开了API 19版本的文件而不是API 21版本.

总而言之,当单击调用堆栈中的一行时,AS将打开由compileSdkVersion表示的文件版本,而不是调试会话期间设备/仿真器使用的版本.

van*_*rra 6

通过这里的工作解决方案回答:

/sf/answers/2256569241/

全部内容:

我使用appcompat支持库非常多.更改compileSdkVersion只会导致大量编译错误.如果您使用的是appcompat-21,则必须针对api 21进行编译,否则您将收到编译错误.

如果您正在针对版本21进行调试,这可以正常工作.但是当您在Jelly Bean(API 17)上进行调试时,您的调试器会不断将您转到API 21源.非常讨厌,很难调试.

我最终使用的解决方案非常hacky但有效!假设您正在尝试针对API 17进行调试.请执行以下操作:

  1. mv $ ANDROID_HOME/sources/android-21 $ ANDROID_HOME/sources/android-21-orig
  2. cp $ ANDROID_HOME/sources/android-17 $ ANDROID_HOME/sources/android-21
  3. 重启android studio所以它会选择正确的路径.
  4. 调试

只是不要忘记在完成后放回所有目录.

这是关于此问题的Android工作室错误报告:https: //code.google.com/p/android/issues/detail?id = 183976


Ser*_*nko 3

在 Intellij Idea(基于它的 Android Studio)中打开您的项目并选择File -> Project Structure.... 在项目设置中选择“项目 SDK”到您需要调试的版本,并为所有项目模块选择“项目 SDK”作为模块 SDK。之后,您可以将调试连接附加到您的设备/模拟器并查看正确的 Android 源代码。

您不需要在 Intellij Idea 中构建项目。