← Back to Tools

Android Assets Validator

Check your assetlinks.json file for Android App Links

Paste your domain and this tool fetches your Digital Asset Links file the same way Android does: it checks that the file is reachable over HTTPS, served as valid JSON, structured as an array, and that every entry has a valid relation, package_name, and sha256_cert_fingerprints. Free, instant, no signup.

Validate Android Assetlinks

Check your Android Asset Links configuration

Note: You must keep you file in /.well-known/assetlinks.json path

Validation Results

Results will appear here after validation

Enter a domain above to validate your assetlinks file

Skip Hand-Rolling AASA and Assetlinks Files

Smler hosts and serves your assetlinks.json and apple-app-site-association files for you, kept in sync with your package name and certificate fingerprints. One dashboard for App Links and Universal Links across Android and iOS — no manual JSON, no re-signing surprises.

Ship Deep Links Without the Config Drift

Deferred deep linking, short links, and analytics come with the same setup — free up to 25,000 attributed installs a month.

Get Started Free
Set up App Links in minutes
No credit card required

What This Validator Checks

1. File Availability

Fetches https://yourdomain.com/.well-known/assetlinks.json directly and confirms it responds with HTTP 200, the way Android's Digital Asset Links API does.

2. Content-Type Header

Confirms the response is served as application/json. A wrong content type is a common failure on static hosts that guess MIME types from file extensions.

3. Valid JSON Syntax

Parses the response body and flags syntax errors — trailing commas and mismatched brackets are the most common cause of a silently ignored assetlinks file.

4. Top-Level Array

Confirms the parsed JSON is an array of statements, not a single object — a very common mistake when hand-writing the file.

5. Required Fields Per Entry

For every entry, checks a non-empty relation array, target.namespace equal to android_app, a target.package_name, and a non-empty target.sha256_cert_fingerprints array.

Pass / Fail Result

You get a plain-language message for the first failing check, so you know exactly what to fix instead of parsing a raw HTTP response yourself.

What Is an assetlinks.json File?

assetlinks.json implements Google's Digital Asset Links protocol, a JSON array hosted at your domain's well-known path that declares which Android apps are authorized to act on behalf of that domain. Android checks it to power:

  • App Links: tapping a link to your domain opens your app directly, with no chooser dialog, if verification succeeds.
  • Shared credentials / Smart Lock: a separate relation type lets your app and site share saved passwords.

Without a correctly hosted and verified assetlinks.json, Android falls back to showing users a disambiguation dialog (or opening the browser), which quietly kills conversion on referral, install, and re-engagement links.

Where the Assetlinks File Must Live

  1. 1
    Exact path: /.well-known/assetlinks.json.
  2. 2
    HTTPS only: Android's verifier will not fetch it over plain HTTP.
  3. 3
    Top-level array: even a single app must be wrapped in [ ].
  4. 4
    Correct content type: served as application/json.
  5. 5
    Matching manifest: the package_name must equal your app's applicationId, and your intent filter needs android:autoVerify="true".

Common Assetlinks Errors and How to Fix Them

“Assetlinks file not found or not accessible”

The file isn't deployed at the exact well-known path, or something (auth middleware, a WAF rule, a catch-all redirect) is blocking the unauthenticated request. Confirm it's served straight from the web root with no login required.

“File should be a JSON array”

Wrap your statement(s) in square brackets. {"relation": [...], "target": {...}} is invalid; it must be [{"relation": [...], "target": {...}}].

“Invalid or missing required fields in asset links entries”

Each entry needs all of: a non-empty relation array containing delegate_permission/common.handle_all_urls, target.namespace set to exactly android_app, a target.package_name string, and a non-empty target.sha256_cert_fingerprints array. A missing field or a typo in android_app (case-sensitive) will fail this check.

Fingerprint format looks right but verification still fails on real devices

This tool validates the file's shape, not whether the fingerprint matches your actual signing key. Double check you copied the fingerprint for the certificate your published APK/AAB is actually signed with — if you use Play App Signing, that's the app signing certificate in Play Console, not your local upload key.

Frequently Asked Questions

What is an assetlinks.json file?

It is a Digital Asset Links file hosted on your domain that proves you own both the website and the Android app, so Android will open your app directly for links to your domain (App Links) instead of a browser or a disambiguation dialog.

Where exactly does assetlinks.json need to live?

At https://yourdomain.com/.well-known/assetlinks.json, served over HTTPS with no redirect, as a JSON array (not an object) at the root of that path.

Why is my file a JSON object failing validation when the JSON is valid?

assetlinks.json must be a top-level array of statements, even if you only have one app. A single object ({...}) instead of an array ([{...}]) is valid JSON but not a valid Digital Asset Links file, and Android will ignore it.

Where do I get the SHA256 certificate fingerprint?

For a release build, get it from Play Console under App integrity → App signing key certificate. For a local debug build, run keytool -list -v -keystore ~/.android/debug.keystore and copy the SHA256 value, formatted with colons between each byte pair.

Do I need one entry per signing key?

Yes. If you distribute through Play App Signing, include both the upload certificate and the app signing certificate fingerprints as separate entries in sha256_cert_fingerprints, or verification will fail for builds signed with the key you omitted.

What does the "relation" field need to say?

For App Links it must include "delegate_permission/common.handle_all_urls". Without this exact string in the relation array, Android will not treat the app as authorized to auto-verify links for the domain.

I fixed assetlinks.json but App Links still show the chooser dialog. Why?

This validator confirms the file is reachable and structurally correct, which Android needs but does not guarantee immediate verification. Also check: your AndroidManifest intent filter has android:autoVerify="true", the package_name matches your applicationId exactly, and you have re-installed the app or run adb shell pm verify-app-links --re-verify after changing the file, since verification typically happens at install time.

Does this tool store the URLs I check?

No. Validation runs directly from your browser to your domain, requests are not logged or stored, and you do not need an account to use it.

How is this different from validating an AASA file?

assetlinks.json is Google's format for Android App Links; the apple-app-site-association (AASA) file is Apple's equivalent for iOS Universal Links. They live at different well-known paths with different schemas — you need both if you support iOS and Android.

Related Tools

Setting up deep linking for both platforms? Check these too: