bdk-ffi/bdk-android

bdk-android

This project builds an .aar package for the android platform that provide [Kotlin] language bindings for the [bdk] library. The Kotlin language bindings are created by the [bdk-ffi] project which is included in the root of this repository.

How to Use

To use the Kotlin language bindings for [bdk] in your android project add the following to your gradle dependencies:

repositories {
    mavenCentral()
}

dependencies {
  implementation("org.bitcoindevkit:bdk-android:<version>")
}

You may then import and use the org.bitcoindevkit library in your Kotlin code. For example:

import org.bitcoindevkit.*

// ...

val externalDescriptor = "wpkh([c258d2e4/84h/1h/0h]tpubDDYkZojQFQjht8Tm4jsS3iuEmKjTiEGjG6KnuFNKKJb5A6ZUCUZKdvLdSDWofKi4ToRCwb9poe1XdqfUnP4jaJjCB2Zwv11ZLgSbnZSNecE/0/*)"
val internalDescriptor = "wpkh([c258d2e4/84h/1h/0h]tpubDDYkZojQFQjht8Tm4jsS3iuEmKjTiEGjG6KnuFNKKJb5A6ZUCUZKdvLdSDWofKi4ToRCwb9poe1XdqfUnP4jaJjCB2Zwv11ZLgSbnZSNecE/1/*)"

val databaseConfig = DatabaseConfig.Memory

val blockchainConfig =
  BlockchainConfig.Electrum(
    ElectrumConfig("ssl://electrum.blockstream.info:60002", null, 5u, null, 10u)
  )
val wallet = Wallet(externalDescriptor, internalDescriptor, Network.TESTNET, databaseConfig, blockchainConfig)
val newAddress = wallet.getNewAddress()

Example Projects

How to build

Note that Kotlin version 1.6.10 or later is required to build the library.

  1. Clone this repository.
git clone https://github.com/bitcoindevkit/bdk-ffi
  1. Follow the "General" bdk-ffi ["Getting Started (Developer)"] instructions.
  2. If building on macOS install required intel and m1 jvm targets
  3. Install required targets
rustup target add x86_64-linux-android aarch64-linux-android armv7-linux-androideabi
  1. Install Android SDK and Build-Tools for API level 30+
  2. Setup $ANDROID_SDK_ROOT and $ANDROID_NDK_ROOT path variables (which are required by the build tool), for example (NDK major version 21 is required):
export ANDROID_SDK_ROOT=~/Android/Sdk
export ANDROID_NDK_ROOT=$ANDROID_SDK_ROOT/ndk/21.<NDK_VERSION>
  1. Build kotlin bindings
# build Android library
cd bdk-android
./gradlew buildAndroidLib
  1. Start android emulator (must be x86_64) and run tests
./gradlew connectedAndroidTest 

How to publish

Publish to your local maven repo

# bdk-android
cd bdk-android
./gradlew publishToMavenLocal --exclude-task signMavenPublication

Note that the commands assume you don't need the local libraries to be signed. If you do wish to sign them, simply set your ~/.gradle/gradle.properties signing key values like so:

signing.gnupg.keyName=<YOUR_GNUPG_ID>
signing.gnupg.passphrase=<YOUR_GNUPG_PASSPHRASE>

and use the publishToMavenLocal task without excluding the signing task:

./gradlew publishToMavenLocal