Androidエージェントの適用
WhaTapモバイルエージェントをAndroidアプリに適用すると、画面のロード、ネットワーク呼び出し、クラッシュ、ANR、リソース使用量、WebViewページの性能を収集できます。ライブラリ の追加からデータ収集の確認までの適用手順を案内します。WebView内のWebページまで収集するには、Web担当者の作業も必要です。詳細はWebViewページ収集の設定で扱います。
サポート環境
アプリ設定
| Item | Value |
|---|---|
minSdk | 21(Android 5.0)以上 |
| 外部依存関係 | なし |
| AARのサイズ | 約380 ~ 400KB |
ビルドツール
Android Gradle Plugin(AGP)7.0以上が必要です。JDKとGradleのバージョンは、使用するAGPの要件にそのまま従います。
| AGP | JDK | Gradle |
|---|---|---|
| 7.x | 11以上 | 7.0以上 |
| 8.x | 17以上 | 8.x |
| 9.x | 17以上 | 9.5以上 |
WebView連携に必要なバージョン
アプリ内のWebViewページまで併せて収集するには、Androidエージェントとブラウザエージェントの両方が必要バージョンを満たす必要があります。いずれか一方でもバージョンが低いと一部の項目が収集されず、アプリとWebのどちらのログにもエラーは残りません。
| Component | Minimum version | Owner |
|---|---|---|
| Androidエージェント | 2.3.5 | アプリ開発者 |
| ブラウザエージェント | 3.2.0 | Web開発者 |
適用が完了したら、ダッシュボードのagent_versionの値で実際に動作中のバージョンを確認してください。ファイルを置き換えるだけでは反映の有無が分かりません。ブラウザエージェントファイルのバージョンは、先頭4行のバナーで確認します。
head -4 whatap-browser-agent.js
エージェントのインストール
次の順序で進めます。
ここまで完了すると、画面遷移、リソース、クラッシュ、ANRの収集が開始されます。ネットワーク、WebView、メソッド追跡には追加の作業が必要です。詳細は収集項目で確認してください。
1. ライブラリの追加
2つの方法のうち1つを選択します。Maven Centralの方式を推奨します。
Maven Central(推奨)
mavenCentral()がすでに設定されている場合は、リポジトリを追加で設定する必要はありません。Maven Centralで最新バージョンを確認し、<最新バージョン>の箇所に入れてください。
dependencies {
implementation("io.whatap.android:whatap-android-agent:<最新バージョン>")
}
dependencies {
implementation 'io.whatap.android:whatap-android-agent:<最新バージョン>'
}
リポジトリの宣言がない場合は追加します。
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
}
}
バージョンを+やlatest.releaseで指定しないでください。ビルドのたびにエージェントのバージョンが変わり、問題が発生したときに原因を特定しにくくなります。Maven Centralで最新バージョンを確認し、明示的に指定してください。
AARファイルの直接追加
閉域網や社内網でMaven Centralにアクセスできない場合に使用します。受け取ったAARファイルをapp/libs/にコピーします。以下の例のファイル名は例示であり、実際に受け取るファイル名は状況によって異なる場合があります。コピーしたファイルの実際の名前に置き換えて指定してください。
dependencies {
implementation(files("libs/whatap-agent-bom-complete.aar"))
}
dependencies {
implementation files('libs/whatap-agent-bom-complete.aar')
}
2. Manifestの設定
AndroidManifest.xmlに権限とApplicationクラスを登録します。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:name=".MyApplication"
...>
</application>
</manifest>
android:nameを登録しないとApplicationクラスが実行されず、SDKが初期化されません。WebViewを連携したアプリでは、ブリ ッジが「エージェントなし」を返します。するとWebのデータは標準HTTP送信にフォールバックし、ダッシュボードでは通常のブラウザ(BROWSER)として分類されます。デバッグログを有効にすると、アプリのログにAgentが初期化されていませんが残ります。
3. SDKの初期化
Application.onCreate()で一度だけ呼び出します。アプリにすでにApplicationのサブクラスがある場合は、そのクラスのonCreate()にコードを追加してください。
import android.app.Application
import io.whatap.android.agent.WhatapAgent
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
WhatapAgent.Builder.newBuilder()
.setProjectKey("<PROJECT_ACCESS_KEY>")
.setPCode(12345) // Int です。L サフィックスを付 けるとコンパイルエラー
.setServerUrl("https://<収集サーバードメイン>/m") // 末尾の /m は必須
.setSampling(1.0)
.build(this)
}
}
import android.app.Application;
import io.whatap.android.agent.WhatapAgent;
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
WhatapAgent.Builder.newBuilder()
.setProjectKey("<PROJECT_ACCESS_KEY>")
.setPCode(12345)
.setServerUrl("https://<収集サーバードメイン>/m")
.setSampling(1.0)
.build(this);
}
}
必須の値は3つです。
| Method | Description |
|---|---|
setProjectKey(String) | 発行されたproject access key |
setPCode(int) | プロジェクトコード。int型 |
setServerUrl(String) | 収集サーバーのbase URL。抜けるとデータが送信されない |
その他のオプションはBuilderオプションで確認してください。
初期化の順序を守ってください。
ネットワークライブラリの計測以降に登場するすべてのAPIは、build(this)が完了した後に呼び出す必要があります。その前に呼び出すと、ネットワーク計測は無視され、カスタムログではIllegalStateExceptionが発生します。
4. ProGuardの設定
minifyEnabled falseのアプリは、この節を飛ばしても構いません。R8が実行されないため、クラス名やメソッド名は変更されません。
minifyEnabled trueの場合は、AARの中にconsumer ProGuardルールが含まれており、自動的に適用されます。画面、ネットワーク、クラッシュ、ANR、リソースなどのネイティブ計測のみを使用する場合は、別途のkeepルールは必要ありません。
WebViewを使用するアプリ
AARに同梱されたconsumerルールには、WebViewブリッジのメソッドを保存するルールがありません。ブラウザエージェントはブリッジのメソッドを名前で呼び出すため、R8が@JavascriptInterfaceのメソッド名を変更するとブリッジ呼び出しがすべて失敗します。このときwindow.whatapBridgeオブジェクトはそのまま残り、送信経路もブリッジのまま維持されます。個々の呼び出しのみが失敗するため、HTTPフォールバックも動作せず、WebViewのデータが全量失われます。
症状は「releaseビルドでのみWebViewデータが0件、デバッグビルドは正常」という形で現れます。次のルールを追加してください。
# WhaTap WebView ブリッジ。JS がメソッド名で直接呼び出すため名前の保存が必須
-keep class io.whatap.android.agent.webview.** { *; }
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}
-keepattributes *Annotation*
-dontwarn io.whatap.android.**
build.gradleのproguardFilesにgetDefaultProguardFile("proguard-android-optimize.txt")またはgetDefaultProguardFile("proguard-android.txt")が含まれている場合、AGPの既定ファイルが@JavascriptInterfaceのルールをすでに含んでいます。上記のルールが必須となるのは、既定ファイルを含めずカスタムルールのみを使用するプロジェクトです。既定ファイルを使用するプロジェクトでも、proguardFilesの構成が変わる場合に備えて明示的に追加することを推奨します。
画面名の可読性
ダッシュボードの画面名とScreenGroup名は、Activityクラスの単純名から作られます。R8がActivityやFragmentのクラス名を変更する構成の場合、画面名が難読化された値で蓄積されます。データが失われるわけではありませんが、どの画面なのかを判別しにくくなります。必要に応じて次のルールを追加してください。ブリッジの動作には必要ありません。
-keep class * extends android.app.Activity
-keep class * extends androidx.fragment.app.Fragment
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
5. インストールの確認
アプリを実行した後、logcatで確認します。エージェントのlogcatタグはすべてwhatapで始まります。
adb logcat | grep -i whatap
Android StudioのLogcatウィンドウを使用する場合は、フィルターにtag:whatapを入力してください。
初期化の成功
✅ WhatapAgentが正常に初期化されました。
サーバー送信の成功
✅ [SpanExporter] HTTP 200 Success (123ms)
データはデフォルトで10 秒ごとに送信されるため、アプリを実行した直後にはこのログは出ません。画面を何回か移動した後に再度確認してください。このログが出れば、HTTPリクエストが成功しています。収集サーバーがデータを正常に処理したかどうかは、ダッシュボードにデータが表示されるかで確認してください。
ネットワークリクエストの収集
🌐 [SpanExporter] Starting export for Span: GET (TraceId: ...)
- network_library: OkHttp / Volley / HttpUrlConnection
- http_request_method: GET
- status_code: 200
収集項目
build(this)が正常に完了すると、次の項目を自動的に収集します。
- ActivityとFragmentの画面ロード、ScreenGroup
- クラッシュとANR
- ユーザーログ
- CPU、メモリ、温度などのリソース使用量
- heartbeat
setCollectScreenLoadingまたはsetCollectHeartbeatを無効にすると、その項目のみ収集しません。クラッシュとANRの収集は、build(this)が成功すれば常に有効になります。クラッシュとANRの収集を無効にしたり、レポーターの種類を選択したりするBuilderオプションはありません。iOSのuseNativeCrashReporter()、usePLCrashReporter()はiOS専用であり、Androidのコードに移して使うことはできません。
次の3つの項目は自動的に有効にならず、追加の作業が必要です。
| Item | 必要な作業 |
|---|---|
| ネットワークライブラリのリクエスト・レスポンス情報 | ネットワークライブラリの計測のwrap()、onRequest()の呼び出し、または自動計測の適用 |
| メソッドの実行時間 | メソッド実行時間の追跡のCallStackTracerの呼び出し |
| WebViewページのロードと性能情報 | WebViewページ収集の設定のブリッジ登録 |
Builderオプション
すべてのBuilderオプションは任意であり、指定しない場合は初期値が適用されます。
基本設定
| Method | Default | Description |
|---|---|---|
setProjectKey(String) | (必須) | 発行されたproject access key |
setPCode(int) | (必須) | プロジェクトコード |
setServerUrl(String) | (必須) | base URL。/trace、/logが自動的に付く |
setTraceServerUrl(String) | (自動) | traceエンドポイントを直接指定する場合にのみ使用 |
setLogServerUrl(String) | (自動) | logエンドポイントを直接指定する場合にのみ使用 |
setSampling(double) | 1.0 | 収集比率。0.0 ~ 1.0のスケールであり、50%は0.5。範囲外の値は無視して初期値を維持 |
setSampling(double)は0.0 ~ 1.0のスケールです。ブラウザエージェントのsampleRateは0 ~ 100のスケールであるため、値をそのまま書き写してはいけません。モバイルの1.0をWebにそのまま入れると、収集比率が1%になります。