Skip to content

radixdlt/babylon-wallet-android

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7,542 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

babylon-wallet-android

An Android wallet for interacting with the Radix DLT ledger.

App requirements

  • Android 8.1 (API 27) minimum
  • Handsets only (tablets are not supported)

Getting started

Prerequisites

  • Android Studio Hedgehog or later
  • JDK 17
  • Environment variables GPR_USER and GPR_TOKEN for GitHub Packages access (required for the Sargon dependency)

Clone and build

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 assembleFullDebug

Build variants

The 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 differences

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_AVAILABLE is always false for all light variants, regardless of the build type.

Project structure

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).

Architecture

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.

Tech stack

We favour native/first-party libraries and keep third-party dependencies to a minimum.

Dependencies

  • 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 compareDependencies to verify, or ./gradlew generateDependenciesLockFile to regenerate.

Publishing a release to Google Play

Releases are published to Google Play via CI when a GitHub Release is created.

Alpha (internal testing)

  1. Go to Releases → Create a new release on GitHub.
  2. Create a new tag (e.g. v1.20.0), target the release branch, and check Set as a pre-release.
  3. 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

Production

  1. Go to Releases → Create a new release on GitHub.
  2. Create a new tag, target the release branch, and leave Set as a pre-release unchecked.
  3. Publish the release.

This triggers the Publish Google Play Production job, which follows the same steps but uploads to the production track.

Best practices

  • 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.

Useful Kotlin resources

License

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.

About

No description or website provided.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors