An Android project exploring deep links, Android App Links, navigation behavior, Firebase Hosting, and release signing.
This project demonstrates how URLs and Android notifications can navigate users to specific destinations in an Android application.
- Custom scheme deep links (
myapp://). - HTTPS Android App Links with domain verification.
- Navigation arguments and default values.
- Input validation for deep-link parameters.
- Navigation back-stack management.
- Notification navigation with
NavDeepLinkBuilder. - Firebase Hosting with product-page fallback routing.
- Release-signed APK and Android App Bundle (AAB).
- Java
- Android SDK
- XML layouts
- AndroidX Navigation Component
- AndroidX NotificationCompat
- Firebase Hosting
- Gradle Kotlin DSL
- Android Studio
- Android SDK 37
- Compatible JDK
- Firebase CLI for hosting deployment
Minimum Android SDK: 24.
myapp://product/123?source=custom-scheme
https://deeplinknavigationlab.web.app/product/123?source=browser
The notification opens ProductFragment with a product ID and source argument.
Website: https://deeplinknavigationlab.web.app
The hosting directory is public/. The Android App Links association file is:
public/.well-known/assetlinks.json
Deploy the website with:
firebase deploy --only hostingThe SHA-256 fingerprints in assetlinks.json must match the signing certificates used by the relevant builds.
Build the debug APK:
./gradlew assembleDebugBuild the release APK:
./gradlew assembleReleaseBuild the Android App Bundle:
./gradlew bundleReleaseRelease builds require a locally configured keystore and keystore.properties. Never commit signing credentials or private keys.
Test a custom scheme:
adb shell am start -W \
-a android.intent.action.VIEW \
-c android.intent.category.BROWSABLE \
-d "myapp://product/777?source=custom-scheme"Test an HTTPS App Link:
adb shell am start -W \
-a android.intent.action.VIEW \
-c android.intent.category.BROWSABLE \
-d "https://deeplinknavigationlab.web.app/product/321?source=promo"Check Android App Links verification:
adb shell pm get-app-links com.sayuti.deeplinknavigationlab- Validate incoming deep-link parameters before using them.
- Treat
sourceas metadata, not as authorization. - Keep signing credentials and keystore files out of version control.
- Keep the App Links association file synchronized with the relevant certificate fingerprints.
Developed as a hands-on Android learning project covering deep links, navigation, Firebase Hosting, and release signing.
The release APK was manually tested on an Android emulator.
| Scenario | Input | Expected result | Status |
|---|---|---|---|
| HTTPS Android App Link | /product/123?source=browser |
Product ID 123, source browser |
Passed |
| Custom URI scheme | myapp://product/456?source=custom-scheme |
Product ID 456, source custom-scheme |
Passed |
| Notification navigation | Product ID 888 |
Product ID 888, source notification |
Passed |
Automated validation: Android debug build, unit tests, and Android Lint via GitHub Actions.


