Skip to content

atman-project/beam-android

Repository files navigation

Beam for Android

Native Android client for Beam, the peer-to-peer file sharing app built on atman.

Counterpart to beam-ios. The desktop versions (macOS / Windows / Linux) live in the beam repo and are built with Tauri.

Develop

You'll need Android Studio (which bundles JDK 17) with the NDK installed side-by-side through its SDK Manager, plus a Rust toolchain to cross-compile atman.

Set ANDROID_NDK_HOME so cargo-ndk can find it, add the three Android Rust targets, and install cargo-ndk:

export ANDROID_NDK_HOME="$HOME/Library/Android/sdk/ndk/<version>"
rustup target add aarch64-linux-android armv7-linux-androideabi x86_64-linux-android
cargo install cargo-ndk

build_atman.sh cross-compiles atman per ABI, dropping libatman.so into app/src/main/jniLibs/<abi>/ and the UniFFI-generated Kotlin into app/src/main/java/uniffi/atman/atman.kt:

git submodule update --init --recursive
./build_atman.sh             # debug, all three ABIs
./build_atman.sh --release   # release, all three ABIs

AtmanClientFactory.kt, hand-written next to the generated atman.kt, works around UniFFI 0.28's Kotlin codegen skipping async constructors. Delete it once atman moves to UniFFI ≥ 0.29.

Open the project in Android Studio and run on a connected device, or install from the CLI:

./gradlew installDebug

Release build

NOTE: All of the following steps are automated in .github/workflows/release.yml.

Create ~/.gradle/gradle.properties with your keystore credentials:

BEAM_KEYSTORE_PATH=<base_dir>/beam-release.jks
BEAM_KEYSTORE_PASSWORD=<the keystore password you set>
BEAM_KEY_ALIAS=beam
BEAM_KEY_PASSWORD=<same as keystore password (you said "same" earlier)>

Build atman in release mode:

./build_atman.sh --release   # release, all three ABIs

Then, build the AAB:

./gradlew bundleRelease      # → app/build/outputs/bundle/release/app-release.aab

You'll see the signed bundle at app/build/outputs/bundle/release/app-release.aab. That's what you upload to Play Console.

Verify it's signed:

jarsigner -verify -verbose -certs app/build/outputs/bundle/release/app-release.aab

Should say jar verified and show your CN cert.

Releases

Packages

Contributors

Languages