ซอร์สโค้ดไม่ตรงกับ bytecode สำหรับ View.java ของ Android

Aug 24 2020

ฉันกำลังพยายามดีบักแอป Android ของฉัน เมื่อดีบักเกอร์เข้าสู่ไฟล์ View.java ฉันได้รับข้อความ "ซอร์สโค้ดไม่ตรงกับ bytecode" ฉันเห็นว่าดีบักเกอร์อยู่ในส่วนที่ไม่ถูกต้องของไฟล์ ไม่มีใครรู้วิธีการที่จะแก้ไขปัญหานี้?

ฉันกำลังแก้ไขข้อบกพร่องบนอุปกรณ์ Android 10 (API 29) ในการตั้งค่า Android Studio -> ลักษณะที่ปรากฏและพฤติกรรม -> การตั้งค่าระบบ -> Android SDK ฉันได้ตรวจสอบว่าทุกอย่างเป็นปัจจุบันแล้ว ฉันทำความสะอาดและสร้างใหม่หลายครั้งลบแคชรีสตาร์ท Android Studio และอุปกรณ์ถอนการติดตั้ง / ติดตั้งใหม่อัปเดต Android Studio เป็น 4.0.1 ในการตั้งค่าโมดูล "เวอร์ชัน Compile Sdk" คือ 29 และเวอร์ชัน SDK เป้าหมายและเวอร์ชัน SDK ขั้นต่ำเป็น 29 ไม่มีสิ่งใดช่วยหรือมีผลกระทบใด ๆ หลายขั้นตอนเหล่านี้ได้รับการแนะนำในโพสต์ที่คล้ายกัน

ไฟล์ View.java ที่พยายามเปิดอยู่ที่: ~ / Library / Android / sdk /ources / android-29 / android / view / View.java นี่ควรเป็นไฟล์ที่ถูกต้อง แต่ดีบักเกอร์อยู่ในส่วนที่ไม่ถูกต้องของไฟล์ในขณะที่ฉันได้รับข้อความแสดงข้อผิดพลาด

สวมหมวกสีดำสมมติว่า View.java ของแล็ปท็อปของฉันถูกต้องสำหรับระดับ API นั้น: โทรศัพท์ของฉันสามารถใช้รหัสที่ไม่ได้มาตรฐานได้หรือไม่และมีวิธีใดในการตรวจจับหรือแยกออก

คำตอบ

curious_george Aug 24 2020 at 23:58

ฉันคิดว่าฉันรู้แล้วว่าเกิดอะไรขึ้นและฉันมีวิธีแก้ปัญหานี้เมื่อมันเกิดขึ้นกับไฟล์ Android SDK น่าตกใจที่แพลตฟอร์ม Android SDK ได้รับการอัปเดตเป็น Revision 5 แต่ไม่ได้อัปเดตแพ็กเกจต้นทาง มันยังคงอยู่ใน Revision 1! ทำไมถึงเกิดขึ้นฉันไม่สามารถอธิบายได้: บุคคลที่มีเหตุผลคาดว่าทั้งคู่จะซิงค์กัน ภาพหน้าจอนี้แสดงซอร์สโค้ดไม่ตรงกับไบนารีที่ Android Studio ดาวน์โหลด:

วิธีเดียวในการแก้ปัญหานี้คือดาวน์โหลดไฟล์ที่คุณต้องการด้วยตนเองและแก้ไขด้วยตนเองในไดเรกทอรีต้นทาง 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 repo ไฟล์ของคุณอาศัยอยู่เมื่อดู URL ก่อนหน้าฉันสามารถอนุมานได้ที่: https://android.googlesource.com/platform/frameworks/base/
  5. หยิบ repo นั้นโดยใช้แท็กของคุณ หรือคว้าการแก้ไขล่าสุดของแท็กนั้นในแต่ละไฟล์ทางออนไลน์เช่น:https://android.googlesource.com/platform/frameworks/base/+log/refs/tags/android-10.0.0_r41/core/java/android/view/View.java, แก้ไข 18c0fbf.
    • หากต้องการดาวน์โหลดไฟล์แต่ละไฟล์ให้เพิ่ม "? format = text" ลงใน URL เพื่อรับเวอร์ชันที่เข้ารหัส base64 จากนั้นถอดรหัส: ไฟล์ cat | base64 - ถอดรหัส
  6. ตอนนี้คุณมีไฟล์ ไปที่ไดเร็กทอรี SDK ของคุณที่มีไฟล์ errant: cd ~ / Library / Android / sdk /ources / android-29 / android / view /
  7. สำรองไฟล์เก่า (cp -pr View.java View.java.orig) หากคุณต้องการ (คุณสามารถติดตั้งไฟล์ต้นฉบับ SDK ใหม่ได้ตลอดเวลาหากคุณทำผิดพลาด) คัดลอกไฟล์ใหม่ของคุณไปยังตำแหน่งเดิม
  8. ตอนนี้ดีบักเกอร์ของคุณจะใช้ไฟล์ที่ถูกต้อง! คุณจะต้องทำสิ่งนี้สำหรับแต่ละไฟล์ที่ดีบักเกอร์ของคุณบ่น

ฉันหวังว่านี่จะช่วยคนอื่นได้ในอนาคต ฉันใช้เวลามากมายในการหาสิ่งนี้และฉันหวังเป็นอย่างยิ่งว่าจะไม่ต้องเสียเวลาไปกับใคร Google จำเป็นต้องรักษาแพ็กเกจต้นทางให้สอดคล้องกับแพ็กเกจรุ่น เมื่อดู SDK รุ่นที่ผ่านมาทั้งหมดดูเหมือนว่าไม่มีแพ็กเกจต้นทางใดที่จะซิงค์กับเวอร์ชันรีลีสล่าสุด อีกวิธีหนึ่งที่น่าเกลียดในการดีบักไฟล์ SDK คือการใช้ Revision # 1 SDK เวอร์ชันรีลีสที่ตรงกับแพ็คเกจซอร์ส Revision # 1