Android 에이전트 적용
WhaTap 모바일 에이전트를 Android 앱에 적용하면 화면 로딩, 네트워크 호출, 크래시, ANR, 리소스 사용량, WebView 페이지 성능을 수집할 수 있습니다. 이 문서는 앱 개발자를 대상으로 라이브러리 추가부터 데이터 수집 확인까지 전체 절차를 안내합니다. WebView 안의 웹 페이지까지 수집하려면 웹 담당자의 작업도 필요합니다. 자세한 내용은 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 에이 전트와 브라우저 에이전트가 모두 요구 버전을 충족해야 합니다. 한쪽이라도 버전이 낮으면 일부 항목이 수집되지 않으며, 앱과 웹 어느 로그에도 오류가 남지 않습니다.
| Component | Minimum version | Owner |
|---|---|---|
| Android 에이전트 | 2.3.5 | 앱 개발자 |
| 브라우저 에이전트 | 3.2.0 | 웹 개발자 |
적용을 마친 뒤에는 대시보드의 agent_version 값으로 실제 동작 중인 버전을 확인하세요. 파일을 교체하는 것만으로는 반영 여부를 알 수 없습니다. 브라우저 에이전트 파일의 버전은 첫 4줄의 배너로 확인합니다.
head -4 whatap-browser-agent.js
에이전트 설치
다음 순서로 진행합니다.
여기까지 마 치면 화면 전환, 리소스, 크래시, ANR 수집이 시작됩니다. 네트워크, WebView, 메서드 추적에는 추가 작업이 필요합니다. 자세한 내용은 수집 항목에서 확인하세요.
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를 연동한 앱에서는 브릿지가 "에이전트 없음"을 반환합니다. 그러면 웹 데이터가 표준 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);
}
}
필수 값은 세 가지입니다.
| 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 규칙이 필요 없습니다.