Kode sumber tidak cocok dengan bytecode untuk View.java Android

Aug 24 2020

Saya mencoba men-debug aplikasi Android saya. Ketika debugger sampai ke file View.java, saya menerima pesan, "Kode sumber tidak cocok dengan bytecode". Saya dapat melihat bahwa debugger berada di bagian file yang salah. Apakah ada yang tahu cara memperbaikinya?

Saya melakukan debug pada perangkat Android 10 (API 29). Di Android Studio Preferences -> Appearance & Behavior -> System Settings -> Android SDK, saya telah memastikan semuanya up to date. Saya juga telah membersihkan dan membangun kembali beberapa kali, menghapus cache, memulai ulang Android Studio dan perangkat, menghapus / menginstal ulang, memperbarui Android Studio ke 4.0.1. Dalam Module Settings, "Compile Sdk Version" adalah 29, dan Target SDK Version dan Min SDK Version ke 29. Tidak ada yang membantu atau berpengaruh. Banyak dari langkah-langkah ini disarankan dalam posting serupa.

File View.java yang coba dibuka ada di: ~ / Library / Android / sdk / sources / android-29 / android / view / View.java. Ini seharusnya file yang benar, namun debugger berada di bagian file yang salah saat saya mendapatkan pesan kesalahan.

Mengenakan topi hitam saya, mari asumsikan bahwa View.java laptop saya benar untuk level API itu: dapatkah ponsel saya menjalankan kode non-standar, dan adakah cara untuk mendeteksinya atau mengesampingkannya?

Jawaban

curious_george Aug 24 2020 at 23:58

Saya rasa saya sudah tahu apa yang terjadi dan saya punya solusi untuk masalah ini ketika terjadi dengan file Android SDK. Yang menakutkan, Platform SDK Android diperbarui ke Revisi 5, tetapi paket sumber tidak diperbarui. Ini masih dalam Revisi 1! Mengapa ini terjadi, saya tidak dapat menjelaskan: orang yang berakal sehat akan mengharapkan keduanya selaras. Tangkapan layar ini menunjukkan kode sumber tidak cocok dengan biner yang diunduh Android Studio:

Satu-satunya cara untuk mengatasi ini adalah dengan mengunduh file yang Anda butuhkan secara manual dan menambalnya secara manual di direktori sumber SDK Anda. Ini jelek, itu tidak perlu, tetapi jika Anda benar-benar ingin melangkah melalui file SDK tertentu Anda harus melakukannya.

Berikut langkah-langkah yang saya ikuti:

  1. Cari tahu versi Android yang Anda miliki. Di perangkat Anda, buka "Pengaturan" -> "Tentang ponsel" -> "Versi Android", dan catat nilai "Nomor versi" Anda. Punyaku adalah QQ3A.200805.001.
  2. Cari tahu Tag yang sesuai dengan nomor Build Anda menggunakan halaman ini: https://source.android.com/setup/start/build-numbers#source-code-tags-and-builds. Untuk nomor build saya, tagnya adalah: android-10.0.0_r41
  3. Temukan file yang Anda butuhkan https://android.googlesource.com. Menggunakan google.com, saya menemukannya di:https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/view/View.java
  4. Tentukan repo Android tempat file Anda berada. Melihat URL sebelumnya, saya dapat menyimpulkannya di: https://android.googlesource.com/platform/frameworks/base/
  5. Ambil repo itu menggunakan tag Anda. Atau ambil revisi terbaru dari tag tersebut secara online, misalnya:https://android.googlesource.com/platform/frameworks/base/+log/refs/tags/android-10.0.0_r41/core/java/android/view/View.java, revisi 18c0fbf.
    • Untuk mengunduh file individual, tambahkan "? Format = text" ke URL untuk mendapatkan versi yang dikodekan base64. Kemudian decode itu: cat file | base64 --decode.
  6. Sekarang Anda memiliki file tersebut. Buka direktori SDK Anda yang berisi file yang salah: cd ~ / Library / Android / sdk / sources / android-29 / android / view /
  7. Cadangkan file lama (cp -pr View.java View.java.orig) jika Anda mau (Anda selalu dapat menginstal ulang file sumber SDK jika Anda mengacaukan). Salin file baru Anda ke lokasi yang sama.
  8. Sekarang, debugger Anda akan menggunakan file yang benar! Anda harus melakukan ini untuk setiap file yang dikeluhkan debugger Anda.

Saya harap ini membantu orang lain di masa depan. Saya menghabiskan banyak waktu untuk memikirkan hal ini dan saya sangat berharap orang lain tidak perlu membuang waktu itu. Google perlu menjaga konsistensi paket sumber dengan paket rilis. Melihat semua rilis SDK sebelumnya, tidak ada satu pun paket sumber yang tampaknya sinkron dengan versi rilis terbaru. Mungkin cara jelek lain untuk men-debug file SDK adalah dengan menggunakan versi rilis SDK Revisi # 1 yang cocok dengan paket sumber Revisi # 1.