Build Kotlin bindgen with gobley

This commit is contained in:
Ross Savage
2025-05-21 18:47:51 +02:00
parent af8e9d61ff
commit bb9c92d924
23 changed files with 55 additions and 45 deletions

View File

@@ -128,21 +128,22 @@ jobs:
if: ${{ inputs.kotlin }}
working-directory: lib/bindings
run: |
cargo run --bin uniffi-bindgen generate src/breez_sdk_liquid.udl --language kotlin -o ffi/kotlin
cargo install gobley-uniffi-bindgen --git https://github.com/breez/gobley --rev f920c275e4f60e22080a6cd280d9562d64eb6ac9
gobley-uniffi-bindgen -c ./uniffi.toml -o ffi/kotlin src/breez_sdk_liquid.udl
- name: Archive Kotlin binding
if: ${{ inputs.kotlin }}
uses: actions/upload-artifact@v4
with:
name: bindings-kotlin
path: lib/bindings/ffi/kotlin/breez_sdk_liquid/breez_sdk_liquid.kt
path: lib/bindings/ffi/kotlin/main/kotlin/breez_sdk_liquid/breez_sdk_liquid.*.kt
- name: Build Kotlin multiplatform binding
if: ${{ inputs.kotlin }}
working-directory: lib/bindings
run: |
cargo install gobley-uniffi-bindgen --git https://github.com/gobley/gobley --tag v0.2.0
gobley-uniffi-bindgen -c ./uniffi.toml -o ffi/kmp src/breez_sdk_liquid.udl
cargo install gobley-uniffi-bindgen --git https://github.com/breez/gobley --rev f920c275e4f60e22080a6cd280d9562d64eb6ac9
gobley-uniffi-bindgen -c ./uniffi.kotlin-multiplatform.toml -o ffi/kmp src/breez_sdk_liquid.udl
- name: Archive Kotlin multiplatform binding
if: ${{ inputs.kotlin }}

View File

@@ -397,7 +397,8 @@ jobs:
- name: Build Android bindings
working-directory: lib/bindings
run: |
cargo run --bin uniffi-bindgen generate src/breez_sdk_liquid.udl --no-format --language kotlin -o langs/android/lib/src/main/kotlin
cargo install gobley-uniffi-bindgen --git https://github.com/breez/gobley --rev f920c275e4f60e22080a6cd280d9562d64eb6ac9
gobley-uniffi-bindgen -c ./uniffi.toml -o langs/android/lib/src src/breez_sdk_liquid.udl
- name: Run Android build
working-directory: lib/bindings/langs/android

View File

@@ -45,5 +45,4 @@ gen-external-apklibs
# End of https://www.toptal.com/developers/gitignore/api/android
lib/src/main/jniLibs/
lib/src/main/kotlin/breez_sdk_liquid.kt
lib/src/main/kotlin/breez_sdk_liquid/breez_sdk_liquid.kt
lib/src/main/kotlin/breez_sdk_liquid/breez_sdk_liquid.*.kt

View File

@@ -4,6 +4,7 @@ buildscript {
mavenCentral()
}
dependencies {
classpath("com.android.tools.build:gradle:7.4.2")
classpath("com.android.tools.build:gradle:8.2.0")
classpath("org.jetbrains.kotlinx:atomicfu-gradle-plugin:0.23.1")
}
}

View File

@@ -1,6 +1,6 @@
#Thu Feb 29 12:00:20 TRT 2024
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

View File

@@ -1,8 +1,8 @@
plugins {
id("com.android.library")
id("org.jetbrains.kotlin.android") version "1.8.20"
id("org.jetbrains.kotlin.android") version "1.9.21"
id("maven-publish")
kotlin("plugin.serialization") version "1.8.20"
kotlin("plugin.serialization") version "1.9.21"
}
repositories {
@@ -11,6 +11,7 @@ repositories {
}
android {
namespace = "technology.breez.liquid"
compileSdk = 34
defaultConfig {
@@ -38,10 +39,12 @@ android {
}
dependencies {
implementation("com.squareup.okio:okio:3.6.0")
implementation("net.java.dev.jna:jna:5.14.0@aar")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7")
implementation("androidx.appcompat:appcompat:1.6.1")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3")
implementation("org.jetbrains.kotlinx:atomicfu:0.23.1")
}
val libraryVersion: String by project

View File

@@ -1,5 +1,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="technology.breez.liquid">
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET" />

View File

@@ -15,4 +15,4 @@ cp ffi/kotlin/jniLibs/x86/*.so ../../packages/flutter/android/src/main/jniLibs/x
cp ffi/kotlin/jniLibs/x86_64/*.so ../../packages/flutter/android/src/main/jniLibs/x86_64/
# Copy library contents & files
cp -r langs/android/lib/src/main/kotlin ../../packages/flutter/android/src/main/
cp -r ffi/kotlin/breez_sdk_liquid ../../packages/flutter/android/src/main/kotlin
cp -r ffi/kotlin/main/kotlin/breez_sdk_liquid ../../packages/flutter/android/src/main/kotlin

View File

@@ -37,7 +37,8 @@ all: bindings-swift bindings-android python-darwin react-native
## Android
.PHONY: android
android: aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android
cargo run --bin uniffi-bindgen generate src/breez_sdk_liquid.udl --no-format --language kotlin -o ffi/kotlin
cargo install gobley-uniffi-bindgen --git https://github.com/breez/gobley --rev f920c275e4f60e22080a6cd280d9562d64eb6ac9
gobley-uniffi-bindgen -c ./uniffi.toml -o ffi/kotlin src/breez_sdk_liquid.udl
aarch64-linux-android: $(SOURCES) ndk-home
cargo ndk -t aarch64-linux-android -o ffi/kotlin/jniLibs build --release
@@ -57,8 +58,8 @@ x86_64-linux-android: $(SOURCES) ndk-home
bindings-android: android
cp -r ffi/kotlin/jniLibs langs/android/lib/src/main
cp -r ffi/kotlin/breez_sdk_liquid langs/android/lib/src/main/kotlin/
cd langs/android && ./gradlew assemble
cp -r ffi/kotlin/main/kotlin/breez_sdk_liquid langs/android/lib/src/main/kotlin/
cd langs/android && ./gradlew assemble --debug
mkdir -p ffi/android
cp langs/android/lib/build/outputs/aar/lib-release.aar ffi/android
@@ -66,11 +67,12 @@ bindings-android: android
.PHONY: kotlin
kotlin: $(SOURCES)
cargo build --release --target $(TARGET)
cargo run --bin uniffi-bindgen generate src/breez_sdk_liquid.udl --no-format --language kotlin -o ffi/kotlin
cargo install gobley-uniffi-bindgen --git https://github.com/breez/gobley --rev f920c275e4f60e22080a6cd280d9562d64eb6ac9
gobley-uniffi-bindgen -c ./uniffi.toml -o ffi/kotlin src/breez_sdk_liquid.udl
bindings-kotlin-multiplatform: ios-universal android
cargo install gobley-uniffi-bindgen --git https://github.com/gobley/gobley --tag v0.2.0
gobley-uniffi-bindgen -c ./uniffi.toml -o ffi/kmp src/breez_sdk_liquid.udl
cargo install gobley-uniffi-bindgen --git https://github.com/breez/gobley --rev f920c275e4f60e22080a6cd280d9562d64eb6ac9
gobley-uniffi-bindgen -c ./uniffi.kotlin-multiplatform.toml -o ffi/kmp src/breez_sdk_liquid.udl
mkdir -p langs/kotlin-multiplatform/breez-sdk-liquid-kmp/src/androidMain/kotlin/breez_sdk_liquid
mkdir -p langs/kotlin-multiplatform/breez-sdk-liquid-kmp/src/commonMain/kotlin/breez_sdk_liquid

View File

@@ -2,7 +2,6 @@ use std::process::Command;
uniffi::build_foreign_language_testcases!(
"tests/bindings/test_breez_sdk_liquid.swift",
"tests/bindings/test_breez_sdk_liquid.kts",
"tests/bindings/test_breez_sdk_liquid.py"
);

View File

@@ -0,0 +1,5 @@
# Kotlin Multi Platform https://gobley.dev/docs/bindgen#bindgen-configuration
package_name = "breez_sdk_liquid"
kotlin_targets = ["jvm", "android", "native"]
kotlin_target_version = "1.8.20"
disable_java_cleaner = true

View File

@@ -1,17 +1,15 @@
# Kotlin Multi Platform https://gobley.dev/docs/bindgen#bindgen-configuration
# Kotlin https://gobley.dev/docs/bindgen#bindgen-configuration
package_name = "breez_sdk_liquid"
kotlin_targets = ["jvm", "android", "native"]
use_pascal_case_enum_class = true
cdylib_name = "breez_sdk_liquid_bindings"
kotlin_multiplatform = false
kotlin_targets = ["jvm"]
kotlin_target_version = "1.8.20"
disable_java_cleaner = true
# https://mozilla.github.io/uniffi-rs/swift/configuration.html
[bindings.swift]
cdylib_name = "breez_sdk_liquid_bindings"
# https://mozilla.github.io/uniffi-rs/kotlin/configuration.html
[bindings.kotlin]
package_name = "breez_sdk_liquid"
cdylib_name = "breez_sdk_liquid_bindings"
# https://mozilla.github.io/uniffi-rs/python/configuration.html
[bindings.python]
cdylib_name = "breez_sdk_liquid_bindings"

View File

@@ -59,4 +59,7 @@ dependencies {
implementation "net.java.dev.jna:jna:5.14.0@aar"
/* JSON serialization */
implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3'
/* Kotlin bindgen dependencies */
implementation "org.jetbrains.kotlinx:atomicfu:0.23.1"
implementation("com.squareup.okio:okio:3.6.0")
}

View File

@@ -68,7 +68,7 @@ android/keystores/debug.keystore
lib/
# bindings (used for local development only)
android/src/main/java/com/breezsdkliquid/breez_sdk_liquid.kt
android/src/main/java/com/breezsdkliquid/breez_sdk_liquid.*.kt
android/src/main/jniLibs
ios/include/*
ios/libs/*

View File

@@ -24,7 +24,9 @@ apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
android {
namespace "com.breezsdkliquid"
compileSdkVersion 34
defaultConfig {
minSdkVersion 24
targetSdkVersion 34
@@ -74,5 +76,6 @@ dependencies {
// Therefore we ignore the version of JNA that comes with the Breez Liquid SDK from Jitpack
// and manually add one that does include the necessary Android platform binaries.
implementation("com.github.breez:breez-sdk-liquid:${getVersionFromNpmPackage()}") { exclude group:"net.java.dev.jna" } // remove for using locally built bindings during development
//implementation "org.jetbrains.kotlinx:atomicfu:0.23.1"
implementation("net.java.dev.jna:jna:5.14.0@aar")
}

View File

@@ -1,5 +1,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.breezsdkliquid">
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

View File

@@ -24,7 +24,6 @@ import {
PaymentMethod
} from "@breeztech/react-native-breez-sdk-liquid"
import BuildConfig from "react-native-build-config"
import { generateMnemonic } from "@dreson4/react-native-quick-bip39"
import { getSecureItem, setSecureItem } from "./utils/storage"
const MNEMONIC_STORE = "MNEMONIC_SECURE_STORE"
@@ -62,7 +61,7 @@ const App = () => {
let mnemonic = await getSecureItem(MNEMONIC_STORE)
if (mnemonic == null) {
mnemonic = generateMnemonic(256)
mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"
setSecureItem(MNEMONIC_STORE, mnemonic)
}

View File

@@ -284,7 +284,6 @@ dependencies {
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0"
implementation 'androidx.core:core-ktx:1.3.2'
implementation "org.jetbrains.kotlin:kotlin-stdlib:${rootProject.ext.kotlin_version}"
debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") {
exclude group:'com.facebook.fbjni'

View File

@@ -4,9 +4,9 @@ buildscript {
ext {
buildToolsVersion = "33.0.0"
minSdkVersion = 24
compileSdkVersion = 34
targetSdkVersion = 34
kotlin_version = "1.8.0"
compileSdkVersion = 33
targetSdkVersion = 33
kotlin_version = "1.8.20"
ndkVersion = "25.1.8937393"
}

View File

@@ -22,7 +22,7 @@ org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m
# https://developer.android.com/topic/libraries/support-library/androidx-rn
android.useAndroidX=true
# Automatically convert third-party libraries to use AndroidX
android.enableJetifier=true
android.enableJetifier=false
# Version of flipper SDK to use with React Native
FLIPPER_VERSION=0.125.0

View File

@@ -5,7 +5,6 @@ module.exports = {
"module-resolver",
{
alias: {
crypto: "react-native-quick-crypto",
stream: "stream-browserify",
buffer: "@craftzdog/react-native-buffer"
}

View File

@@ -964,10 +964,10 @@
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
"@breeztech/react-native-breez-sdk-liquid@0.7.0-rc4":
version "0.7.0-rc4"
resolved "https://registry.yarnpkg.com/@breeztech/react-native-breez-sdk-liquid/-/react-native-breez-sdk-liquid-0.7.0-rc4.tgz#4a7304741a2fbaf81f6da14d597b89cea5e099d7"
integrity sha512-m/1HwAca9PhhM7f/Vg7CAaDzR+fBkV3R5nHk4AS6vlTMjD4NJd/5hDsQNaJG9nrubZT5flN8EcqimUq2A6SQtA==
"@breeztech/react-native-breez-sdk-liquid@0.8.3":
version "0.8.3"
resolved "https://registry.yarnpkg.com/@breeztech/react-native-breez-sdk-liquid/-/react-native-breez-sdk-liquid-0.8.3.tgz#c9303dd853b5410b06b9af0c3f77a57784677197"
integrity sha512-ItWZ42uEpv0o0e4l4Ty1k/79ewjr/JrtraV6U9CrJ4awCvcmXQCy7L/01q8/aN1EoKQD91lUt6iQ1gMv5NJj/A==
"@cnakazawa/watch@^1.0.3":
version "1.0.4"

View File

@@ -29,7 +29,7 @@ android-copy:
mkdir -p android/src/main/jniLibs/x86_64
mkdir -p android/src/main/jniLibs/arm64-v8a
mkdir -p android/src/main/jniLibs/armeabi-v7a
cp ../../lib/bindings/ffi/kotlin/breez_sdk_liquid/breez_sdk_liquid.kt android/src/main/java/com/breezsdkliquid/breez_sdk_liquid.kt
cp ../../lib/bindings/ffi/kotlin/main/kotlin/breez_sdk_liquid/breez_sdk_liquid.*.kt android/src/main/java/com/breezsdkliquid/
cp ../../lib/bindings/ffi/kotlin/jniLibs/x86/libbreez_sdk_liquid_bindings.so android/src/main/jniLibs/x86/libbreez_sdk_liquid_bindings.so
cp ../../lib/bindings/ffi/kotlin/jniLibs/x86_64/libbreez_sdk_liquid_bindings.so android/src/main/jniLibs/x86_64/libbreez_sdk_liquid_bindings.so
cp ../../lib/bindings/ffi/kotlin/jniLibs/arm64-v8a/libbreez_sdk_liquid_bindings.so android/src/main/jniLibs/arm64-v8a/libbreez_sdk_liquid_bindings.so