ถอดรหัสซอร์สโค้ดที่สร้างความสับสนหรือแทนที่ด้วยสัญลักษณ์สำหรับสแต็กเทรซข้อขัดข้อง

 

ข้อขัดข้องและ ANR ใน Android จะสร้างสแต็กเทรซซึ่งเป็นชุดข้อมูลลำดับของฟังก์ชันที่มีการเรียกใช้ซึ่งฝังอยู่ในโปรแกรมจนถึงเวลาที่เกิดข้อขัดข้อง ชุดข้อมูลเหล่านี้ช่วยให้คุณระบุและแก้ไขปัญหาที่เกิดขึ้นในแหล่งที่มาได้

หากคุณพัฒนาแอปหรือเกมโดยใช้ Java และใช้ ProGuard ในการเพิ่มประสิทธิภาพและสร้างความสับสนให้กับไฟล์ APK คุณอัปโหลดไฟล์การแมป ProGuard สำหรับแอปแต่ละเวอร์ชันได้ใน Play Console หากคุณพัฒนาแอปหรือเกมโดยใช้โค้ดแบบเนทีฟ เช่น C++ คุณอัปโหลดไฟล์สัญลักษณ์สำหรับการแก้ไขข้อบกพร่องของแอปแต่ละเวอร์ชันได้ใน Play Console ซึ่งจะช่วยให้วิเคราะห์และแก้ไขข้อขัดข้องและ ANR ได้ง่ายขึ้น

สำคัญ: เฉพาะไฟล์การแมปที่เข้ากันได้กับ ReTrace เท่านั้นที่รองรับการถอดรหัสซอร์สโค้ดที่สร้างความสับสนของแอปที่คอมไพล์ใน Java ซึ่งเป็นรูปแบบเดียวกับที่ ProGuard หรือ R8 ใช้

ขั้นตอนที่ 1: สร้างไฟล์สำหรับการถอดรหัสซอร์สโค้ดที่สร้างความสับสนหรือไฟล์สำหรับการแทนที่ด้วยสัญลักษณ์

หากต้องการถอดรหัสซอร์สโค้ดที่สร้างความสับสนหรือแทนที่ด้วยสัญลักษณ์สำหรับข้อขัดข้องและ ANR ของแอปเวอร์ชันหนึ่ง คุณต้องสร้างไฟล์ที่จำเป็นสำหรับแอปเวอร์ชันเดียวกันก่อน คุณต้องสร้างและอัปโหลดไฟล์สำหรับแอปเวอร์ชันใหม่แต่ละเวอร์ชันเพื่อให้การถอดรหัสซอร์สโค้ดที่สร้างความสับสนหรือการแทนที่ด้วยสัญลักษณ์ใช้งานได้

Java: สร้างไฟล์การแมป ProGuard

หากต้องการถอดรหัสซอร์สโค้ดที่สร้างความสับสนของสแต็กเทรซ Java คุณต้องสร้างไฟล์การแมป ProGuard ขึ้นมาก่อน ดูวิธีการสร้างไฟล์ได้ที่เว็บไซต์ Google Developers

เนทีฟ: สร้างไฟล์สัญลักษณ์สำหรับแก้ไขข้อบกพร่อง

ปลั๊กอิน Android Gradle เวอร์ชัน 4.1 ขึ้นไป

หากเป็นโปรเจ็กต์สร้าง Android App Bundle คุณจะรวมไฟล์สัญลักษณ์สำหรับแก้ไขข้อบกพร่องไว้ในนั้นได้โดยอัตโนมัติ หากต้องการรวมไฟล์นี้ ให้เพิ่มค่าต่อไปนี้ลงในไฟล์ build.gradle ของแอป

  • android.defaultConfig.ndk.debugSymbolLevel = 'FULL'

หมายเหตุ: ไฟล์สัญลักษณ์สำหรับแก้ไขข้อบกพร่องต้องมีขนาดไม่เกิน 300 MB หากฟุตพรินท์ของสัญลักษณ์การแก้ไขข้อบกพร่องมีขนาดใหญ่เกินไป ให้ใช้ SYMBOL_TABLE แทน FULL เพื่อลดขนาดไฟล์

หากเป็นโปรเจ็กต์สร้าง APK ให้ใช้การตั้งค่าบิลด์ build.gradle ข้างต้นเพื่อสร้างไฟล์สัญลักษณ์สำหรับแก้ไขข้อบกพร่องแยกกัน อัปโหลดไฟล์สัญลักษณ์สำหรับแก้ไขข้อบกพร่องไปยัง Google Play Console ด้วยตนเองตามที่อธิบายด้านล่างในขั้นตอนที่ 2: อัปโหลดไฟล์สำหรับถอดรหัสซอร์สโค้ดที่สร้างความสับสนหรือไฟล์สำหรับแทนที่ด้วยสัญลักษณ์ เนื่องจากเป็นส่วนหนึ่งของกระบวนการบิลด์ ปลั๊กอิน Android Gradle จะเอาต์พุตไฟล์นี้ในตำแหน่งของโปรเจ็กต์ดังต่อไปนี้

  • app/build/outputs/native-debug-symbols/variant-name/native-debug-symbols.zip

ปลั๊กอิน Android Gradle เวอร์ชัน 4.0 ลงไป (และระบบบิลด์อื่นๆ)

เนื่องจากเป็นส่วนหนึ่งของกระบวนการบิลด์สำหรับ APK หรือ Android App Bundle ปลั๊กอิน Android Gradle จะเก็บสำเนาของไลบรารีที่ยังไม่ได้ Strip เอาไว้ในไดเรกทอรีของโปรเจ็กต์ ไดเรกทอรีดังกล่าวมีโครงสร้างที่คล้ายกับด้านล่างนี้

app/build/intermediates/cmake/universal/release/obj

├── armeabi-v7a/

│   ├── libgamenegine.so

│   ├── libothercode.so

│   └── libvideocodec.so

├── arm64-v8a/

│   ├── libgamenegine.so

│   ├── libothercode.so

│   └── libvideocodec.so

├── x86/

│   ├── libgamenegine.so

│   ├── libothercode.so

│   └── libvideocodec.so

└── x86_64/

    ├── libgameengine.so

    ├── libothercode.so

    └── libvideocodec.so

หมายเหตุ: หากใช้ระบบบิลด์แบบอื่น คุณแก้ไขเพื่อเก็บไลบรารีที่ยังไม่ได้ Strip ในไดเรกทอรีตามแบบโครงสร้างที่ต้องใช้ด้านบนได้

  1. บีบอัดเนื้อหาของไดเรกทอรีนี้
    • $ cd app/build/intermediates/cmake/universal/release/obj
    • $ zip -r symbols.zip .
  2. อัปโหลดไฟล์ symbols.zip ไปยัง Play Console ด้วยตนเองตามที่อธิบายด้านล่างในขั้นตอนที่ 2: อัปโหลดไฟล์สำหรับถอดรหัสซอร์สโค้ดที่สร้างความสับสนหรือไฟล์สำหรับการแทนที่ด้วยสัญลักษณ์

ไฟล์สัญลักษณ์สำหรับแก้ไขข้อบกพร่องต้องมีขนาดไม่เกิน 300 MB หากไฟล์มีขนาดใหญ่เกินไปอาจเป็นเพราะไฟล์ .so มีตารางสัญลักษณ์ (ชื่อฟังก์ชัน) และข้อมูลการแก้ไขข้อบกพร่องของ DWARF (ชื่อไฟล์และบรรทัดของโค้ด) รายการเหล่านี้ไม่จำเป็นสำหรับการแทนที่โค้ดด้วยสัญลักษณ์ และนำออกได้โดยการเรียกใช้คำสั่งนี้

  • $OBJCOPY --strip-debug lib.so lib.so.sym

หมายเหตุ: $OBJCOPY ชี้ไปที่เวอร์ชันเฉพาะสำหรับ ABI ที่คุณทำการ Strip ตัวอย่างเช่น ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-objcopy

ขั้นตอนที่ 2: อัปโหลดไฟล์สำหรับถอดรหัสซอร์สโค้ดที่สร้างความสับสนหรือไฟล์สำหรับแทนที่ด้วยสัญลักษณ์

หากต้องการถอดรหัสซอร์สโค้ดที่สร้างความสับสนหรือแทนที่ด้วยสัญลักษณ์สำหรับข้อขัดข้องและ ANR ของแอปเวอร์ชันหนึ่ง คุณต้องอัปโหลดไฟล์สำหรับถอดรหัสซอร์สโค้ดที่สร้างความสับสนหรือไฟล์สำหรับแทนที่ด้วยสัญลักษณ์สำหรับแอปแต่ละเวอร์ชัน

สำคัญ: ขั้นตอนนี้จำเป็นสำหรับนักพัฒนาซอฟต์แวร์ที่ใช้ APK เท่านั้น คุณไม่จำเป็นต้องดำเนินการใดๆ หากใช้ Android App Bundle และปลั๊กอิน Android Gradle เวอร์ชัน 4.1 ขึ้นไป เราจะดึงไฟล์สำหรับการถอดรหัสซอร์สโค้ดที่สร้างความสับสนจาก Bundle โดยอัตโนมัติ และคุณข้ามไปที่ขั้นตอนที่ 3: ดูสแต็กเทรซของข้อขัดข้องที่ถอดรหัสซอร์สโค้ดที่สร้างความสับสนแล้วได้เลย ดูข้อมูลเพิ่มเติมเกี่ยวกับ App Bundle ได้ที่เว็บไซต์ของนักพัฒนาซอฟต์แวร์ Android

อัปโหลดไฟล์โดยใช้ Play Console

วิธีอัปโหลดไฟล์สำหรับการถอดรหัสซอร์สโค้ดที่สร้างความสับสนและไฟล์สำหรับการแทนที่ด้วยสัญลักษณ์

  1. เปิด Play Console
  2. เลือกแอป
  3. ที่เมนูด้านซ้ายให้เลือก รุ่น > App Bundle Explorer
  4. ใช้เครื่องมือเลือกที่มุมขวาบนเลือกอาร์ติแฟกต์ที่เกี่ยวข้อง
  5. เลือกแท็บการดาวน์โหลด แล้วเลื่อนลงไปที่ส่วน "เนื้อหา"
  6. คลิกลูกศรอัปโหลดสำหรับไฟล์การแมปหรือสัญลักษณ์การแก้ไขข้อบกพร่องที่เกี่ยวข้องเพื่ออัปโหลดไฟล์สำหรับการถอดรหัสซอร์สโค้ดที่สร้างความสับสนหรือไฟล์สำหรับการแทนที่ด้วยสัญลักษณ์ของแอปแต่ละเวอร์ชัน
อัปโหลดไฟล์โดยใช้ API สำหรับนักพัฒนาซอฟต์แวร์ Google Play

ในการอัปโหลดไฟล์โดยใช้ API สำหรับนักพัฒนาซอฟต์แวร์ Google Play โปรดไปที่เว็บไซต์ Google Developers

ขั้นตอนที่ 3: ดูสแต็กเทรซของข้อขัดข้องที่ถอดรหัสซอร์สโค้ดที่สร้างความสับสนแล้ว

เมื่อคุณอัปโหลดไฟล์การแมปของ ProGuard หรือไฟล์สัญลักษณ์สำหรับแก้ไขข้อบกพร่องสำหรับแอปแต่ละเวอร์ชันแล้ว ระบบจะถอดรหัสซอร์สโค้ดที่สร้างความสับสนของข้อขัดข้องและ ANR ที่เกิดขึ้นหลังจากนั้น คุณตรวจสอบสแต็กเทรซที่ถอดรหัสซอร์สโค้ดที่สร้างความสับสนของข้อขัดข้องและ ANR แต่ละรายการได้ในหน้าข้อขัดข้องและ ANRของแอป

  1. เปิด Play Console
  2. เลือกแอป
  3. ที่เมนูด้านซ้าย ให้เลือกคุณภาพ > Android Vitals > ข้อขัดข้องและ ANR
  4. เลือกข้อขัดข้อง
  5. ในส่วน "สแต็กเทรซ" คุณจะเห็นสแต็กเทรซที่ถอดรหัสซอร์สโค้ดที่สร้างความสับสนและสแต็กเทรซที่แทนที่ด้วยสัญลักษณ์

สำคัญ: เมื่อคุณอัปโหลดไฟล์การแมปของเวอร์ชันแอปแล้ว ระบบจะถอดรหัสซอร์สโค้ดที่สร้างความสับสนเฉพาะข้อขัดข้องและ ANR ที่เกิดขึ้นในอนาคตของแอปเวอร์ชันนั้นเท่านั้น ระบบจะไม่ถอดรหัสซอร์สโค้ดที่สร้างความสับสนของข้อขัดข้องและ ANR ของเวอร์ชันแอปที่เกิดขึ้นก่อนที่คุณจะอัปโหลดไฟล์การแมปที่เกี่ยวข้อง

คำถามที่พบบ่อย

ฉันไม่ต้องการใช้การถอดรหัสซอร์สโค้ดที่สร้างความสับสน/การแทนที่ด้วยสัญลักษณ์ของ Play Console ฉันจะทำแบบออฟไลน์ได้ไหม

Play Console ใช้ ndk-stack เป็นสัญลักษณ์ของสแต็กเทรซสำหรับแอปที่มาพร้อมเครื่องและใช้ ReTrace สำหรับข้อขัดข้องของ Java หากเลือกที่จะไม่แชร์ไฟล์สำหรับการถอดรหัสซอร์สโค้ดที่สร้างความสับสน คุณจะคัดลอกสแต็กของข้อขัดข้องที่สับสนจาก Play Console และใช้เครื่องมือออฟไลน์ที่เหมาะสมในการแทนที่ด้วยสัญลักษณ์ก็ได้ อย่างไรก็ตาม ขั้นตอนนี้คุณต้องทำกับสแต็กข้อขัดข้องแต่ละรายการด้วยตัวเอง ซึ่งจะทำให้ช้าและใช้เวลานาน หากคุณส่งไฟล์สำหรับการถอดรหัสซอร์สโค้ดที่สร้างความสับสนให้เรา Play Console จะจัดการขั้นตอนนี้ให้คุณเอง

ฉันได้อัปโหลดไฟล์สำหรับการถอดรหัสซอร์สโค้ดที่สร้างความสับสน/ไฟล์สำหรับการแทนที่ด้วยสัญลักษณ์แล้ว แต่ทำไมข้อขัดข้องและ ANR ยังคงสับสนอยู่

เมื่อคุณอัปโหลดไฟล์การแมปของ ProGuard หรือไฟล์สัญลักษณ์สำหรับแก้ไขข้อบกพร่องสำหรับแอปแต่ละเวอร์ชันแล้ว ระบบจะถอดรหัสซอร์สโค้ดที่สร้างความสับสนเฉพาะของข้อขัดข้องและ ANR ที่เกิดขึ้นหลังจากนั้น คุณต้องรอให้มีการรายงานข้อขัดข้องและ ANR ใหม่จากอุปกรณ์ของผู้ใช้ก่อนจึงจะเห็นข้อขัดข้องและ ANR ที่ถอดรหัสซอร์สโค้ดที่สร้างความสับสนใน Play Console

หลังจากอัปโหลดไฟล์สำหรับการถอดรหัสซอร์สโค้ดที่สร้างความสับสน/ไฟล์สำหรับการแทนที่ด้วยสัญลักษณ์แล้ว ทำไมข้อขัดข้องและ ANR ถึงมีการถอดรหัสซอร์สโค้ดที่สร้างความสับสนเพียงบางส่วน

ปัญหานี้เกิดจากการอัปโหลดไฟล์สำหรับการถอดรหัสซอร์สโค้ดที่สร้างความสับสน/ไฟล์สำหรับการแทนที่ด้วยสัญลักษณ์ที่ไม่สมบูรณ์ ตรวจสอบว่าคุณได้รวมไฟล์สำหรับการแทนที่ด้วยสัญลักษณ์ของทั้งแอป โดยเฉพาะอย่างยิ่งหากคุณใช้กระบวนการบิลด์ที่ซับซ้อนหรือหลายขั้นตอน หนึ่งในสาเหตุที่พบบ่อยที่สุดสำหรับการถอดรหัสซอร์สโค้ดที่สร้างความสับสนเพียงบางส่วนคือการที่คุณใช้ไลบรารีของบุคคลที่สาม ในกรณีนี้คุณอาจขอไฟล์สำหรับการถอดรหัสซอร์สโค้ดที่สร้างความสับสนจากผู้ให้บริการไลบรารี

หลังจากอัปโหลดไฟล์สำหรับการถอดรหัสซอร์สโค้ดที่สร้างความสับสน/ไฟล์สำหรับการแทนที่ด้วยสัญลักษณ์แล้ว ทำไมจึงดูเหมือนว่าฉันได้รับรายงานข้อขัดข้องและ ANR น้อยลงแต่ว่ารุนแรงขึ้น

หากไม่มีไฟล์สำหรับการถอดรหัสซอร์สโค้ดที่สร้างความสับสน ข้อขัดข้องหรือ ANR เดียวกันในอุปกรณ์ 32 บิตและ 64 บิต หรือในอุปกรณ์ ARM และอุปกรณ์ Intel จะแสดงแยกกัน หากมีไฟล์สำหรับการถอดรหัสซอร์สโค้ดที่สร้างความสับสนจะทำให้เราจัดกลุ่มข้อขัดข้องเหล่านี้ได้ เพื่อให้คุณเห็นภาพข้อขัดข้องและ ANR ที่ส่งผลกระทบมากที่สุดของแอปได้ดีขึ้น

จะเกิดอะไรขึ้นหากฉันลืมอัปโหลดไฟล์

หากคุณลืมอัปโหลดไฟล์สำหรับแอปเวอร์ชันใหม่ ข้อขัดข้องและ ANR จะเปลี่ยนกลับไปเป็นแบบสับสน โปรดทำตามวิธีการอัปโหลดด้านบนตอนนี้เลย เมื่อคุณอัปโหลดไฟล์การแมปของ ProGuard หรือไฟล์สัญลักษณ์สำหรับแก้ไขข้อบกพร่องสำหรับแอปแต่ละเวอร์ชันแล้ว ระบบจะถอดรหัสซอร์สโค้ดที่สร้างความสับสนเฉพาะของข้อขัดข้องและ ANR ที่เกิดขึ้นหลังจากนั้น คุณต้องรอให้มีการรายงานข้อขัดข้องและ ANR ใหม่จากอุปกรณ์ของผู้ใช้ก่อนจึงจะเห็นข้อขัดข้องและ ANR ที่ถอดรหัสซอร์สโค้ดที่สร้างความสับสนใน Play Console

เพื่อหลีกเลี่ยงความเสี่ยงที่คุณอาจลืมอัปโหลดไฟล์ ให้พิจารณาเปลี่ยนกระบวนการบิลด์ไปใช้ App Bundle ที่มีปลั๊กอิน Android Gradle เวอร์ชัน 4.1 ขึ้นไป ในกรณีนี้ คุณจะรวมไฟล์สัญลักษณ์สำหรับแก้ไขข้อบกพร่องใน App Bundle ได้โดยอัตโนมัติ โดยทำตามวิธีการในเว็บไซต์ของนักพัฒนาซอฟต์แวร์ Android

จะเกิดอะไรขึ้นหากฉันอัปโหลดไฟล์ผิด

หากคุณอัปโหลดไฟล์สำหรับเวอร์ชันแอปผิดไฟล์ ข้อขัดข้องและ ANR จะเปลี่ยนกลับไปเป็นแบบสับสน วิธีอัปโหลดเวอร์ชันที่แก้ไขแล้ว

  1. เปิด Play Console
  2. เลือกแอป
  3. ในเมนูด้านซ้ายให้เลือกรุ่น > App Bundle Explorer
  4. ใช้เครื่องมือเลือกที่มุมขวาบนเลือกอาร์ติแฟกต์ที่เกี่ยวข้อง
  5. เลือกแท็บการดาวน์โหลด แล้วเลื่อนลงไปที่ส่วน "เนื้อหา"
  6. คลิกไอคอนลบถัดจากไฟล์สำหรับถอดรหัสซอร์สโค้ดที่สร้างความสับสนหรือไฟล์สำหรับการแทนที่ด้วยสัญลักษณ์ที่ไม่ถูกต้อง
  7. เมื่อลบเวอร์ชันที่ไม่ถูกต้องแล้ว ให้คลิกไอคอนอัปโหลดและอัปโหลดไฟล์ที่ถูกต้องสำหรับเวอร์ชันของแอป

เมื่อคุณอัปโหลดไฟล์การแมปของ ProGuard หรือไฟล์สัญลักษณ์สำหรับแก้ไขข้อบกพร่องที่ถูกต้องสำหรับแอปแต่ละเวอร์ชันแล้ว ระบบจะถอดรหัสซอร์สโค้ดที่สร้างความสับสนเฉพาะของข้อขัดข้องและ ANR ที่เกิดขึ้นหลังจากนั้น คุณต้องรอให้มีการรายงานข้อขัดข้องและ ANR ใหม่จากอุปกรณ์ของผู้ใช้ก่อนจึงจะเห็นข้อขัดข้องและ ANR ที่ถอดรหัสซอร์สโค้ดที่สร้างความสับสนใน Play Console

เคล็ดลับ: เพื่อหลีกเลี่ยงความเสี่ยงที่คุณอาจอัปโหลดไฟล์ที่ไม่ถูกเวอร์ชัน ให้พิจารณาเปลี่ยนกระบวนการบิลด์ไปใช้ App Bundle ที่มีปลั๊กอิน Android Gradle เวอร์ชัน 4.1 ขึ้นไป ในกรณีนี้ คุณจะรวมไฟล์สัญลักษณ์สำหรับแก้ไขข้อบกพร่องใน App Bundle ได้โดยอัตโนมัติ โดยทำตามวิธีการในเว็บไซต์ของนักพัฒนาซอฟต์แวร์ Android

ฉันใช้ APK อยู่ ฉันจะเปลี่ยนไปใช้ App Bundle ได้อย่างไร

ไปที่เว็บไซต์ของนักพัฒนาซอฟต์แวร์ Android เพื่อเริ่มต้นใช้งาน

แอปของฉันมีทั้งโค้ดเนทีฟและโค้ด Java ฉันจะอัปโหลดทั้งไฟล์สำหรับการแทนที่ด้วยสัญลักษณ์ของโค้ดเนทีฟและไฟล์สำหรับการถอดรหัสซอร์สโค้ดที่สร้างความสับสนของโค้ด Java ได้หรือไม่

ได้

ทําไม ANR บางรายการจึงไม่แสดงสแต็กเทรซ

ในบางครั้ง ระบบจะพบ ANR แต่รวบรวมสแต็กเทรซไม่ได้ โดยในเหตุการณ์นี้ ANR จะแสดงขึ้นเพื่อแจ้งให้ทราบเกี่ยวกับสิ่งที่เกิดขึ้น แต่จะแสดงสแต็กเทรซไม่ได้

ข้อมูลนี้มีประโยชน์ไหม
เราจะปรับปรุงได้อย่างไร

หากต้องการความช่วยเหลือเพิ่มเติม

ลงชื่อเข้าใช้เพื่อดูตัวเลือกการสนับสนุนเพิ่มเติมในการแก้ไขปัญหาของคุณอย่างรวดเร็ว