به طور پیشفرض، کتابخانههای کد بومی در نسخههای منتشر شده برنامه شما حذف میشوند. این حذف شامل حذف جدول نمادها و اطلاعات اشکالزدایی موجود در هر کتابخانه بومی مورد استفاده برنامه شما میشود. حذف کتابخانههای کد بومی منجر به صرفهجویی قابل توجهی در اندازه میشود. با این حال، تشخیص خرابیها در کنسول Google Play به دلیل از دست رفتن اطلاعات (مانند نام کلاسها و توابع) غیرممکن است. برای اشکالزدایی خرابیها، باید یک فایل نمادهای اشکالزدایی را به برنامه خود در کنسول Play اضافه کنید.
آپلود فایل نمادها
کنسول گوگل پلی، کرشهای بومی را در بخش Android Vitals گزارش میدهد. با چند مرحله، میتوانید یک فایل نمادهای اشکالزدایی بومی برای برنامه خود ایجاد و آپلود کنید. این فایل، ردیابیهای پشته کرش بومی نمادین (که شامل نام کلاسها و توابع است) را در Android Vitals فعال میکند تا به شما در اشکالزدایی برنامه در مرحله تولید کمک کند. این مراحل بسته به نسخه افزونه Android Gradle مورد استفاده در پروژه شما و اینکه آیا از Android App Bundle (توصیه شده) یا APK استفاده میکنید، متفاوت است.
افزونه اندروید Gradle نسخه ۴.۱ یا بالاتر
اگر پروژه شما یک Android App Bundle (AAB) میسازد، میتوانید build خود را طوری پیکربندی کنید که به طور خودکار فایل نمادهای اشکالزدایی بومی را در AAB قرار دهد تا هنگام انتشار برنامه، در Play Console آپلود شود. برای قرار دادن این فایل در release builds، موارد زیر را به فایل build.gradle.kts برنامه خود اضافه کنید:
android.buildTypes.release.ndk.debugSymbolLevel = { SYMBOL_TABLE | FULL }
سطح نماد اشکالزدایی را از موارد زیر انتخاب کنید:
- از
SYMBOL_TABLEبرای دریافت نام توابع در ردپاهای پشته نمادین کنسول Play استفاده کنید. این سطح از tombstones پشتیبانی میکند. -
FULLبرای دریافت نام توابع، فایلها و شماره خطوط در ردیابیهای پشته نمادین کنسول Play استفاده کنید.
اگر پروژه شما یک APK میسازد، از تنظیمات android.buildTypes.release.ndk.debugSymbolLevel که قبلاً نشان داده شد، برای تولید جداگانه فایل نمادهای اشکالزدایی بومی استفاده کنید. فایل نمادهای اشکالزدایی بومی را به صورت دستی در کنسول Google Play آپلود کنید (این فرآیند مشابه آپلود یک فایل نگاشت برای رمزگشایی ردپاهای پشته است). به عنوان بخشی از فرآیند ساخت، افزونه Android Gradle این فایل را در محل پروژه زیر خروجی میدهد:
app/build/outputs/native-debug-symbols/<var>variant-name</var>/native-debug-symbols.zip
اگر وابستگیهای شما حاوی کتابخانههای بومی باشند، اطلاعات اشکالزدایی احتمالاً برای کاهش حجم حذف میشوند. میتوانید با اجرای یک build با سطح info log و تنظیم debugSymbolLevel = { SYMBOL_TABLE | FULL } ، این موضوع را تأیید کنید. سپس به دنبال خط زیر در خروجی build بگردید:
Unable to extract native debug metadata from ... because the native debug metadata has already been stripped.
افزونهی اندروید Gradle نسخه ۴.۰ یا قدیمیتر (و سایر سیستمهای ساخت)
به عنوان بخشی از فرآیند ساخت، افزونه Android Gradle یک کپی از کتابخانههای حذف نشده را در دایرکتوری پروژه نگه میدارد. این ساختار دایرکتوری مشابه ساختار زیر است:
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را به صورت دستی در کنسول گوگل پلی آپلود کنید .