An Android wallet for interacting with the Radix DLT ledger.
- Android 8.1 (API 27) minimum
- Handsets only (tablets are not supported)
- Android Studio Hedgehog or later
- JDK 17
- Environment variables
GPR_USERandGPR_TOKENfor GitHub Packages access (required for the Sargon dependency)
git clone https://github.com/radixdlt/babylon-wallet-android.git
cd babylon-wallet-android
# Light flavor (no private submodule access required)
./gradlew assembleLightDebug
# Full flavor (requires the Arculus CSDK submodule)
git submodule update --init --recursive
./gradlew assembleFullDebugThe project uses a version flavor dimension with two product flavors:
| Flavor | Description |
|---|---|
full |
Complete app with all features and 3rd-party integrations: Firebase Crashlytics and Arculus NFC card support. Requires access to the private arculus-android-csdk submodule. |
light |
Stripped-down app without Firebase Crashlytics or Arculus. Can be built without access to any private dependencies or submodules. |
Combined with the existing build types, the available variants are:
debug |
debugAlpha |
release |
releasePreview |
|
|---|---|---|---|---|
| full | fullDebug |
fullDebugAlpha |
fullRelease |
fullReleasePreview |
| light | lightDebug |
lightDebugAlpha |
lightRelease |
lightReleasePreview |
| Build type | Minified | Debuggable | Crash reporting | App name suffix |
|---|---|---|---|---|
debug |
No | Yes | No | Dev |
debugAlpha |
Yes | No | Yes (full only) | Alpha |
release |
Yes | No | Yes (full only) | — |
releasePreview |
Yes | No | Yes (full only) | Preview |
Note:
CRASH_REPORTING_AVAILABLEis alwaysfalsefor alllightvariants, regardless of the build type.
| Module | Description |
|---|---|
app |
Main application module containing UI, navigation, ViewModels, and use cases. |
core |
Shared library module with Sargon drivers, extensions, DI providers, and data stores. |
profile |
Profile management, Google Drive backup, and cloud sync via WorkManager. |
designsystem |
Reusable Compose UI components and theming. |
peerdroid |
WebRTC peer-to-peer communication for dApp connector links. |
webrtc-library |
Bundled WebRTC AAR. |
arculus-android-csdk:csdknative |
Arculus NFC card native JNA bindings (private submodule, optional for light builds). |
The architecture is based on the Android app architecture guide, incorporating principles from Clean Architecture.
Key principles:
- Data and presentation are the primary layers.
- Each layer owns its data models; mapping occurs at layer boundaries.
- Business logic lives in the model (e.g.
FungibleResource) only when directly relevant to that model. - The data layer follows the repository pattern.
- The domain layer is optional and used when it provides clear value — such as combining data from multiple repositories or encapsulating reusable business logic. See the Android docs on the domain layer for guidance.
- MVVM pattern for the presentation layer using Jetpack Compose.
- Jetpack Compose — declarative UI
- Material 3 — design system
- Retrofit + OkHttp — REST networking
- Ktor — WebSocket connections
- Hilt — dependency injection
- Coil — image loading
- Room — local database
- DataStore — preferences and encrypted storage
- Detekt + plugins (formatting, compose rules) — static code analysis
- JaCoCo — code coverage
- Sargon — Radix core logic and cryptography
We favour native/first-party libraries and keep third-party dependencies to a minimum.
- Version catalog:
gradle/libs.versions.toml - Update all dependencies:
./gradlew versionCatalogUpdateLibraries - Interactive update:
./gradlew versionCatalogUpdateLibraries --interactive— generates a diff file. Review and remove any exclusions, then apply with./gradlew versionCatalogApplyUpdatesLibraries. - Dependency lock file:
dependencies.lock— run./gradlew compareDependenciesto verify, or./gradlew generateDependenciesLockFileto regenerate.
Releases are published to Google Play via CI when a GitHub Release is created.
- Go to Releases → Create a new release on GitHub.
- Create a new tag (e.g.
v1.20.0), target the release branch, and check Set as a pre-release. - Publish the release.
This triggers the Publish Google Play Alpha job, which:
- Bumps the version code/name via Fastlane
- Builds and uploads the AAB to the Google Play alpha track
- Builds the APK and attaches it to the GitHub Release as a downloadable asset
- Go to Releases → Create a new release on GitHub.
- Create a new tag, target the release branch, and leave Set as a pre-release unchecked.
- Publish the release.
This triggers the Publish Google Play Production job, which follows the same steps but uploads to the production track.
- Keep It Simple — favour clarity over cleverness.
- Write your code, leave it for a week, come back and read it. If you can't understand it in under a minute, you're probably overengineering.
- Comments are helpful.
- Watch this talk on composition vs. inheritance — it helps you decide when to (not) use abstraction.
- Read the conventions doc.
The Android Radix Wallet binaries are licensed under the Radix Wallet Software EULA.
The Android Radix Wallet code is released under the Apache 2.0 license.
Copyright 2023 Radix Publishing Ltd
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at:
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.