Add the dependency
One line from Maven Central, then a Gradle sync. The version below is the one published right now.
dependencies { implementation("com.appambit:appambit:1.2.1") }
dependencies { implementation 'com.appambit:appambit:1.2.1' }
On mobile?
Email yourself the setup link so you can finish when you're at your computer.
✓ Email sent! Check your inbox.
× Failed to send. Please try again.
⏱ Too many attempts. Please wait a few minutes and try again.
Add one dependency from Maven Central and one AppAmbit.start() call, and your Android app begins tracking sessions, device details and crashes on its own. When the phone loses signal it keeps everything on disk and sends it in batches later.
No credit card required. Free tier available. The same SDK also gives you a database, cloud functions and remote config.
import com.appambit.sdk.AppAmbit class MainActivity : AppCompatActivity() { override fun onCreate(state: Bundle?) { super.onCreate(state) // the whole integration AppAmbit.start(applicationContext, "<YOUR-APPKEY>") } }
Line in onCreate. That is the whole integration.
Minimum API level. Android 5.0 and up.
Languages, one artifact. Kotlin and Java.
No data lost. It queues and sends later.
Beyond the start call there is very little to remember. These are the calls you will actually use, and each one reads the same from Kotlin and from Java.
AppAmbit.start(context, key)
Called in onCreate with your App Key. Everything else on this page keys off it, in Kotlin and in Java alike.
Analytics.trackEvent(name, props)
Send a named event with a map of string properties. Everything else about the session is already attached for you.
Crashes.logError(exception)
Catch an exception, log it, and carry on. The error lands beside your crashes with the same session context.
Crash monitoringCrashes.logError(exception, props)
Pass a map of strings beside the exception and it travels with the log, so the report carries the order id or the plan the person was on.
Crashes.generateTestCrash()
Fire a deliberate crash so you can watch a real report arrive before you ship anything to users.
Analytics.enableManualSession()
Automatic sessions are the default. Turn them off and start and end them yourself when your app needs that control.
That is the whole surface. The key that makes those calls report takes a minute to create.
The dependency you already added covers more than reporting. When you need a table, an endpoint or a flag, it is the same SDK and the same App Key, with nothing new to install.
Sessions, devices and Android versions, drawn from what the SDK already sends the moment it starts.
App AnalyticsThe events you name yourself, with their properties kept on every occurrence and grouped in the dashboard.
Event TrackingEvery crash arrives inside the session it happened in, next to the events and logs that came before it.
Session TimelineThe trail of steps that led to the crash, so you are reading a path rather than guessing one.
BreadcrumbsFlip a flag or change a value and your app picks it up, with no rebuild and no trip through Play Store review.
Remote configReal SQL from your Android app through AppAmbitDb, with no server to run and no connection string in your code.
App DatabaseCall a Node.js function you deployed inside AppAmbit with CloudCode.call, straight from Kotlin or Java.
Cloud CodeRead published content types and entries from the SDK, so copy and screens can change without a release.
CMS guideAdd the push artifact, call PushNotifications.start() after AppAmbit.start(), and send from your dashboard.
Push notificationsHand an APK or an AAB to your testers over a link, and see who is running which one.
Build deliveryPoint Claude or Cursor at AppAmbit over MCP and let it read your crashes and sessions, or set the backend up for you.
AI AgentAsk Claude or Cursor for a feature and let it provision the backend that feature needs, on this same account.
AI App BuilderEverything on this row is included, on the same App Key and the same free tier.
Android devices lose signal constantly, and that is often exactly when the interesting crashes happen. The SDK writes sessions, events, logs and crashes to local storage the moment the network drops, watches for connectivity to come back, and then sends everything at once in batches. You configure nothing.
Written to local storage. Nothing is dropped while the phone is out of range.
Everything arrives together the moment the device is back, batched into few requests.
The queue empties when the network comes back, and the session reads the same either way.
Connect the repository once and every successful build lands in AppAmbit with its branch, commit, author and workflow link attached. Send it to your testers from there, and they install it from a page instead of hunting for an artifact.
Build your APK or AAB in a workflow and let the signed webhook hand it straight to AppAmbit.
Wire a pipeline step to publish each build, with the branch, commit and author carried along.
Connect an Azure pipeline and every green build shows up ready to send to your testers.
Connect the repository, and testers install from a link instead of waiting on a store.
Create your app in the dashboard to get an App Key, then touch three files in Android Studio. There is no wrapper to write and no build plugin to install.
One line from Maven Central, then a Gradle sync. The version below is the one published right now.
dependencies { implementation("com.appambit:appambit:1.2.1") }
dependencies { implementation 'com.appambit:appambit:1.2.1' }
The SDK needs to reach the network, and to notice when the connection comes back so it can send what queued up. Same in either language.
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
One call in your main Activity, with the App Key from your app's Info page. Sessions, device information and crash reporting begin from there.
override fun onCreate(state: Bundle?) { super.onCreate(state) AppAmbit.start(applicationContext, "<YOUR-APPKEY>") }
@Override protected void onCreate(Bundle state) { super.onCreate(state); AppAmbit.start(getApplicationContext(), "<YOUR-APPKEY>"); }
Run a Gradle sync after adding the dependency. The full walkthrough, including the push notification setup, is in the getting started guide.
Step one is a free account. The other two take about five minutes.
Push runs on the same App Key and the same install. You bring a Firebase project for delivery, AppAmbit keeps the device tokens, and you send from the dashboard or from a Cloud Code function.
import com.appambit.sdk.PushNotifications // in onCreate, after AppAmbit.start(...) PushNotifications.start(applicationContext) // so a tap opens the right screen, cold start included PushNotifications.handleNotificationOpened(this, intent) // Android 13 and up PushNotifications.requestNotificationPermission(this)
Your own credentials, the tokens already tied to your App Key, and no second vendor to sign with.
Building for the other platforms too? AppAmbit has an SDK for iOS, React Native, Flutter, .NET MAUI, .NET and Avalonia. Each one takes its own App Key and reports into the same dashboard, on the same team and the same bill.
The free tier is enough to point the SDK at a real build and read your own sessions.
Create a free account, paste your App Key into onCreate, and run the app. The first session shows up while your emulator is still open, and whatever the device recorded on a bad connection is waiting the moment it reconnects. Kotlin or Java, API 21 and up, no credit card.
One line, and Android reports.