Android Studio(AS)1.0.2 with compileSdkVersion21をbuild.gradleに設定してデバッグしています。API21でエミュレーターを使用するとすべて正常に動作します。デバイスでデバッグすると問題が発生します。 API 19を使用しています。呼び出しスタックの各行(ASでは「フレーム」としてタグ付けされています)には、API 19に一致する関数名、ソースファイル、行番号が正しく表示されます。ただし、次のいずれかに対応する行の1つをクリックするとフレームワークソース(Activity.Javaなど)の場合、ASは誤って開き、API19バージョンではなくAPI21バージョンのファイルを表示します。
私のAndroid sdkフォルダーには./sources/Android-19と./sources/Android-21の両方があります
A.Sが間違ったバージョンのファイルを表示する理由はありますか?
私が試したこと(順番に):
要約すると、コールスタックの行をクリックすると、A.Sは、デバッグセッション中にデバイス/エミュレーターによって使用されたものではなく、compileSdkVersionによって表されるファイルのバージョンを開きます。
ここで実用的な解決策で答えました:
https://stackoverflow.com/a/32236703/1267536
フルコンテンツ:
私はappcompatサポートライブラリをかなりよく使用します。 compileSdkVersionを変更すると、大規模なコンパイルエラーが発生するだけです。 appcompat-21を使用している場合は、api 21に対してコンパイルする必要があります。そうしないと、コンパイルエラーが発生します。
これは、バージョン21に対してデバッグしている場合は正常に機能します。ただし、Jelly Bean(API 17)でデバッグしている場合、デバッガーはAPI21ソースにドロップし続けます。非常に煩わしく、デバッグが困難です。
私が使用することになったソリューションは非常にハッキーですが、機能します! API17に対してデバッグしようとしているとしましょう。次の手順を実行します。
完了したら、すべてのディレクトリを元に戻すことを忘れないでください。
これがAndroidこの問題に関するスタジオバグレポートです: https://code.google.com/p/Android/issues/detail?id=183976
Intellij Idea(それに基づくAndroid Studio)でプロジェクトを開き、File -> Project Structure...
を選択します。プロジェクト設定で、デバッグが必要なバージョンの「プロジェクトSDK」を選択し、すべてのプロジェクトモジュールに対して「プロジェクトSDK」をモジュールSDKとして選択します。その後、デバイス/エミュレーターにデバッグ接続を接続して、適切なAndroidソースを確認できます。
IntellijIdeaでプロジェクトをビルドする必要はありません。
SDKのソースファイルのフォルダー名を一時的に変更します。たとえば、APIレベル23に対してコンパイルしたが、テストおよびデバッグしているデバイスはAPIレベル15です。次に、最初にコンパイルしてデバッグモードで実行し、ブレークポイントを設定します。その後、名前を切り替えます。
$SDK_HOME$/sources/Android-23/ -> $SDK_HOME$/sources/Android-23-temp/
$SDK_HOME$/sources/Android-15/ -> $SDK_HOME$/sources/Android-23/
そして、これが行われたら、ブレークポイントに到達する良い機会です。
このソリューションは、SDKマネージャーから両方のAPIレベルのソースをインストールしたことを前提としています。
実際のデバイスでアプリをデバッグし、デバイスのSDKレベルでコンパイルしてみてください。コールスタックの行番号は、デバイスによって提供されるクラスでは「同期していない」可能性があります。
Android Studioは、実行中のデバイスに正しいソースを確実に提供できません。デバッグしているデバイスのSDKバージョンが考慮されている場合でも、デバイスのファームウェアはさまざまなソースファイルからコンパイルされ、APIと互換性があるだけです。
そのため、Android Studioは、ターゲットデバイスによって提供されるクラスのコンパイルSDKバージョンを表示するだけで、コンパイラのリファレンス実装を表示するだけだと思います。