# اندروید > https://docs.errora.org/platforms/android ارورا بدون هیچ تغییری با [SDK رسمی Sentry برای اندروید](https://docs.sentry.io/platforms/android/) و پلاگین Gradle آن کار می‌کند. SDK کرش‌های جاوا/کاتلین، کرش‌های نیتیو (NDK) و ANRها را گزارش می‌دهد؛ پلاگین Gradle هم فایل‌هایی را بارگذاری می‌کند که ارورا برای برگرداندن ردپای مبهم‌شده یا نیتیو به کد شما لازم دارد. پروژه را با پلتفرم **Android** بسازید تا پنل نمونه‌کدهای درست را نشان دهد. ## نصب راه پیشنهادی پلاگین Gradle است؛ SDK را خودش اضافه می‌کند و در هر بیلد انتشار، نگاشت و سیمبل‌ها را بارگذاری می‌کند: ```kotlin // app/build.gradle.kts plugins { id("com.android.application") id("io.sentry.android.gradle") version "5.+" // در بیلد واقعی نسخهٔ دقیق را پین کنید } ``` بدون پلاگین، SDK را خودتان اضافه کنید (گزارش کرش NDK را هم در خود دارد): ```kotlin dependencies { implementation("io.sentry:sentry-android:8.+") } ``` ## مقداردهی اولیه ### روش ۱ — فایل مانیفست SDK خودش را از روی `AndroidManifest.xml` مقداردهی می‌کند: ```xml ``` ### روش ۲ — داخل کد مقداردهی خودکار را در مانیفست خاموش کنید و بعد `SentryAndroid.init` را از کلاس `Application` صدا بزنید: ```xml ``` ```kotlin import io.sentry.android.core.SentryAndroid class App : Application() { override fun onCreate() { super.onCreate() SentryAndroid.init(this) { options -> options.dsn = "https://@/" options.environment = "production" options.tracesSampleRate = 0.2 // ردیابی کارایی options.profilesSampleRate = 1.0 // پروفایلینگ (از تراکنش‌های نمونه‌برداری‌شده) options.isAttachScreenshot = true // اسکرین‌شات هنگام خطا options.isAttachViewHierarchy = true // سلسله‌مراتب ویوها هنگام خطا options.sessionReplay.onErrorSampleRate = 1.0 options.sessionReplay.sessionSampleRate = 0.1 options.isAnrEnabled = true // پیش‌فرض: روشن options.isEnableAutoSessionTracking = true // پیش‌فرض: روشن — خوراک سلامت نسخه } } } ``` ## گزینه‌هایی که ارزش روشن‌کردن دارند | گزینه | چه چیزی در ارورا می‌گیرید | | --- | --- | | `tracesSampleRate` | [کارایی](/products/performance): تراکنش شروع برنامه، اکتیویتی و فرگمنت، اسپن‌های HTTP | | `profilesSampleRate` | [پروفایلینگ](/products/profiling) تراکنش‌های نمونه‌برداری‌شده (ردپای متد ART) | | `isAttachScreenshot` | اسکرین‌شاتی که همراه هر خطا ذخیره و در صفحهٔ خطا پیش‌نمایش می‌شود | | `isAttachViewHierarchy` | درخت ویوها در لحظهٔ خطا، که در صفحهٔ خطا به شکل درخت نمایش داده می‌شود | | `sessionReplay.*SampleRate` | [بازپخش نشست موبایل](/products/session-replay#بازپخش-موبایل) | | `isAnrEnabled` | ANRها مثل خطای معمولی می‌رسند و مثل هر خطای دیگری گروه می‌شوند و هشدار می‌دهند؛ نرخ ANR هم از همین‌ها حساب می‌شود | | `isEnableAutoSessionTracking` | نشست‌ها برای [سلامت نسخه](/products/release-health) — پیش‌فرض روشن | لازم نیست `release` را تعیین کنید: SDK خودش آن را `@+` می‌گذارد و سلامت نسخه و تطبیق فایل‌های دیباگ روی همین رشته کار می‌کنند. اسکرین‌شات‌ها و سلسله‌مراتب ویوها [پیوست](/products/issues#پیوستها) هستند: همراه رویدادشان ذخیره می‌شوند، از [نگهداری داده](/account/retention)ی سازمان پیروی می‌کنند و اگر رویداد نمونه‌برداری یا با سقف جهش کنار گذاشته شود، همراه آن حذف می‌شوند. ## بارگذاری نگاشت ProGuard/R8 و سیمبل‌های NDK بیلد انتشارِ مینیفای‌شده فریم‌هایی مثل `a.b.c.d(SourceFile)` گزارش می‌دهد و کرش نیتیو فقط آدرس. ارورا با فایل‌هایی که بارگذاری می‌کنید، **پیش از گروه‌بندی** آن‌ها را رمزگشایی و نمادگشایی می‌کند — نحوهٔ تطبیق را در [فایل‌های دیباگ](/products/debug-files) ببینید. پلاگین Gradle را به ارورا وصل کنید: ```kotlin // app/build.gradle.kts sentry { url.set("https://") org.set("") projectName.set("") authToken.set(System.getenv("SENTRY_AUTH_TOKEN")) // errora_pat_… includeProguardMapping.set(true) // فایل mapping.txt از ProGuard/R8 autoUploadProguardMapping.set(true) // بارگذاری آن در حین بیلد uploadNativeSymbols.set(true) // سیمبل‌های دیباگ .so در NDK includeNativeSources.set(false) telemetry.set(false) // تله‌متری بیلد به sentry.io فرستاده نشود } ``` - `authToken` یک [توکن دسترسی شخصی](/account/tokens) ارورا (`errora_pat_…`) است که صاحبش در سازمان نقش **member** یا بالاتر دارد. آن را در مخزن اسرار CI نگه دارید، نه داخل مخزن کد. - `org` شناسهٔ متنی (slug) سازمان است که در آدرس داشبورد می‌بینید (`/organizations//…`)؛ `projectName` هم شناسهٔ متنی پروژه است. - اگر ترجیح می‌دهید بلوک را خالی بگذارید، پلاگین فایل `sentry.properties` و متغیرهای محیطی `SENTRY_URL`، `SENTRY_ORG`، `SENTRY_PROJECT` و `SENTRY_AUTH_TOKEN` را هم می‌خواند. پلاگین روی هر بیلد یک UUID پروگارد می‌زند که SDK گزارشش می‌کند؛ پس هر کرش با نگاشت همان بیلدی رمزگشایی می‌شود که آن را ساخته. آنچه رسیده را در **تنظیمات ← فایل‌های دیباگ** ببینید. ### بدون پلاگین Gradle از `sentry-cli` با همان چهار تنظیم استفاده کنید: ```bash export SENTRY_URL=https:// export SENTRY_AUTH_TOKEN=errora_pat_… export SENTRY_ORG= export SENTRY_PROJECT= sentry-cli upload-proguard --uuid app/build/outputs/mapping/release/mapping.txt sentry-cli debug-files upload app/build/intermediates/merged_native_libs/release/ ``` مقدار `--uuid` باید همان UUID پروگاردی باشد که برنامه گزارش می‌کند — و برای همین پلاگین راه ساده‌تری است. ## بررسی نهایی یک نسخهٔ **release** بسازید (تا هم مینیفای و هم بارگذاری اجرا شوند) و بعد: ```kotlin Sentry.captureException(RuntimeException("Errora smoke test")) // یا یک کرش واقعی: throw RuntimeException("Errora crash test") ``` کرش مدیریت‌نشده دفعهٔ بعدی که برنامه باز شود فرستاده می‌شود. صفحهٔ خطا را باز کنید: فریم‌ها باید نام واقعی کلاس و متد را همراه شمارهٔ خط نشان دهند. اگر فریمی هنوز مبهم است، صفحهٔ خطا می‌گوید کدام نگاشت (شناسهٔ دیباگ) کم است. ## عیب‌یابی | نشانه | علت / راه‌حل | | --- | --- | | فریم‌ها هنوز شبیه `a.b.c` هستند | نگاشت آن بیلد بارگذاری نشده — خروجی Gradle و **فایل‌های دیباگ** را بررسی کنید | | فریم‌های نیتیو فقط آدرس دارند | سیمبل‌های NDK را بارگذاری کنید (`uploadNativeSymbols`)، آن هم از فایل‌های `.so` **strip‌نشده** | | بارگذاری با `401` شکست می‌خورد | توکن اشتباه یا باطل‌شده است، یا `url` هنوز به sentry.io اشاره می‌کند | | بارگذاری با `403` شکست می‌خورد | صاحب توکن عضو آن سازمان نیست | | دادهٔ سلامت نسخه نمی‌آید | ردیابی خودکار نشست خاموش شده است | | بعد از `throw` کرشی نمی‌رسد | کرش‌ها در اجرای **بعدی** فرستاده می‌شوند — برنامه را دوباره باز کنید |