mcpField
S
sentry-android-sdk

sentry-android-sdk

github.com/getsentry開発2722.3k 回インストール今日更新
リポジトリ

sentry-android-sdk について

KotlinまたはJavaのAndroidプロジェクトにSentryの監視機能を導入するための設定スキルです。プロジェクトを調査し、Gradleプラグインまたは手動設定でエラー監視、トレース、リプレイ、プロファイリング、ログなどを構成します。

主な機能

  1. 01Androidのビルドファイルと既存設定の調査
  2. 02Gradleプラグインまたは手動導入の案内
  3. 03エラー監視とトレースの設定
  4. 04リプレイ、プロファイリング、ログ、フィードバックへの対応
  5. 05プロジェクト構成に応じた設定確認

活用シーン

  1. 01KotlinまたはJavaのAndroidアプリへのSentry導入
  2. 02検出した依存関係に基づくインテグレーション選定
  3. 03既存AndroidプロジェクトでのSentry設定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/getsentry/sentry-for-ai --skill sentry-android-sdk

インストール後、Claude Code で/sentry-android-sdkを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
crons.md
error-monitoring.md
integrations.md
logging.md
metrics.md
profiling.md
session-replay.md
tracing.md

詳細

すべてのスキル > SDK セットアップ > Android SDK

Sentry Android SDK

Android プロジェクトをスキャンし、エラー監視、トレーシング、プロファイリング、セッションリプレイ、ロギングなど、Sentry のセットアップを一通り案内する、方針を重視したウィザードです。

このスキルを使う場面

  • ユーザーが Android アプリに「Sentry を追加」または「Sentry をセットアップ」したいと言った場合
  • ユーザーが Android でエラー監視、クラッシュレポート、ANR 検出、トレーシング、プロファイリング、セッションリプレイ、ロギングを求めている場合
  • ユーザーが sentry-android、io.sentry:sentry-android、モバイルのクラッシュ追跡、または Kotlin/Java Android 向けの Sentry に言及した場合
  • ユーザーがネイティブ(NDK)のクラッシュ、アプリケーション応答なし(ANR)イベント、またはアプリの起動パフォーマンスを監視したい場合

注: 以下の SDK バージョンと API は、執筆時点の最新の Sentry ドキュメント(io.sentry:sentry-android:8.33.0、Gradle プラグイン 6.1.0)に基づいています。 実装前に必ず docs.sentry.io/platforms/android/ で確認してください。


フェーズ 1:検出

推奨事項を提示する前に、以下のコマンドを実行してプロジェクトの状況を把握してください。

# Detect project structure and build system
ls build.gradle build.gradle.kts settings.gradle settings.gradle.kts 2>/dev/null

# Check AGP version and existing Sentry
grep -r '"com.android.application"' build.gradle* app/build.gradle* 2>/dev/null | head -3
grep -ri sentry build.gradle* app/build.gradle* 2>/dev/null | head -10

# Check app-level build file (Groovy vs KTS)
ls app/build.gradle app/build.gradle.kts 2>/dev/null

# Detect Gradle version catalog (libs.versions.toml) — modern AGP projects
ls gradle/libs.versions.toml 2>/dev/null

# Check for existing Sentry entries in the version catalog
grep -iE 'sentry|io\.sentry' gradle/libs.versions.toml 2>/dev/null | head -10

# Check if build files reference the catalog (alias/libs.* usage)
grep -E 'alias\(libs\.|libs\.[a-zA-Z]' build.gradle build.gradle.kts app/build.gradle app/build.gradle.kts 2>/dev/null | head -5

# Detect Kotlin vs Java
find app/src/main -name "*.kt" 2>/dev/null | head -3
find app/src/main -name "*.java" 2>/dev/null | head -3

# Check minSdk, targetSdk
grep -E 'minSdk|targetSdk|compileSdk|minSdkVersion|targetSdkVersion' app/build.gradle app/build.gradle.kts 2>/dev/null | head -6

# Detect Jetpack Compose
grep -E 'compose|androidx.compose' app/build.gradle app/build.gradle.kts 2>/dev/null | head -5

# Detect OkHttp (popular HTTP client — has dedicated integration)
grep -E 'okhttp|retrofit' app/build.gradle app/build.gradle.kts 2>/dev/null | head -3

# Detect Room or SQLite
grep -E 'androidx.room|androidx.sqlite' app/build.gradle app/build.gradle.kts 2>/dev/null | head -3

# Detect Timber (logging library)
grep -E 'timber' app/build.gradle app/build.gradle.kts 2>/dev/null | head -3

# Detect Jetpack Navigation
grep -E 'androidx.navigation' app/build.gradle app/build.gradle.kts 2>/dev/null | head -3

# Detect Apollo (GraphQL)
grep -E 'apollo' app/build.gradle app/build.gradle.kts 2>/dev/null | head -3

# Check existing Sentry initialization
grep -r "SentryAndroid.init\|io.sentry.Sentry" app/src/ 2>/dev/null | head -5

# Check Application class
find app/src/main -name "*.kt" -o -name "*.java" 2>/dev/null | xargs grep -l "Application()" 2>/dev/null | head -3

# Adjacent backend (for cross-linking)
ls ../backend ../server ../api 2>/dev/null
find .. -maxdepth 2 \( -name "go.mod" -o -name "requirements.txt" -o -name "Gemfile" \) 2>/dev/null | grep -v node_modules | head -5

確認事項:

質問影響
build.gradle.kts があるか?すべての例で Kotlin DSL 構文を使用します
gradle/libs.versions.toml があるか?Sentry をバージョンカタログに追加し、ビルドファイルでは libs.* から参照します
カタログに sentry のエントリがすでにあるか?既存のバージョン参照を再利用し、重複やバージョンのハードコードを避けます
minSdk < 26 か?セッションリプレイには API 26 以降が必要で、それ未満では何も行われないことを伝えます
Compose が検出されたか?sentry-compose-android と Compose 固有のマスキングを推奨します
OkHttp があるか?sentry-okhttp インターセプター、または Gradle プラグインのバイトコード自動計測を推奨します
Room/SQLite があるか?sentry-android-sqlite またはプラグインによるバイトコード計測を推奨します
Timber があるか?sentry-android-timber との統合を推奨します
Jetpack Navigation を使用しているか?画面追跡には sentry-android-navigation を推奨します
SentryAndroid.init() がすでにあるか?インストールは省略し、機能設定に進みます
Application サブクラスがあるか?そこに SentryAndroid.init() を追加します

フェーズ 2:推奨

見つかった内容に基づいて、具体的な推奨事項を提示してください。漠然とした質問はせず、まず提案してください。

推奨(基本的なカバレッジ — 常にセットアップする項目):

  • ✅ エラー監視 — 捕捉されなかった例外、ANR、ネイティブ NDK クラッシュを自動的に取得します
  • ✅ トレーシング — Activity のライフサイクル、アプリの起動、HTTP リクエスト、データベースクエリを自動計測します
  • ✅ セッションリプレイ — デバッグ用に画面キャプチャとユーザー操作を記録します(API 26 以降)

オプション(可観測性の強化):

  • ⚡ プロファイリング — 継続的な UI プロファイリング(推奨)またはトランザクションベースのサンプリング
  • ⚡ ロギング — Sentry.logger() による構造化ログ。オプションで Timber ブリッジも利用できます
  • ⚡ ユーザーフィードバック — アプリ内からユーザーが送信するバグレポートを収集します

推奨の判断基準:

機能次の場合に推奨
エラー監視常に — すべての Android アプリに欠かせない基本機能です
トレーシングAndroid では常に — アプリの起動時間、Activity のライフサイクル、ネットワーク遅延が重要です
セッションリプレイAPI 26 以降のユーザー向け本番アプリ。ユーザーの問題を視覚的にデバッグする場合
プロファイリングパフォーマンスが重要なアプリ、起動時間の調査、本番環境でのパフォーマンス分析
ロギングアプリで構造化ロギングを使用している場合、または Sentry でログとトレースを関連付けたい場合
ユーザーフィードバックベータ版または顧客向けアプリで、ユーザーからバグレポートを送信してもらいたい場合

提案例:「お使いの [Kotlin/Java] Android アプリ(minSdk X)には、エラー監視 + トレーシング + セッションリプレイのセットアップをおすすめします。プロファイリングとロギングも追加しますか?」


フェーズ 3:ガイド

セットアップ方法を選択する
プロジェクトの種類推奨されるセットアップ複雑さ
新規プロジェクトで、既存の Sentry がないGradle プラグイン(推奨)低 — プラグインがほとんどの設定を処理します
既存のプロジェクトで、Sentry がないGradle プラグインまたは手動初期化中 — 依存関係と Application クラスを追加します
手動で完全に制御するApplication で SentryAndroid.init() を実行中 — 明示的に設定でき、最も柔軟です
オプション 1:ウィザード(推奨)

ウィザードはご自身で実行する必要があります — ウィザードではログインのためにブラウザーが開き、 エージェントが処理できない対話形式の入力が必要です。 ターミナルにコピーして貼り付けてください:

npx @sentry/wizard@latest -i android

ログイン、組織とプロジェクトの選択、Gradle プラグインの設定、依存関係の インストール、DSN の設定、ProGuard/R8 マッピングのアップロードを処理します。

完了したら、戻って検証に進んでください。

ウィザードをスキップする場合は、以下のオプション 2(手動セットアップ)に進みます。


オプション 2:手動セットアップ
Gradle Version Catalog(gradle/libs.versions.toml)を使用する

フェーズ 1 で gradle/libs.versions.toml が検出された場合は、まずカタログに Sentry を追加し、その後ビルドファイルから参照します。これにより、バージョンを一元管理でき、最新の AGP プロジェクト規約にも適合します。

手順 1 — gradle/libs.versions.toml にエントリーを追加する

[versions]
sentry = "8.33.0"
sentryGradlePlugin = "6.1.0"

[libraries]
sentry-android = { module = "io.sentry:sentry-android", version.ref = "sentry" }
sentry-bom = { module = "io.sentry:sentry-bom", version.ref = "sentry" }
# Optional integrations — add only the ones your project uses:
sentry-android-timber = { module = "io.sentry:sentry-android-timber" }
sentry-android-fragment = { module = "io.sentry:sentry-android-fragment" }
sentry-compose-android = { module = "io.sentry:sentry-compose-android" }
sentry-android-navigation = { module = "io.sentry:sentry-android-navigation" }
sentry-okhttp = { module = "io.sentry:sentry-okhttp" }
sentry-android-sqlite = { module = "io.sentry:sentry-android-sqlite" }
sentry-kotlin-extensions = { module = "io.sentry:sentry-kotlin-extensions" }

[plugins]
sentry-android-gradle = { id = "io.sentry.android.gradle", version.ref = "sentryGradlePlugin" }

注: オプションの連携エントリーでは version.ref を省略します。バージョンは解決時に BOM から取得されます。バージョン参照が必要なのは sentry-bom のみです。 カタログにすでに sentry のバージョンが定義されている場合は、重複したエントリーを追加せず、既存のものを再利用してください。

手順 2 — build.gradle[.kts] からカタログを参照する

プロジェクトレベルの build.gradle.kts:

plugins {
    alias(libs.plugins.sentry.android.gradle) apply false
}

アプリレベルの app/build.gradle.kts:

plugins {
    id("com.android.application")
    alias(libs.plugins.sentry.android.gradle)
}

dependencies {
    implementation(platform(libs.sentry.bom))
    implementation(libs.sentry.android)
    // implementation(libs.sentry.okhttp)
    // implementation(libs.sentry.compose.android)
}

Groovy DSL(app/build.gradle)の場合:

plugins {
    id "com.android.application"
    alias libs.plugins.sentry.android.gradle
}

dependencies {
    implementation platform(libs.sentry.bom)
    implementation libs.sentry.android
}

続けて、以下のパス A の手順 2 にある sentry {} 設定ブロックを使用します。Application クラスの初期化、マニフェストへの登録、検証など、残りのセットアップは同じです。


パス A:Gradle プラグイン(推奨)

Sentry Gradle プラグインは、最も簡単なセットアップ方法です。次の処理を行います。

  • リリースビルド時に ProGuard/R8 マッピングファイルを自動でアップロードします
  • スタックフレームにソースコンテキストを挿入します
  • バイトコード変換により、OkHttp、Room/SQLite、File I/O、Compose ナビゲーション、android.util.Log をオプションで計測します(ソースの変更は不要です)

手順 1 — build.gradle[.kts](プロジェクトレベル)にプラグインを追加する

Groovy DSL(build.gradle):

plugins {
    id "io.sentry.android.gradle" version "6.1.0" apply false
}

Kotlin DSL(build.gradle.kts):

plugins {
    id("io.sentry.android.gradle") version "6.1.0" apply false
}

手順 2 — プラグインを適用し、app/build.gradle[.kts] に依存関係を追加する

Groovy DSL:

plugins {
    id "com.android.application"
    id "io.sentry.android.gradle"
}

android {
    // ...
}

dependencies {
    // Use BOM for consistent versions across sentry modules
    implementation platform("io.sentry:sentry-bom:8.33.0")
    implementation "io.sentry:sentry-android"

    // Optional integrations (add what's relevant):
    // implementation "io.sentry:sentry-android-timber"     // Timber bridge
    // implementation "io.sentry:sentry-android-fragment"   // Fragment lifecycle tracing
    // implementation "io.sentry:sentry-compose-android"    // Jetpack Compose support
    // implementation "io.sentry:sentry-android-navigation"  // Jetpack Navigation
    // implementation "io.sentry:sentry-okhttp"             // OkHttp interceptor
    // implementation "io.sentry:sentry-android-sqlite"     // Room/SQLite tracing
    // implementation "io.sentry:sentry-kotlin-extensions"  // Coroutine context propagation
}

sentry {
    org = "YOUR_ORG_SLUG"
    projectName = "YOUR_PROJECT_SLUG"
    authToken = System.getenv("SENTRY_AUTH_TOKEN")

    // Enable auto-instrumentation via bytecode transforms (no source changes needed)
    tracingInstrumentation {
        enabled = true
        features = [InstrumentationFeature.DATABASE, InstrumentationFeature.FILE_IO,
                    InstrumentationFeature.OKHTTP, InstrumentationFeature.COMPOSE]
    }

    // Upload ProGuard mapping and source context on release
    autoUploadProguardMapping = true
    includeSourceContext = true
}

Kotlin DSL(app/build.gradle.kts):

plugins {
    id("com.android.application")
    id("io.sentry.android.gradle")
}

dependencies {
    implementation(platform("io.sentry:sentry-bom:8.33.0"))
    implementation("io.sentry:sentry-android")

    // Optional integrations:
    // implementation("io.sentry:sentry-android-timber")
    // implementation("io.sentry:sentry-android-fragment")
    // implementation("io.sentry:sentry-compose-android")
    // implementation("io.sentry:sentry-android-navigation")
    // implementation("io.sentry:sentry-okhttp")
    // implementation("io.sentry:sentry-android-sqlite")
    // implementation("io.sentry:sentry-kotlin-extensions")
}

sentry {
    org = "YOUR_ORG_SLUG"
    projectName = "YOUR_PROJECT_SLUG"
    authToken = System.getenv("SENTRY_AUTH_TOKEN")

    tracingInstrumentation {
        enabled = true
        features = setOf(
            InstrumentationFeature.DATABASE,
            InstrumentationFeature.FILE_IO,
            InstrumentationFeature.OKHTTP,
            InstrumentationFeature.COMPOSE,
        )
    }

    autoUploadProguardMapping = true
    includeSourceContext = true
}

手順 3 — Application クラスで Sentry を初期化する

Application のサブクラスがない場合は、作成します。

// MyApplication.kt
import android.app.Application
import io.sentry.SentryLevel
import io.sentry.android.core.SentryAndroid
import io.sentry.android.replay.SentryReplayOptions

class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()

        SentryAndroid.init(this) { options ->
            options.dsn = "YOUR_SENTRY_DSN"

            // Tracing — lower to 0.1–0.2 in high-traffic production
            options.tracesSampleRate = 1.0

            // Profiling — use continuous UI profiling (recommended, SDK ≥ 8.7.0)
            options.profileSessionSampleRate = 1.0

            // Session Replay (API 26+ only; silent no-op below API 26)
            options.sessionReplay.sessionSampleRate = 0.1    // 10% of all sessions
            options.sessionReplay.onErrorSampleRate = 1.0    // 100% on error

            // Structured logging
            options.logs.isEnabled = true

            // Environment
            options.environment = BuildConfig.BUILD_TYPE
        }
    }
}

Java の場合:

// MyApplication.java
import android.app.Application;
import io.sentry.android.core.SentryAndroid;

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();

        SentryAndroid.init(this, options -> {
            options.setDsn("YOUR_SENTRY_DSN");
            options.setTracesSampleRate(1.0);
            options.setProfileSessionSampleRate(1.0);
            options.getSessionReplay().setSessionSampleRate(0.1);
            options.getSessionReplay().setOnErrorSampleRate(1.0);
            options.getLogs().setEnabled(true);
            options.setEnvironment(BuildConfig.BUILD_TYPE);
        });
    }
}

手順 4 — AndroidManifest.xml に Application を登録する

<application
    android:name=".MyApplication"
    ... >

パス B:手動セットアップ(Gradle プラグインなし)

Gradle プラグインを使用できない場合(例:標準以外のビルド構成)はこちらを使用します。

手順 1 — app/build.gradle[.kts] に依存関係を追加する

dependencies {
    implementation(platform("io.sentry:sentry-bom:8.33.0"))
    implementation("io.sentry:sentry-android")
}

手順 2 — Application クラスで初期化する(パス A の手順 3 と同じ)

手順 3 — ProGuard/R8 を手動で設定する

Sentry SDK には ProGuard ルールファイルが自動で含まれています。マッピングを手動でアップロードするには、sentry-cli をインストールし、CI に次の内容を追加します。

sentry-cli releases files "[email protected]+42" upload-proguard \
  --org YOUR_ORG --project YOUR_PROJECT \
  app/build/outputs/mapping/release/mapping.txt

クイックリファレンス:機能をすべて備えた SentryAndroid.init()
SentryAndroid.init(this) { options ->
    options.dsn = "YOUR_SENTRY_DSN"

    // Environment and release
    options.environment = BuildConfig.BUILD_TYPE     // "debug", "release", etc.
    options.release = "${BuildConfig.APPLICATION_ID}@${BuildConfig.VERSION_NAME}+${BuildConfig.VERSION_CODE}"

    // Tracing — sample 100% in dev, lower to 10–20% in production
    options.tracesSampleRate = 1.0

    // Continuous UI profiling (recommended over transaction-based)
    options.profileSessionSampleRate = 1.0

    // Session Replay (API 26+; silent no-op on API 21–25)
    options.sessionReplay.sessionSampleRate = 0.1
    options.sessionReplay.onErrorSampleRate = 1.0
    options.sessionReplay.maskAllText = true         // mask text for privacy
    options.sessionReplay.maskAllImages = true       // mask images for privacy

    // Structured logging
    options.logs.isEnabled = true

    // Error enrichment
    options.isAttachScreenshot = true                // capture screenshot on error
    options.isAttachViewHierarchy = true             // attach view hierarchy JSON

    // ANR detection (5s default; watchdog + ApplicationExitInfo API 30+)
    options.isAnrEnabled = true

    // NDK native crash handling (enabled by default)
    options.isEnableNdk = true

    // Send PII: IP address, user data
    options.sendDefaultPii = true

    // Trace propagation (backend distributed tracing)
    options.tracePropagationTargets = listOf("api.yourapp.com", ".*\\.yourapp\\.com")

    // Verbose logging — disable in production
    options.isDebug = BuildConfig.DEBUG
}

合意済みの各機能について

機能を1つずつ確認します。それぞれのリファレンスファイルを読み込み、記載された手順に従ってから、次に進む前に検証してください。

機能リファレンス読み込むタイミング
エラーモニタリング${SKILL_ROOT}/references/error-monitoring.md常時(基本設定)
トレーシングとパフォーマンス${SKILL_ROOT}/references/tracing.mdAndroid の場合は常時(Activity のライフサイクル、ネットワーク)
プロファイリング${SKILL_ROOT}/references/profiling.mdパフォーマンスが重要な本番アプリ
セッションリプレイ${SKILL_ROOT}/references/session-replay.mdユーザー向けアプリ(API 26+)
ロギング${SKILL_ROOT}/references/logging.md構造化ロギング/ログとトレースの相関
メトリクス${SKILL_ROOT}/references/metrics.mdカスタムメトリクスの追跡(SDK ≥ 8.30.0)
Cron${SKILL_ROOT}/references/crons.mdスケジュールされたジョブ、WorkManager のチェックイン
インテグレーションリファレンス${SKILL_ROOT}/references/integrations.md組み込み、オプション、Gradle バイトコードのインテグレーション

各機能について、Read ${SKILL_ROOT}/references/<feature>.md を実行し、手順に正確に従って、動作することを確認してください。


設定リファレンス

コア SentryOptions(SentryAndroid.init 経由)
オプション型デフォルト用途
dsnString—必須。 プロジェクトの DSN。空の場合、SDK は通知なしに無効になります
environmentString—例:"production"、"staging"。環境変数:SENTRY_ENVIRONMENT
releaseString—アプリのバージョン。例:"[email protected]+42"。環境変数:SENTRY_RELEASE
distString—ビルドバリアント/配布識別子
sendDefaultPiiBooleanfalsePII(IP アドレス、ユーザーデータ)を含めます
sampleRateDouble1.0エラーイベントのサンプリング(0.0–1.0)
maxBreadcrumbsInt100イベントごとのパンくずリストの最大数
isAttachStacktraceBooleantrueメッセージイベントにスタックトレースを自動添付します
isAttachScreenshotBooleanfalseエラー発生時にスクリーンショットをキャプチャします
isAttachViewHierarchyBooleanfalseJSON 形式のビュー階層を添付ファイルとして追加します
isDebugBooleanfalse詳細な SDK 出力。本番環境では使用しないでください
isEnabledBooleantrueSDK 全体を無効にします(例:テスト用)
beforeSendSentryOptions.BeforeSendCallback—送信前にエラーイベントを変更または破棄します
beforeBreadcrumbSentryOptions.BeforeBreadcrumbCallback—保存前にパンくずリストをフィルタリングします
トレーシングオプション
オプション型デフォルト用途
tracesSampleRateDouble0.0トランザクションのサンプリングレート(0–1)。開発環境では 1.0 を使用してください
tracesSamplerTracesSamplerCallback—トランザクションごとのサンプリング。tracesSampleRate を上書きします
tracePropagationTargetsList<String>[".*"]sentry-trace および baggage ヘッダーを受信するホスト/URL
isEnableAutoActivityLifecycleTracingBooleantrueActivity のライフサイクルを自動計装します
isEnableTimeToFullDisplayTracingBooleanfalseTTFD スパン(Sentry.reportFullyDisplayed() が必要)
isEnableUserInteractionTracingBooleanfalseユーザー操作をトランザクションとして自動計装します
プロファイリングオプション
オプション型デフォルト用途
profileSessionSampleRateDouble0.0継続的プロファイリングのサンプリングレート(SDK ≥ 8.7.0、API 22+)
profilesSampleRateDouble0.0従来のトランザクションプロファイリングレート(継続的プロファイリングとは併用不可)
isProfilingStartOnAppStartBooleanfalseアプリ起動時にプロファイリングセッションを自動開始します
ANR オプション
オプション型デフォルト目的
isAnrEnabledBooleantrueANR ウォッチドッグスレッドを有効にします
anrTimeoutIntervalMillisLong5000ANR の報告までのミリ秒数です
isAnrReportInDebugBooleanfalseデバッグビルドで ANR を報告します(デバッガー使用時はログが多くなります)
NDK オプション
オプション型デフォルト目的
isEnableNdkBooleantruesentry-native によるネイティブクラッシュのキャプチャを有効にします
isEnableScopeSyncBooleantrueJava のスコープ(ユーザー、タグ)を NDK レイヤーに同期します
isEnableTombstoneFetchJobBooleantrueエンリッチメント用に NDK のトゥームストーンファイルを取得します
セッションリプレイのオプション(options.sessionReplay)
オプション型デフォルト目的
sessionSampleRateDouble0.0記録する全セッションの割合です
onErrorSampleRateDouble0.0記録するエラーセッションの割合です
maskAllTextBooleantrueリプレイ内のすべてのテキストをマスクします
maskAllImagesBooleantrueリプレイ内のすべての画像をマスクします
qualitySentryReplayQualityMEDIUM動画の品質です:LOW、MEDIUM、HIGH
ロギングオプション(options.logs)
オプション型デフォルト目的
isEnabledBooleanfalseSentry.logger() API を有効にします(SDK ≥ 8.12.0)
setBeforeSendBeforeSendLogCallback—送信前にログエントリーをフィルタリング/変更します
環境変数
変数目的備考
SENTRY_DSNデータソース名CI で設定します。SDK は初期化時に環境から読み取ります
SENTRY_AUTH_TOKENProGuard マッピングとソースコンテキストをアップロードしますコミットしないでください。CI/CD のシークレットを使用してください
SENTRY_ORG組織のスラッグGradle プラグインの sentry.org で使用されます
SENTRY_PROJECTプロジェクトのスラッグGradle プラグインの sentry.projectName で使用されます
SENTRY_RELEASEリリース識別子options.release がフォールバックとして使われます
SENTRY_ENVIRONMENT環境名options.environment がフォールバックとして使われます

DSN や多くのオプションは、AndroidManifest.xml のメタデータからも設定できます。

<application>
    <meta-data android:name="io.sentry.dsn" android:value="YOUR_DSN" />
    <meta-data android:name="io.sentry.traces-sample-rate" android:value="1.0" />
    <meta-data android:name="io.sentry.environment" android:value="production" />
    <meta-data android:name="io.sentry.anr.enable" android:value="true" />
    <meta-data android:name="io.sentry.attach-screenshot" android:value="true" />
    <meta-data android:name="io.sentry.attach-view-hierarchy" android:value="true" />
</application>

⚠️ マニフェストのメタデータは便利な代替手段ですが、すべてのオプションには対応していません(session replay、profiling、hooks などの複雑な設定には、SentryAndroid.init() を使用してください)。


検証

セットアップ後、Sentry がイベントを受信していることを確認します。

エラーキャプチャのテスト:

// In an Activity or Fragment
try {
    throw RuntimeException("Sentry Android SDK test")
} catch (e: Exception) {
    Sentry.captureException(e)
}

トレーシングのテスト:

val transaction = Sentry.startTransaction("test-task", "task")
val span = transaction.startChild("test-span", "description")
span.finish()
transaction.finish()

構造化ログのテスト(SDK ≥ 8.12.0):

Sentry.logger().info("Sentry logging test")
Sentry.logger().error("Error log test", Exception("test error"))

Sentry ダッシュボードを確認します:

  • Issues → テスト例外が数秒以内に表示されます
  • Traces → 子スパンを含む test-task トランザクションを探します
  • Replays → アプリを操作した後、セッション記録が表示されます(API 26 以上が必要です)
  • Logs → Logs タブに構造化ログエントリーが表示されます

何も表示されない場合:

  1. options.isDebug = true を設定します。SDK のログが Logcat に出力されます
  2. DSN が正しく、Sentry プロジェクトと一致していることを確認します
  3. Application クラスが AndroidManifest.xml の android:name として登録されていることを確認します
  4. デバイス/エミュレーターがインターネットに接続されていることを確認します
  5. NDK クラッシュの場合、isEnableNdk = true(デフォルト)であり、NDK サポートを有効にしてビルドされていることを確認します

フェーズ 4:相互リンク

Android のセットアップが完了したら、Sentry のカバレッジが不足しているバックエンドまたは Web フロントエンドがないか確認します。

# Adjacent backend directories
ls ../backend ../server ../api 2>/dev/null
cat ../go.mod 2>/dev/null | head -3
cat ../requirements.txt ../pyproject.toml 2>/dev/null | head -5
cat ../Gemfile 2>/dev/null | head -3
ls ../backend/package.json ../server/package.json 2>/dev/null

# iOS counterpart app
ls ../ios ../YourApp-iOS 2>/dev/null
find .. -maxdepth 3 -name "*.xcodeproj" 2>/dev/null | head -3

Sentry が導入されていないバックエンドまたは関連プラットフォームが存在する場合、対応するスキルを提案します。

検出対象提案するスキル
Go バックエンド(go.mod)sentry-go-sdk
Python バックエンド(requirements.txt、pyproject.toml)sentry-python-sdk
Ruby バックエンド(Gemfile)sentry-ruby-sdk
Node.js バックエンド@sentry/node — docs.sentry.io/platforms/javascript/guides/express/ を参照
iOS アプリ(.xcodeproj)sentry-cocoa-sdk
React Native(react-native を含む package.json)sentry-react-native-sdk
React / Next.js Websentry-react-sdk または sentry-nextjs-sdk

分散トレーシングのセットアップ — バックエンドのスキルが追加されている場合、API にトレースコンテキストを伝播するよう Android で tracePropagationTargets を設定します。

options.tracePropagationTargets = listOf(
    "api.yourapp.com",
    ".*\\.yourapp\\.com"
)

これにより、Sentry のウォーターフォールビューでモバイルのトランザクションとバックエンドのトレースがリンクされます。


トラブルシューティング

問題解決方法
Sentry にイベントが表示されないisDebug = true に設定し、Logcat で SDK のエラーを確認します。DSN が正しく、プロジェクトと一致していることを確認します
SentryAndroid.init() が呼び出されないAndroidManifest.xml に android:name=".MyApplication" が設定されていることを確認します。Application クラスが抽象クラスではないことを確認します
Gradle プラグインが見つからないまずプロジェクトレベルの build.gradle.kts にプラグインを追加し、その後 apply false を設定します。バージョンが 6.1.0 であることを確認します
ProGuard マッピングがアップロードされないSENTRY_AUTH_TOKEN 環境変数を設定します。sentry {} ブロックで autoUploadProguardMapping = true になっていることを確認します
NDK クラッシュが捕捉されないisEnableNdk = true(デフォルト)であることを確認します。プロジェクトの android.ndkVersion で NDK が設定されていることを確認します
デバッガーで ANR が報告されるisAnrReportInDebug = false(デフォルト)に設定します。デバッガーがスレッドを一時停止すると、ANR ウォッチドッグが作動します
セッションリプレイが記録されないAPI 26 以降が必要です。sessionSampleRate > 0 または onErrorSampleRate > 0 であることを確認し、Logcat でリプレイのエラーを確認します
セッションリプレイの画面が空白になるデフォルトの PixelCopy にはハードウェアアクセラレーションが必要です。SentryReplayOptions.screenshotQuality = CANVAS を試してください
リプレイのマスキング位置がずれるtranslationX/Y または clipToPadding=false を設定したビューでは、マスクの位置がずれることがあります。github.com/getsentry/sentry-java に報告してください
beforeSend が実行されないbeforeSend がインターセプトするのは、管理対象(Java/Kotlin)のイベントのみです。NDK ネイティブクラッシュはこれを経由しません
OkHttp のスパンが表示されないSentryOkHttpInterceptor を OkHttpClient に追加するか、Gradle プラグインの OKHTTP バイトコード計測を使用します
スパンがトランザクションに紐付かないトランザクションの開始時に TransactionOptions().setBindToScope(true) が設定されていることを確認します。子スパンはスコープのルートを参照します
トレーシングが記録されないtracesSampleRate > 0 であることを確認します。Activity の計測には isEnableAutoActivityLifecycleTracing = true(デフォルト)が必要です
継続的プロファイリングが動作しないSDK ≥ 8.7.0 が必要です。API 22 以降が必要です。profileSessionSampleRate > 0 に設定し、profilesSampleRate も設定しないでください
両方のプロファイリングモードが設定されているprofilesSampleRate と profileSessionSampleRate は相互排他的です。どちらか一方のみを使用してください
TTFD スパンが見つからないisEnableTimeToFullDisplayTracing = true に設定し、画面の準備ができたときに Sentry.reportFullyDisplayed() を呼び出します
Kotlin コルーチンのスコープが失われるsentry-kotlin-extensions 依存関係を追加します。Sentry.cloneMainContext() を使用してトレースコンテキストを伝播します
リリースビルドのスタックトレースが判読できないProGuard マッピングがアップロードされていません。Gradle プラグインの autoUploadProguardMapping = true と、認証トークンが設定されていることを確認します
Sentry にソースコンテキストが表示されないsentry {} ブロックで includeSourceContext = true を有効にします(Gradle プラグインが必要です)
BOM のバージョンが競合するimplementation(platform("io.sentry:sentry-bom:8.33.0")) を使用し、他のすべての io.sentry:* エントリーからバージョンを省略します
バージョンカタログのエイリアスが解決されないgradle/libs.versions.toml を編集した後、Gradle を同期します。エイリアス名には TOML では -、ビルドファイルでは . を使用します(例:sentry-android → libs.sentry.android)
カタログに Sentry のバージョンが重複している既存の [versions] sentry = "..." エントリーを再利用します。キーを追加せず、カタログを使用している場合は build.gradle にバージョンを直接記述しないでください
SENTRY_AUTH_TOKEN が公開される認証トークンはビルド時にのみ使用します。SentryAndroid.init() に渡したり、APK に埋め込んだりしないでください

コメント