diff --git a/.github/workflows/build-language-bindings.yml b/.github/workflows/build-language-bindings.yml index 20897db..0ea0823 100644 --- a/.github/workflows/build-language-bindings.yml +++ b/.github/workflows/build-language-bindings.yml @@ -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 }} diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 7f151b8..7df376b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -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 diff --git a/lib/bindings/langs/android/.gitignore b/lib/bindings/langs/android/.gitignore index 7e7fed0..9966479 100644 --- a/lib/bindings/langs/android/.gitignore +++ b/lib/bindings/langs/android/.gitignore @@ -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 \ No newline at end of file +lib/src/main/kotlin/breez_sdk_liquid/breez_sdk_liquid.*.kt \ No newline at end of file diff --git a/lib/bindings/langs/android/build.gradle.kts b/lib/bindings/langs/android/build.gradle.kts index dc4c803..19d087b 100644 --- a/lib/bindings/langs/android/build.gradle.kts +++ b/lib/bindings/langs/android/build.gradle.kts @@ -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") } } diff --git a/lib/bindings/langs/android/gradle/wrapper/gradle-wrapper.properties b/lib/bindings/langs/android/gradle/wrapper/gradle-wrapper.properties index ad6a8ab..e9662a5 100644 --- a/lib/bindings/langs/android/gradle/wrapper/gradle-wrapper.properties +++ b/lib/bindings/langs/android/gradle/wrapper/gradle-wrapper.properties @@ -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 diff --git a/lib/bindings/langs/android/lib/build.gradle.kts b/lib/bindings/langs/android/lib/build.gradle.kts index c56db50..7d5ebcc 100644 --- a/lib/bindings/langs/android/lib/build.gradle.kts +++ b/lib/bindings/langs/android/lib/build.gradle.kts @@ -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 diff --git a/lib/bindings/langs/android/lib/src/main/AndroidManifest.xml b/lib/bindings/langs/android/lib/src/main/AndroidManifest.xml index 5090dda..db8569c 100644 --- a/lib/bindings/langs/android/lib/src/main/AndroidManifest.xml +++ b/lib/bindings/langs/android/lib/src/main/AndroidManifest.xml @@ -1,5 +1,4 @@ - + diff --git a/lib/bindings/langs/flutter/scripts/build_uniffi_android.sh b/lib/bindings/langs/flutter/scripts/build_uniffi_android.sh index 37d84c4..52cf1e2 100644 --- a/lib/bindings/langs/flutter/scripts/build_uniffi_android.sh +++ b/lib/bindings/langs/flutter/scripts/build_uniffi_android.sh @@ -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 diff --git a/lib/bindings/makefile b/lib/bindings/makefile index 2f76af5..d3037a8 100644 --- a/lib/bindings/makefile +++ b/lib/bindings/makefile @@ -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 diff --git a/lib/bindings/tests/test_generated_bindings.rs b/lib/bindings/tests/test_generated_bindings.rs index e76a9a6..3686179 100644 --- a/lib/bindings/tests/test_generated_bindings.rs +++ b/lib/bindings/tests/test_generated_bindings.rs @@ -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" ); diff --git a/lib/bindings/uniffi.kotlin-multiplatform.toml b/lib/bindings/uniffi.kotlin-multiplatform.toml new file mode 100644 index 0000000..538fbbe --- /dev/null +++ b/lib/bindings/uniffi.kotlin-multiplatform.toml @@ -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 diff --git a/lib/bindings/uniffi.toml b/lib/bindings/uniffi.toml index db324e6..129de4b 100644 --- a/lib/bindings/uniffi.toml +++ b/lib/bindings/uniffi.toml @@ -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" diff --git a/packages/flutter/android/build.gradle b/packages/flutter/android/build.gradle index 9cec4f4..6019940 100644 --- a/packages/flutter/android/build.gradle +++ b/packages/flutter/android/build.gradle @@ -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") } diff --git a/packages/react-native/.gitignore b/packages/react-native/.gitignore index dd09d95..b3f25a7 100644 --- a/packages/react-native/.gitignore +++ b/packages/react-native/.gitignore @@ -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/* diff --git a/packages/react-native/android/build.gradle b/packages/react-native/android/build.gradle index 176d63d..3435b31 100644 --- a/packages/react-native/android/build.gradle +++ b/packages/react-native/android/build.gradle @@ -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") } diff --git a/packages/react-native/android/src/main/AndroidManifest.xml b/packages/react-native/android/src/main/AndroidManifest.xml index faeadc1..a323092 100644 --- a/packages/react-native/android/src/main/AndroidManifest.xml +++ b/packages/react-native/android/src/main/AndroidManifest.xml @@ -1,5 +1,4 @@ - + diff --git a/packages/react-native/example/App.js b/packages/react-native/example/App.js index 4bf8a55..e0c8f0e 100644 --- a/packages/react-native/example/App.js +++ b/packages/react-native/example/App.js @@ -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) } diff --git a/packages/react-native/example/android/app/build.gradle b/packages/react-native/example/android/app/build.gradle index 600eeaf..7657fc5 100644 --- a/packages/react-native/example/android/app/build.gradle +++ b/packages/react-native/example/android/app/build.gradle @@ -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' diff --git a/packages/react-native/example/android/build.gradle b/packages/react-native/example/android/build.gradle index 9e41d4c..bd7f8f3 100644 --- a/packages/react-native/example/android/build.gradle +++ b/packages/react-native/example/android/build.gradle @@ -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" } diff --git a/packages/react-native/example/android/gradle.properties b/packages/react-native/example/android/gradle.properties index fa4feae..556b9a6 100644 --- a/packages/react-native/example/android/gradle.properties +++ b/packages/react-native/example/android/gradle.properties @@ -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 diff --git a/packages/react-native/example/babel.config.js b/packages/react-native/example/babel.config.js index f2a965a..df7a468 100644 --- a/packages/react-native/example/babel.config.js +++ b/packages/react-native/example/babel.config.js @@ -5,7 +5,6 @@ module.exports = { "module-resolver", { alias: { - crypto: "react-native-quick-crypto", stream: "stream-browserify", buffer: "@craftzdog/react-native-buffer" } diff --git a/packages/react-native/example/yarn.lock b/packages/react-native/example/yarn.lock index 036bc70..b75867f 100644 --- a/packages/react-native/example/yarn.lock +++ b/packages/react-native/example/yarn.lock @@ -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" diff --git a/packages/react-native/makefile b/packages/react-native/makefile index bb9eba3..5999cab 100644 --- a/packages/react-native/makefile +++ b/packages/react-native/makefile @@ -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