ソースコードがAndroidのView.javaのバイトコードと一致しません

Aug 24 2020

Androidアプリをデバッグしようとしています。デバッガーがView.javaファイルに到達すると、「ソースコードがバイトコードと一致しません」というメッセージが表示されます。デバッガーがファイルの間違った部分にあることがわかります。誰かがこれを修正する方法を知っていますか?

Android 10(API 29)デバイスでデバッグしています。AndroidStudioの[設定]-> [外観と動作]-> [システム設定]-> [Android SDK]で、すべてが最新であることを確認しました。また、何度もクリーニングと再構築を行い、キャッシュを削除し、Android Studioとデバイスを再起動し、アンインストール/再インストールし、AndroidStudioを4.0.1に更新しました。モジュール設定では、「Sdkバージョンのコンパイル」は29で、ターゲットSDKバージョンと最小SDKバージョンは29です。何も役に立たず、効果もありません。これらのステップの多くは、同様の投稿で提案されました。

開こうとするView.javaファイルは〜/ Library / Android / sdk / sources / android-29 / android / view /View.javaにあります。これは正しいファイルであるはずですが、エラーメッセージが表示されている間、デバッガーはファイルの間違った部分にあります。

私の黒い帽子をかぶって、私のラップトップのView.javaがそのAPIレベルに対して正しいと仮定しましょう:私の電話は非標準のコードを実行している可能性があり、それを検出または除外する方法はありますか?

回答

curious_george Aug 24 2020 at 23:58

私は何が起こっているのかを理解したと思います。AndroidSDKファイルで発生した場合のこの問題の解決策があります。恐ろしいことに、Android SDKプラットフォームはリビジョン5に更新されますが、ソースパッケージは更新されません。まだリビジョン1です!なぜこれが起こったのか、私は説明できません。合理的な人は、両方が同期していることを期待します。このスクリーンショットは、ソースコードがAndroidStudioがダウンロードしたバイナリと一致しないことを示しています。

これを回避する唯一の方法は、必要なファイルを手動でダウンロードし、SDKソースディレクトリに手動でパッチを適用することです。それは醜いです、それは不必要です、しかしあなたが本当に特定のSDKファイルをステップスルーしたいならあなたはそれをしなければなりません。

これが私が従ったステップです:

  1. お持ちのAndroidビルドをご覧ください。デバイスで、[設定]-> [端末情報]-> [Androidバージョン]に移動し、[ビルド番号]の値を書き留めます。私のはQQ3A.200805.001です。
  2. このページを使用して、ビルド番号に対応するタグを見つけます。 https://source.android.com/setup/start/build-numbers#source-code-tags-and-builds。私のビルド番号の場合、タグはandroid-10.0.0_r41です。
  3. 必要なファイルを見つける https://android.googlesource.com。google.comを使用して、私はそれを見つけました:https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/view/View.java
  4. ファイルが存在するAndroidリポジトリを特定します。前のURLを見ると、次の場所にあると推測できます。 https://android.googlesource.com/platform/frameworks/base/
  5. タグを使用してそのリポジトリを取得します。または、そのタグの個々のファイルの最新のリビジョンをオンラインで取得します。例:https://android.googlesource.com/platform/frameworks/base/+log/refs/tags/android-10.0.0_r41/core/java/android/view/View.java、リビジョン18c0fbf。
    • 個々のファイルをダウンロードするには、URLに「?format = text」を追加して、base64でエンコードされたバージョンを取得します。次にそれをデコードします:catファイル| base64--デコードします。
  6. これでファイルができました。誤ったファイルが含まれているSDKディレクトリに移動します:cd〜 / Library / Android / sdk / sources / android-29 / android / view /
  7. 必要に応じて、古いファイル(cp -pr View.java View.java.orig)をバックアップします(混乱した場合は、いつでもSDKソースファイルを再インストールできます)。新しいファイルを同じ場所にコピーします。
  8. これで、デバッガーは正しいファイルを使用します。デバッガーが文句を言うファイルごとにこれを行う必要があります。

これが将来誰かに役立つことを願っています。私はこれを理解するのに多くの時間を費やしました、そして私は他の誰かがその時間を無駄にする必要がないことを心から願っています。Googleは、ソースパッケージとリリースパッケージの一貫性を保つ必要があります。過去のすべてのSDKリリースを見ると、どのソースパッケージも最新リリースバージョンと同期していないようです。SDKファイルをデバッグするもう1つの醜い方法は、リビジョン#1のソースパッケージと一致するリビジョン#1のSDKリリースバージョンを使用することです。