โดยค่าเริ่มต้น ระบบจะลบไลบรารีโค้ดแบบเนทีฟในบิลด์รีลีสของแอป การลบนี้ประกอบด้วยการนำตารางสัญลักษณ์และข้อมูลการแก้ไขข้อบกพร่อง ที่อยู่ในไลบรารีแบบเนทีฟที่แอปใช้ การลบไลบรารีโค้ดแบบเนทีฟ จะช่วยประหยัดขนาดได้อย่างมาก อย่างไรก็ตาม คุณจะวินิจฉัยข้อขัดข้องใน Google Play Console ไม่ได้เนื่องจากไม่มีข้อมูล (เช่น ชื่อคลาสและฟังก์ชัน) หากต้องการแก้ไขข้อบกพร่องของการขัดข้อง คุณต้องรวมไฟล์สัญลักษณ์การแก้ไขข้อบกพร่อง ไว้กับแอปใน Play Console
อัปโหลดไฟล์สัญลักษณ์
Google Play Console จะรายงานข้อขัดข้องที่เกิดจากโค้ดเนทีฟในส่วนAndroid Vitals คุณสามารถสร้างและอัปโหลดไฟล์สัญลักษณ์การแก้ไขข้อบกพร่องของระบบสำหรับแอปได้โดยทำตามขั้นตอนเพียงไม่กี่ขั้นตอน ไฟล์นี้จะเปิดใช้การติดตามสแต็กข้อขัดข้องของระบบที่แทนที่ด้วยสัญลักษณ์ (ซึ่งรวมถึงชื่อคลาสและฟังก์ชัน) ใน Android Vitals เพื่อช่วยคุณแก้ไขข้อบกพร่องของแอปในเวอร์ชันที่ใช้งานจริง ขั้นตอนเหล่านี้ จะแตกต่างกันไปตามเวอร์ชันของปลั๊กอิน Android Gradle ที่ใช้ในโปรเจ็กต์ และขึ้นอยู่กับว่าคุณใช้ Android App Bundle (แนะนํา) หรือ APK
ปลั๊กอิน Android Gradle เวอร์ชัน 4.1 ขึ้นไป
หากโปรเจ็กต์สร้าง Android App Bundle (AAB) คุณสามารถกำหนดค่าบิลด์
ให้รวมไฟล์สัญลักษณ์สำหรับแก้ไขข้อบกพร่องแบบเนทีฟไว้ใน AAB โดยอัตโนมัติ เพื่อให้ระบบ
อัปโหลดไปยัง Play Console เมื่อคุณเผยแพร่แอป หากต้องการรวมไฟล์นี้ไว้ใน
บิลด์ที่เผยแพร่ ให้เพิ่มค่าต่อไปนี้ลงในไฟล์ build.gradle.kts ของแอป
android.buildTypes.release.ndk.debugSymbolLevel = { SYMBOL_TABLE | FULL }
เลือกระดับสัญลักษณ์การแก้ไขข้อบกพร่องจากตัวเลือกต่อไปนี้
- ใช้
SYMBOL_TABLEเพื่อรับชื่อฟังก์ชันในสแต็กเทรซที่มีการสร้างสัญลักษณ์ของ Play Console ระดับนี้รองรับ เครื่องหมายหลุมศพ - ใช้
FULLเพื่อดูชื่อฟังก์ชัน ไฟล์ และหมายเลขบรรทัดในสแต็กเทรซที่มีสัญลักษณ์ของ Play Console
หากเป็นโปรเจ็กต์สร้าง APK ให้ใช้การตั้งค่า android.buildTypes.release.ndk.debugSymbolLevel ที่แสดงก่อนหน้านี้เพื่อสร้างไฟล์สัญลักษณ์สำหรับแก้ไขข้อบกพร่องแบบเนทีฟแยกกัน อัปโหลดไฟล์สัญลักษณ์สำหรับแก้ไขข้อบกพร่องดั้งเดิมไปยัง Google Play Console ด้วยตนเอง (กระบวนการนี้คล้ายกับการอัปโหลดไฟล์การแมปเพื่อถอดรหัสซอร์สโค้ดที่สร้างความสับสนของสแต็กเทรซ)
เนื่องจากเป็นส่วนหนึ่งของกระบวนการบิลด์ ปลั๊กอิน Android Gradle จะเอาต์พุตไฟล์นี้ในตำแหน่งของโปรเจ็กต์ดังต่อไปนี้
app/build/outputs/native-debug-symbols/<var>variant-name</var>/native-debug-symbols.zip
หากการอ้างอิงมีไลบรารีเนทีฟ ระบบน่าจะ
ลบข้อมูลการแก้ไขข้อบกพร่องออกเพื่อลดขนาด คุณยืนยันได้โดยการเรียกใช้บิลด์ที่มีinfo
ระดับบันทึกและตั้งค่า debugSymbolLevel = { SYMBOL_TABLE | FULL }
จากนั้นมองหาบรรทัดต่อไปนี้ในเอาต์พุตการสร้าง
Unable to extract native debug metadata from ... because the native debug metadata has already been stripped.
ปลั๊กอิน Android Gradle เวอร์ชัน 4.0 ลงไป (และระบบบิลด์อื่นๆ)
ในกระบวนการบิลด์ ปลั๊กอิน Android Gradle จะเก็บสำเนาของไลบรารีที่ยังไม่ได้ Strip เอาไว้ในไดเรกทอรีของโปรเจ็กต์ โครงสร้างไดเรกทอรีนี้คล้ายกับ โครงสร้างต่อไปนี้
app/build/intermediates/cmake/universal/release/obj/
├── armeabi-v7a/
│ ├── libgameengine.so
│ ├── libothercode.so
│ └── libvideocodec.so
├── arm64-v8a/
│ ├── libgameengine.so
│ ├── libothercode.so
│ └── libvideocodec.so
├── x86/
│ ├── libgameengine.so
│ ├── libothercode.so
│ └── libvideocodec.so
└── x86_64/
├── libgameengine.so
├── libothercode.so
└── libvideocodec.so
บีบอัดเนื้อหาของไดเรกทอรีนี้
cd app/build/intermediates/cmake/universal/release/obj zip -r symbols.zip .อัปโหลดไฟล์
symbols.zipไปยัง Google Play Console ด้วยตนเอง