Android エラー追跡

概要

エラー追跡では、Android SDK から収集されたエラーを処理します。エラー追跡をすばやく開始するには、最新バージョンの dd-sdk-android をダウンロードします。

モバイルの Android ソースコードが難読化されている場合は、 Proguard/R8 マッピングファイルを Datadog にアップロードして、さまざまなスタックトレースを難読化します。その後、特定のエラーについて、ファイルパス、行番号、および関連するスタックトレースの各フレームのコードスニペットにアクセスできます。

マッピングファイルのアップロード

  1. 以下のスニペットを使用して、Gradle プラグインを Gradle プロジェクトに追加します。
// アプリの build.gradle スクリプトで
plugins {
    id("com.datadoghq.dd-sdk-android-gradle-plugin") version "x.y.z"
}
  1. 新しい専用の Datadog API キーを作成し、DD_API_KEY という名前の環境変数としてエクスポートします (または、タスクプロパティとして渡すこともできます)。
  2. (オプション)2 つの追加環境変数 export DATADOG_SITE="datadoghq.eu" および export DATADOG_API_HOST="api.datadoghq.eu" をエクスポートして、EU リージョンにファイルをアップロードするためにプラグインを構成します。
  3. 難読化された APK が構築されたらアップロードタスクを実行します。
./gradlew uploadMappingRelease

: プロジェクトで追加のフレーバーを使用している場合、プラグインは、難読化が有効になっている各バリアントのアップロードタスクを提供します。この場合、SDK を適切なバリアント名で初期化します (必要な API はバージョン 1.8.0 以降で使用可能です)。

  1. 以下のスニペットを使用して、Gradle プラグインを Gradle プロジェクトに追加します。
// アプリの build.gradle スクリプトで
plugins {
    id("com.datadoghq.dd-sdk-android-gradle-plugin") version "x.y.z"
}
  1. 新しい専用の Datadog API キーを作成し、DD_API_KEY という名前の環境変数としてエクスポートします (または、タスクプロパティとして渡すこともできます)。
  2. アプリの build.gradle スクリプトファイルで以下のスニペットを追加し、EU リージョンで使用するようプラグインを構成します。
datadog {
    site = "EU"
}
  1. 難読化された APK が構築されたらアップロードタスクを実行します。
./gradlew uploadMappingRelease

: プロジェクトで追加のフレーバーを使用している場合、プラグインは、難読化が有効になっている各バリアントのアップロードタスクを提供します。この場合、SDK を適切なバリアント名で初期化します (必要な API はバージョン 1.8.0 以降で使用可能です)。

プラグインコンフィギュレーションオプション

プラグイン拡張機能を介して構成できるプラグインプロパティがいくつかあります。複数のバリアントを使用している場合は、バリアントの特定のフレーバーにプロパティ値を設定できます。

例:

バリアント fooBarRelease の場合、次のコンフィギュレーションを使用できます。

datadog {
    foo {
        versionName = "foo"
    }
    bar {
        versionName = "bar"
    }
    fooBar {
        versionName = "fooBar"
    }
}

このバリアントのタスクコンフィギュレーションは、提供されている 3 つのフレーバーコンフィギュレーションすべてから bar -> foo -> fooBar の順序でマージされます。これは、versionName プロパティの最終値を fooBar として解決します。

プロパティ名説明
versionNameアプリケーションのバージョン名。
serviceNameアプリケーションのサービス名。
siteデータをアップロードする Datadog サイト(“US”、“EU”、“GOV” のいずれか)。
remoteRepositoryUrlソースコードがデプロイされたリモートリポジトリの URL。指定しない場合、この値はタスクの実行時に現在の GIT コンフィギュレーションから解決されます。
checkProjectDependenciesこのプロパティは、Datadog SDK が依存関係に含まれているかどうかをプラグインがチェックするかどうかを制御します。“none” - 無視、“warn” - 警告をログに記録、“fail” - エラーでビルドに失敗します (デフォルト)。

CI/CD パイプラインとのインテグレーション

デフォルトでは、マッピングのアップロードタスクは、ビルドグラフの他のタスクから独立しています。マッピングのアップロードが必要な場合は、このタスクを手動で実行します。

CI/CD パイプラインでこのタスクを実行し、ビルドグラフの一部としてこのタスクが必要な場合、マッピングファイルが生成された後にアップロードタスクを実行するように設定できます。

例:

tasks["minify${variant}WithR8"].finalizedBy { tasks["uploadMapping${variant}"] }

エラーの解決

クラス名、ファイルパス、そして行番号にアクセスできないため、難読化されたスタックトレースは役に立ちません。コードベースのどこで何かが起こっているのかを把握するのは簡単ではありません。さらに、コードスニペットは依然として縮小されているため (変換されたコードの 1 行が長い)、トラブルシューティングプロセスがさらに困難になります。縮小スタックトレースの例を以下に示します。

image_obfuscated

それどころか、難読化を解除されたスタックトレースは、トラブルシューティングに必要なすべてのコンテキストを提供します。

image_deobfuscated

その他の参考資料