Loading...
Loading...
Instruments an existing Android project (Kotlin or Java) with the Dynatrace Mobile Agent for basic monitoring. Covers zero-to-first-event setup only: Gradle plugin, agent config, and user privacy opt-in. Do not use for advanced Dynatrace configuration beyond initial instrumentation.
npx skill4agent add dynatrace/dynatrace-for-ai dt-obs-androidScope: Basic setup only — from zero to first event. For anything beyond initial instrumentation (custom actions, crash grouping, data privacy policies, etc.) refer to the Dynatrace documentation directly.
settings.gradle.ktssettings.gradle| Requirement | Minimum |
|---|---|
| Gradle | 7.0.2 |
| Android Gradle Plugin (AGP) | 7.0 |
| JVM | Java 11 |
./gradlew --versiongradlew.bat --versionDaemon JVMjava -versiondynatrace { }configure<com.dynatrace.tools.android.dsl.DynatraceExtension> { }configure<DynatraceExtension> { }applicationIdapplicationId(...)applicationId '...'beaconUrlbeaconUrl(...)beaconUrl '...'YOUR_APPLICATION_IDapplicationIdbeaconUrlappsettings.gradle.ktssettings.gradlecom.android.applicationAPP_MODULEgrep -r -l --include="*.gradle" --include="*.gradle.kts" --exclude-dir=buildSrc "com.android.application" .findstr /s /m "com.android.application" *.gradle *.gradle.ktsGet-ChildItem -Recurse -Include "*.gradle","*.gradle.kts" | Select-String "com.android.application" | Select-Object -ExpandProperty Pathapply falsebuildSrc/com.android.applicationbuild.gradle.ktsbuild.gradleAPP_MODULE/build.gradle.ktsAPP_MODULE/build.gradleApplicationgrep -r -l --include="*.java" "extends Application" APP_MODULE/src
grep -r -l --include="*.kt" ": Application()" APP_MODULE/srcfindstr /s /m "extends Application" APP_MODULE\src\*.java
findstr /s /m ": Application()" APP_MODULE\src\*.ktGet-ChildItem -Recurse -Path APP_MODULE/src -Include "*.java" | Select-String "extends Application" | Select-Object -ExpandProperty Path
Get-ChildItem -Recurse -Path APP_MODULE/src -Include "*.kt" | Select-String ": Application()" | Select-Object -ExpandProperty PathonCreate()super.onCreate()AndroidManifest.xml<activity><action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />android:nameonCreate()setContentView(...).kt.javaDo not assume the file is named.MainActivity
build.gradle.ktsbuild.gradlemust be applied in the root build file, not the app module.com.dynatrace.instrumentation
build.gradle.ktscom.dynatrace.tools.android:gradle-pluginbuildscript { dependencies { } }8.+8.+buildscript { dependencies { } }buildscriptplugins {}buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath("com.dynatrace.tools.android:gradle-plugin:8.+")
}
}apply(plugin = "com.dynatrace.instrumentation")plugins {}configure<com.dynatrace.tools.android.dsl.DynatraceExtension>applicationIdbeaconUrluserOptIn(true)agentBehavior.startupLoadBalancing(true)agentBehavior.startupWithGrailEnabled(true)sessionReplay.enabled(true)applicationIdbeaconUrlconfigure<com.dynatrace.tools.android.dsl.DynatraceExtension> {
configurations {
create("sampleConfig") {
autoStart {
applicationId("YOUR_APPLICATION_ID")
beaconUrl("https://your-tenant.live.dynatrace.com/mbeacon")
}
userOptIn(true)
agentBehavior.startupLoadBalancing(true)
agentBehavior.startupWithGrailEnabled(true)
// only if session replay was requested:
sessionReplay.enabled(true)
}
}
}build.gradlecom.dynatrace.tools.android:gradle-pluginbuildscript { dependencies { } }8.+8.+buildscript { dependencies { } }buildscriptapplybuildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.dynatrace.tools.android:gradle-plugin:8.+'
}
}apply plugin: 'com.dynatrace.instrumentation'applydynatrace { }applicationIdbeaconUrluserOptIn trueagentBehavior.startupLoadBalancing trueagentBehavior.startupWithGrailEnabled truesessionReplay.enabled trueapplicationIdbeaconUrldynatrace {
configurations {
sampleConfig {
autoStart {
applicationId 'YOUR_APPLICATION_ID'
beaconUrl 'https://your-tenant.live.dynatrace.com/mbeacon'
}
userOptIn true
agentBehavior.startupLoadBalancing true
agentBehavior.startupWithGrailEnabled true
// only if session replay was requested:
sessionReplay.enabled true
}
}
}Dynatrace.applyUserPrivacyOptions(...)onCreateDataCollectionLevel.USER_BEHAVIORwithCrashReportingOptedIn(true)withScreenRecordOptedIn(true)super.onCreate()setContentView(...)import com.dynatrace.android.agent.Dynatrace
import com.dynatrace.android.agent.conf.DataCollectionLevel
import com.dynatrace.android.agent.conf.UserPrivacyOptionssuper.onCreate()setContentView(...).withScreenRecordOptedIn(true)Dynatrace.applyUserPrivacyOptions(
UserPrivacyOptions.builder()
.withDataCollectionLevel(DataCollectionLevel.USER_BEHAVIOR)
.withCrashReportingOptedIn(true)
// .withScreenRecordOptedIn(true) — add only if session replay is enabled
.build()
)import com.dynatrace.android.agent.Dynatrace;
import com.dynatrace.android.agent.conf.DataCollectionLevel;
import com.dynatrace.android.agent.conf.UserPrivacyOptions;super.onCreate()setContentView(...).withScreenRecordOptedIn(true)Dynatrace.applyUserPrivacyOptions(UserPrivacyOptions.builder()
.withDataCollectionLevel(DataCollectionLevel.USER_BEHAVIOR)
.withCrashReportingOptedIn(true)
// .withScreenRecordOptedIn(true) — add only if session replay is enabled
.build()
);./gradlew tasks --group=build | grep -i "^assemble"gradlew.bat tasks --group=build | findstr /i "assemble".\gradlew.bat tasks --group=build | Select-String -Pattern "^assemble" -CaseSensitive:$false./gradlew CHOSEN_TASKgradlew.bat CHOSEN_TASK.\gradlew.bat CHOSEN_TASK