diff --git a/.github/workflows/kotlin.yml b/.github/workflows/kotlin.yml index 754b8cf4..5d05e933 100644 --- a/.github/workflows/kotlin.yml +++ b/.github/workflows/kotlin.yml @@ -44,7 +44,7 @@ jobs: - name: "Build Kotlin Multiplatform bindings" run: | - /usr/local/bin/task build:android + /usr/local/bin/task build:kotlin - name: "Build Android library" working-directory: libs/gl-sdk-android diff --git a/.gitignore b/.gitignore index b4f362ea..06f71a5b 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,6 @@ metadata.json examples/javascript/node_modules examples/javascript/response.bin examples/javascript/package-lock.json + +# IntelliJ +.idea/ diff --git a/build/.tasks.yml b/build/.tasks.yml index 2664a6fd..a4173f32 100644 --- a/build/.tasks.yml +++ b/build/.tasks.yml @@ -13,10 +13,17 @@ tasks: kotlin: deps: - android + vars: + OS_NAME: + sh: uname | tr '[:upper:]' '[:lower:]' cmds: - - cargo install --bin gobley-uniffi-bindgen gobley-uniffi-bindgen@0.2.0 + - cargo install --bin gobley-uniffi-bindgen gobley-uniffi-bindgen@0.3.7 - gobley-uniffi-bindgen --config ./libs/gl-sdk/uniffi.kotlin-multiplatform.toml --library ./target/aarch64-linux-android/debug/libglsdk.a --out-dir target/release/kotlin-multiplatform - cp -a ./target/release/kotlin-multiplatform/* libs/gl-sdk-android/lib/src/ + - cp -a {{.ANDROID_NDK_HOME}}/toolchains/llvm/prebuilt/{{.OS_NAME}}-x86_64/sysroot/usr/lib/aarch64-linux-android/libc++_shared.so libs/gl-sdk-android/lib/src/androidMain/jniLibs/arm64-v8a/ + - cp -a {{.ANDROID_NDK_HOME}}/toolchains/llvm/prebuilt/{{.OS_NAME}}-x86_64/sysroot/usr/lib/arm-linux-androideabi/libc++_shared.so libs/gl-sdk-android/lib/src/androidMain/jniLibs/armeabi-v7a/ + - cp -a {{.ANDROID_NDK_HOME}}/toolchains/llvm/prebuilt/{{.OS_NAME}}-x86_64/sysroot/usr/lib/i686-linux-android/libc++_shared.so libs/gl-sdk-android/lib/src/androidMain/jniLibs/x86/ + - cp -a {{.ANDROID_NDK_HOME}}/toolchains/llvm/prebuilt/{{.OS_NAME}}-x86_64/sysroot/usr/lib/x86_64-linux-android/libc++_shared.so libs/gl-sdk-android/lib/src/androidMain/jniLibs/x86_64/ swift: deps: diff --git a/libs/gl-sdk-android/.gitignore b/libs/gl-sdk-android/.gitignore new file mode 100644 index 00000000..ae71f3a0 --- /dev/null +++ b/libs/gl-sdk-android/.gitignore @@ -0,0 +1,71 @@ +### Android ### +# Gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Log/OS Files +*.log + +# Android Studio generated files and folders +captures/ +.externalNativeBuild/ +.cxx/ +*.apk +output.json + +# IntelliJ +*.iml +.idea/ +misc.xml +deploymentTargetDropDown.xml +render.experimental.xml + +# Keystore files +*.jks +*.keystore + +# Google Services (e.g. APIs or Firebase) +google-services.json + +# Android Profiling +*.hprof + +### Android Patch ### +gen-external-apklibs + +# Replacement of .externalNativeBuild directories introduced +# with Android Studio 3.5. + +### Kotlin ### +# Compiled class file +*.class + +# Log file + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* +replay_pid* + +glsdk.h +glsdk.common.kt +glsdk.android.kt +glsdk.jvm.kt +glsdk.native.kt \ No newline at end of file diff --git a/libs/gl-sdk-android/gradle/libs.versions.toml b/libs/gl-sdk-android/gradle/libs.versions.toml index 4e501cd6..841d2c1d 100644 --- a/libs/gl-sdk-android/gradle/libs.versions.toml +++ b/libs/gl-sdk-android/gradle/libs.versions.toml @@ -1,15 +1,15 @@ [versions] annotation = "1.9.1" -kotlin = "2.2.20" +kotlin = "2.2.21" kotlinx-serialization = "1.9.0" kotlinx-coroutines = "1.10.2" -android-gradle-plugin = "8.13.0" +android-gradle-plugin = "8.13.2" okio = "3.16.0" espresso = "3.7.0" jna = "5.18.1" junit = "4.13.2" junit-ext = "1.3.0" -maven-publish = "0.34.0" +maven-publish = "0.35.0" atomicfu = "0.29.0" [libraries] diff --git a/libs/gl-sdk-android/lib/build.gradle.kts b/libs/gl-sdk-android/lib/build.gradle.kts index 3549b683..c7a1b9ff 100644 --- a/libs/gl-sdk-android/lib/build.gradle.kts +++ b/libs/gl-sdk-android/lib/build.gradle.kts @@ -17,35 +17,38 @@ kotlin { compilerOptions { jvmTarget.set(JvmTarget.JVM_1_8) } } + /* jvm() + */ - val xcf = XCFramework() /* - listOf( - iosArm64(), - iosSimulatorArm64() - ).forEach { - - it.binaries.framework { - baseName = "glsdk" - xcf.add(this) - } + val xcf = XCFramework() - val platform = when (it.targetName) { - "iosSimulatorArm64" -> "ios_simulator_arm64" - "iosArm64" -> "ios_arm64" - else -> error("Unsupported target $name") - } + listOf( + iosArm64(), + iosSimulatorArm64() + ).forEach { + + it.binaries.framework { + baseName = "glsdk" + xcf.add(this) + } + + val platform = when (it.targetName) { + "iosSimulatorArm64" -> "ios_simulator_arm64" + "iosArm64" -> "ios_arm64" + else -> error("Unsupported target $name") + } - it.compilations["main"].cinterops { - create("glsdkCInterop") { - defFile(project.file("src/nativeInterop/cinterop/glsdk.def")) - includeDirs(project.file("src/nativeInterop/cinterop/headers/glsdk/"), project.file("src/libs/$platform")) + it.compilations["main"].cinterops { + create("glsdkCInterop") { + defFile(project.file("src/nativeInterop/cinterop/glsdk.def")) + includeDirs(project.file("src/nativeInterop/cinterop/headers/glsdk/"), project.file("src/libs/$platform")) + } } } - } -*/ + */ compilerOptions.freeCompilerArgs.add("-Xexpect-actual-classes") sourceSets { @@ -140,3 +143,13 @@ mavenPublishing { extensions.configure { useGpgCmd() } + +// Do not require signing when publishing to Maven Local +// Allows `./gradlew publishToMavenLocal` (or `publishToLocalMaven`) without GPG setup +tasks.withType().configureEach { + onlyIf { + val taskNames = gradle.startParameter.taskNames + // Skip signing if the build is targeting the local Maven repository + taskNames.none { it.contains("publishToMavenLocal", ignoreCase = true) || it.contains("publishToLocalMaven", ignoreCase = true) } + } +} \ No newline at end of file diff --git a/libs/gl-sdk-android/lib/src/androidInstrumentedTest/kotlin/com/blockstream/glsdk/InstrumentedTest.kt b/libs/gl-sdk-android/lib/src/androidInstrumentedTest/kotlin/com/blockstream/glsdk/InstrumentedTest.kt new file mode 100644 index 00000000..ee3f94e1 --- /dev/null +++ b/libs/gl-sdk-android/lib/src/androidInstrumentedTest/kotlin/com/blockstream/glsdk/InstrumentedTest.kt @@ -0,0 +1,22 @@ +package com.blockstream.glsdk + +import androidx.test.ext.junit.runners.AndroidJUnit4 +import glsdk.Signer +import org.junit.Test +import org.junit.runner.RunWith + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class InstrumentedTest { + + @Test + fun test() { + val mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about" + val signer = Signer(mnemonic) + signer.start() + } +} \ No newline at end of file