Requirements
- Android 5.0+ (SDK 21+)
- Verified domain for App Links:
{YOUR_ID}.sddl.meor your custom domain - Internet permission in
AndroidManifest.xml
Gradle setup
Add JitPack and the SDK dependency.
Option A — settings.gradle.kts (recommended):
pluginManagement {
repositories {
gradlePluginPortal()
google()
mavenCentral()
maven("https://jitpack.io")
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven("https://jitpack.io")
}
}
Add dependency in app/build.gradle.kts:
dependencies {
implementation("com.github.nonanerz:sddl-android-sdk:2.0.9") // use latest
}
App Links (Manifest)
Declare an intent filter with android:autoVerify="true" for your deep link host.
Use either your verified custom domain or {YOUR_ID}.sddl.me.
<uses-permission android:name="android.permission.INTERNET" />
<activity
android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTop">
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="https"
android:host="{YOUR_ID}.sddl.me OR your.custom.domain"
android:pathPrefix="/" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
If you use multiple hosts, declare additional <data> entries or separate intent filters.
Digital Asset Links (assetlinks.json)
SDDL automatically publishes /.well-known/assetlinks.json for your domain based on your settings.
In the SDDL dashboard, open App Links Configuration and set:
- Package name (e.g.,
com.example.app) - SHA-256 certificate fingerprints (Debug & Release)
Save the configuration to publish/refresh assetlinks.json. No manual hosting required.
Get SHA-256 fingerprints
Debug keystore:
keytool -list -v -alias androiddebugkey \
-keystore ~/.android/debug.keystore \
-storepass android -keypass android
Release keystore:
keytool -list -v -alias YOUR_ALIAS \
-keystore /path/to/your-release-key.jks
Copy the SHA256 value(s) into SDDL → App Links Configuration. Include both Debug and Release if you test both builds.
Minimal Kotlin usage
Handle links on launch and when the activity receives a new intent:
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
SDDLHelper.resolve(this, intent, ::routeWith, ::handleDeepLinkError, readClipboard = false)
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
SDDLHelper.resolve(this, intent, ::routeWith, ::handleDeepLinkError, readClipboard = false)
}
private fun routeWith(payload: JsonObject) {
// Navigate based on payload, e.g. payload["product_id"]
}
private fun handleDeepLinkError(error: String) {
// Optional: log or report
}
}
Testing & Troubleshooting
- Verify App Links:
adb shell pm verify-app-links your.package.name - Force-open test:
adb shell am start -a android.intent.action.VIEW -d "https://your.domain/path" - Domain preferences:
adb shell dumpsys package domain-preferred-apps - Match hosts: Manifest host must match the deep link domain (custom or
{YOUR_ID}.sddl.me). - Intermediate page (optional): enables more reliable capture for certain in-app browsers/ad platforms.
FAQ
Do I need to host assetlinks.json?
No. SDDL publishes it automatically from your App Links Configuration (package + SHA-256).
Links still open in the browser. What should I check?
Confirm android:autoVerify="true", the host matches your domain, fingerprints are correct in SDDL,
and run the verification command. Reinstall the app after changing certificates or manifest entries.
Can I use multiple domains?
Yes. Add additional <data> entries or intent filters for each host, and configure each domain in SDDL.