The first cohort begins Saturday, November 14, 2026. The SDK is available now, so you can add it to your build ahead of time. Join the waitlist to get a spot in the first groups.
Without the SDK
- Testers send a screenshot every day
- You check that proof yourself
- No crash reports or device coverage in Fourteen
With the SDK
- Testers use your app, and the day confirms itself
- Crashes grouped by error, with build and Android version
- See the phones, Android versions, screen types, and countries you've covered
- Testers shake their phone to send you a bug report
How it works
Scroll through the five steps. The first three are all you need.
-
1
Add one line
Put the SDK in your app module's
build.gradle.kts. There's no setup code, and it starts itself. -
2
Sync and upload your build
Sync Gradle and upload the build to your closed test. Nothing else changes in your app.
-
3
Check it in one tap
Tap Check my build in Fourteen. It opens your app and tells you right away if the SDK is working.
-
✓
That's it. Testers just use your app
No daily screenshots. Each tester's day fills in after real use, and crashes and device details come with it.
-
4
Optional: confirm a task
Want proof testers finished something specific? Add one call where the action succeeds.
-
5
See who really did it
Match the name to a day's task, and Results shows exactly who finished it, for your Google application too.
Set it up
Add the dependency
Add this to your app module's build.gradle.kts, then sync Gradle. It supports Android 7.0 (API 24) and up.
dependencies {
implementation("app.getfourteen:sdk:1.0.1")
}
There's no setup code. The SDK starts itself and does nothing until a tester connects through Fourteen or an invite link, so anyone else who has your build isn't measured.
Upload the build to your closed test
Use implementation, not debugImplementation, because testers install your release build from Google Play. Upload it before day 1, and tell Fourteen you've added the SDK during app setup.
Check that it's working
Install your build on the phone with Fourteen, then tap Check my build during setup or on My test. Fourteen opens your app, and the SDK reports in once. If your build doesn't have the SDK, you'll be told right away. The check doesn't count as testing, and your phone doesn't stay connected.
Once the test starts, testers start your app from Fourteen, which connects the SDK the first time. A day counts once a tester has at least 60 seconds of active use and 5 touches. Their square then fills in on your My test tab, which can take a moment after they leave the app.
To check a device directly, show this on a debug screen:
val status = Fourteen.status() // status.paired, status.registered, status.todayActiveSeconds, // status.todayTouches, status.todayCompletedTasks
Optional: confirm a task
You don't need this for days to count. Add it if you want proof that testers finished a specific action.
Report when the action happens
Call this at the point where the action really succeeds, not when a button appears on screen:
import app.getfourteen.sdk.Fourteen
fun onRouteSaved() {
Fourteen.completeTask("saved_route")
}
Names can use letters, numbers, dots, dashes, and underscores, up to 64 characters. Calls are ignored for anyone who isn't a connected tester.
Match it to a day's task
- In Fourteen, open My test, then Tasks.
- Tap Edit on an upcoming day, since days that have started can't be changed.
- Enter the same name, such as
saved_route, under Task event.
To check them, tap Test my events on the Tasks screen. Fourteen opens your build on your phone, you do each action, and it shows which events it heard, matched to your tasks. This doesn't count as testing, and only the event names are kept.
To list every call in your code, including ones that haven't run yet:
grep -rn "Fourteen.completeTask" app/src
See who finished it
Testers see Task confirmed when the event arrives. On your Results tab, tap an area to see who finished it each day, with a check on anyone your app confirmed.
A tester still gets credit for active use if the event never fires, so a bug in your app can't count against them.
What you get automatically
Crash reports
Crashes are grouped by error on your Results tab, with build, Android version, and which testers were affected. If you use another crash tool, such as Crashlytics, it keeps working.
If your release build uses R8, class and method names in these reports are shortened. Use your mapping file to read them, or keep them readable in your test build.
Verified Play installs and device coverage
Fourteen shows how many testers installed through Google Play, plus which phones, Android versions, screen types, and countries you've covered. An install check doesn't prove someone is still opted in, so Play Console remains the source of truth.
In-app bug reports
Connected testers can shake their phone to send you a note from inside your app. To add your own button too, call:
Fourteen.openBugReport()
What to declare on Google Play
Google asks for a Data safety form on closed, open, and production tracks, and you're responsible for what SDKs in your app collect. Here's how the SDK's data lines up with Google's data types. This is a guide, not legal advice, and your own app's data goes on the form too.
| Google's data type | What the SDK sends |
|---|---|
| App activity: App interactions | Active time, sessions, touch counts, and task names |
| App activity: Other user-generated content | A tester's bug report note |
| App info and performance: Crash logs | Error type, code location, and count |
| App info and performance: Diagnostics | App version, phone maker and model, Android version, phone or tablet, and whether the app came from Google Play |
| Personal info: User IDs | A tester ID with no name or email in it, which Fourteen can link to the tester's account |
| Photos and videos: Photos | A screenshot, only if a tester sees it and chooses to send it with a bug report |
Questions you'll need to decide
- Location: the SDK sends the phone's country setting, not a location reading, and doesn't use location permissions. Decide whether you treat that as location data.
- Sharing: Google says transfers to a service provider working on your behalf generally don't count as sharing. Consider how that applies to your test, since Fourteen stores this data and group members may see test status.
- Purpose: this data is used to confirm testing, show you results, and find problems in your app.
- After the test: once the SDK is out of your production build, update your form to match.
Data travels over HTTPS. Testers with a Fourteen account can delete it at getfourteen.app/delete-account.
Before you go to production
Remove the SDK from your production build
Delete the dependency and any Fourteen calls. Or, if you'd rather keep the calls in your code, swap the dependency for the stand-in, which has the same functions and does nothing:
implementation("app.getfourteen:sdk-noop:1.0.1")
What the SDK collects
Only collected from connected testers
- A tester ID that doesn't contain a name or email, your package name, and your version number
- The date, active time, number of sessions, and number of touches
- The names of any tasks you report
- Phone maker and model (such as Google Pixel 8), Android version, phone or tablet, the phone's country setting, and whether the app came from Google Play
- Crashes: the error type, code location, and count, but never the error message
- Bug reports: the tester's note, plus a screenshot only if they see it and choose to send it
Apart from a screenshot a tester chooses to send, it doesn't collect screen contents. It also doesn't collect what testers type outside the report form, where they tap, contacts, location, advertising IDs, or account details. It adds the INTERNET and ACCESS_NETWORK_STATE permissions.
You're responsible for your own app's disclosures, including Google Play's Data safety form, while the SDK is in your app. See the privacy policy for details.
Fourteen is an independent project and isn't affiliated with or endorsed by Google. Questions? Email hello@getfourteen.app.