Repository navigation
Troubleshooting
Start with the failing stage and preserve the original APK, command, and runtime log. For capture, the session directory also contains full instrumentation and report-generation diagnostics.
| Symptom | Action |
|---|---|
| Maven or Java is not found | Check java -version and mvn -version; install/configure the required build tools |
Signing tool not configured |
Fill both executable paths in the external config.properties and use the classpath helper from Installation
|
| Tool is not executable | Verify the chosen Build Tools version, file path, and executable permissions |
Configuration works with the helper but not java -jar
|
java -jar does not use the helper's external configuration directory; use the documented java -cp invocation |
| Platform resolution fails | Check that -p points to the SDK platforms directory or a valid platform android.jar
|
| Instrumentation fails | Add -v, retain the diagnostics, and check the JDK, APK, SDK, and scope used |
The tracked signing configuration has empty paths by design. Each installation supplies its own SDK executables.
| Symptom | Action |
|---|---|
| No ready device | Run adb devices; connect/authorize a device or start an emulator |
| Several devices are ready | Add --device <serial> in capture, or -s <serial> to manual ADB commands |
| Cannot find ADB | Add --adb /absolute/path/to/adb, or use an SDK with Platform Tools installed |
INSTALL_FAILED_UPDATE_INCOMPATIBLE |
The installed app has a different signing certificate; use a clean test device or an installation compatible with the test key |
| No launcher found | Use the manual workflow and trigger the appropriate component yourself |
| The instrumented app behaves differently | Check device logs and signing-sensitive behavior; instrumentation and re-signing can affect the application |
Capture uses adb install -r. It does not automatically uninstall an incompatible installation.
Enter finishes capture and generates reports. Ctrl+C aborts. With closed standard input, specify --duration <positive seconds>. A disconnection or logcat failure also stops the workflow.
If runtime.log exists, it is retained. Recover a report using the original APK, tag, and matching options as described in Capture. The partial run may contain fewer observations than intended.
Check these in order:
- APK: reporting uses the exact original APK corresponding to the installed instrumented build.
-
Probes: the same
-c,-m,-s,-cp, and-mcselections were used at both stages. -
Scope:
-pkgand-nmatch; an obfuscated package may be outside an assumed prefix. -
Tag:
-lagrees with the logcat filter and the recorded messages. - Timing: recording started before a fresh application process; once-per-process observations may otherwise be absent.
- Execution: the test actually exercised the relevant code, and the log retained its records.
Selecting more probes only during reporting does not recover missing instrumentation. Regenerating a report from old logs also does not apply improvements to how those logs were recorded.
Instrument with -mc, install that APK, and collect fresh logs. Keep -mc enabled when parsing. Method coverage records alone do not provide the callsite-to-target correlation required by the graph.
If graph data exists but the view asks you to choose a class, the launcher metadata or matching launcher relationships are unavailable. Select a class with recorded calls. The default graph deliberately does not expand to the whole application.
Select an edge and inspect its invocation kind and declared signature. The current dashed style includes constructors, uninstrumented framework/native code, excluded APK methods, legacy events, calls that fail before entry, and missing confirmations.
For constructors and directly resolved framework methods, the target can be known despite the missing entry record. Dashed does not mean polymorphism failed. See Dynamic Call Graph.
An ordinary app-to-app virtual call that remains unconfirmed deserves closer inspection. Check that the actual implementation was instrumented, that its signature matches the call, and that the raw log retains its observations. Gaps in MC2 sequence numbers indicate missing records or emission gaps; they do not identify the missing target by themselves. The current tracer does not explain each failed match in the report.
Use -pam and standard adb logcat -v threadtime output. The current minute extractor expects a leading MM-DD HH:mm timestamp. Other accepted log formats can contribute to aggregate totals without timeline buckets. A probe is counted at its first matching occurrence in file order, so preserve chronological ordering.
The timeline accumulates distinct coverage observations; it does not measure repeated executions. See JSON and Logs.
Open an issue with the AndroLog commit, command, Java/Maven versions, Android SDK/device details, and relevant error or call-record excerpt. Include the instrumentation flags as well as the reporting flags. A small reproducer is preferable to an entire application when it demonstrates the same behavior.
For capture failures, identify which stage failed and include the relevant part of instrumentation.log or report-generation.log.
Home · Quick Start · CLI Reference · Report an issue
AndroLog by Jordan Samhi · LGPL v2.1 · Documentation checked against 68b3312, 23 October 2026.
Start here
Understand your results
Reference