From 2217b9c74a0e27c77fbb1d2e739392d8619499c7 Mon Sep 17 00:00:00 2001 From: Evgeny Bozhko Date: Sat, 23 May 2026 15:47:23 +0300 Subject: [PATCH 1/7] Add GitHub Actions workflow for building Android SO --- .github/workflows/android.yml | 57 +++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 .github/workflows/android.yml diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml new file mode 100644 index 00000000..74623f4f --- /dev/null +++ b/.github/workflows/android.yml @@ -0,0 +1,57 @@ +name: Build Android SO + +on: + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-24.04 + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Go + uses: actions/setup-go@v5 + with: + go-version: '1.25.0' + + - name: Install Android NDK + run: | + wget https://dl.google.com/android/repository/android-ndk-r28c-linux.zip + unzip android-ndk-r28c-linux.zip + echo "ANDROID_NDK_HOME=$PWD/android-ndk-r28c" >> $GITHUB_ENV + + - name: Install gomobile + run: | + go install golang.org/x/mobile/cmd/gomobile@latest + go install golang.org/x/mobile/cmd/gobind@latest + + export PATH=$PATH:$(go env GOPATH)/bin + + gomobile init + + - name: Build + run: | + export PATH=$PATH:$(go env GOPATH)/bin + + gomobile bind \ + -target=android/arm64 \ + -androidapi 26 \ + -o lib.aar \ + ./ + + - name: Extract SO + run: | + unzip lib.aar -d out + find out -name "*.so" + + - name: Check alignment + run: | + $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-readelf -l out/jni/arm64-v8a/*.so + + - name: Upload + uses: actions/upload-artifact@v4 + with: + name: android-so + path: out/jni/**/*.so From 29e8ed403900eeca95f16cce7120b9b7c9b3a540 Mon Sep 17 00:00:00 2001 From: Evgeny Bozhko Date: Sat, 23 May 2026 15:51:55 +0300 Subject: [PATCH 2/7] Update android.yml --- .github/workflows/android.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 74623f4f..814f94da 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -24,11 +24,13 @@ jobs: - name: Install gomobile run: | + export PATH=$PATH:$(go env GOPATH)/bin + + go get golang.org/x/mobile@latest + go get -tool golang.org/x/mobile/cmd/gobind go install golang.org/x/mobile/cmd/gomobile@latest go install golang.org/x/mobile/cmd/gobind@latest - export PATH=$PATH:$(go env GOPATH)/bin - gomobile init - name: Build From 31f3fc22df32d9b6a8735bc64cf59967b443d9ed Mon Sep 17 00:00:00 2001 From: Evgeny Bozhko Date: Sat, 23 May 2026 15:53:41 +0300 Subject: [PATCH 3/7] Update android.yml --- .github/workflows/android.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 814f94da..f344a788 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -37,6 +37,11 @@ jobs: run: | export PATH=$PATH:$(go env GOPATH)/bin + go env GOMOD + go get golang.org/x/mobile@latest + go get -tool golang.org/x/mobile/cmd/gobind + go mod tidy + gomobile bind \ -target=android/arm64 \ -androidapi 26 \ From 63cbbd8de18af06cc7f8dc9fd85a04a6ee67eef3 Mon Sep 17 00:00:00 2001 From: Evgeny Bozhko Date: Sat, 23 May 2026 16:09:01 +0300 Subject: [PATCH 4/7] Update Android build workflow for AAR generation --- .github/workflows/android.yml | 55 +++++++++++++++++++++++------------ 1 file changed, 36 insertions(+), 19 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index f344a788..e7556d8f 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -1,18 +1,21 @@ -name: Build Android SO +name: Build Android AAR 16KB on: workflow_dispatch: +env: + FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true + jobs: build: runs-on: ubuntu-24.04 steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Setup Go - uses: actions/setup-go@v5 + uses: actions/setup-go@v6 with: go-version: '1.25.0' @@ -25,40 +28,54 @@ jobs: - name: Install gomobile run: | export PATH=$PATH:$(go env GOPATH)/bin - - go get golang.org/x/mobile@latest - go get -tool golang.org/x/mobile/cmd/gobind go install golang.org/x/mobile/cmd/gomobile@latest go install golang.org/x/mobile/cmd/gobind@latest - gomobile init - - name: Build + - name: Prepare x/mobile dependency run: | - export PATH=$PATH:$(go env GOPATH)/bin - go env GOMOD go get golang.org/x/mobile@latest go get -tool golang.org/x/mobile/cmd/gobind go mod tidy + - name: Build AAR + run: | + export PATH=$PATH:$(go env GOPATH)/bin + gomobile bind \ -target=android/arm64 \ -androidapi 26 \ - -o lib.aar \ + -o libSatoshiX.aar \ ./ - - name: Extract SO + - name: Extract AAR only for validation run: | - unzip lib.aar -d out - find out -name "*.so" + rm -rf aar_check + mkdir aar_check + unzip -q libSatoshiX.aar -d aar_check + find aar_check -name "*.so" - - name: Check alignment + - name: Check 16KB alignment run: | - $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-readelf -l out/jni/arm64-v8a/*.so + FAILED=0 + + for SO_FILE in $(find aar_check/jni -name "*.so"); do + echo "Checking: $SO_FILE" + $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-readelf -l "$SO_FILE" | grep LOAD + + if $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-readelf -l "$SO_FILE" | grep -q "0x4000"; then + echo "OK 16KB: $SO_FILE" + else + echo "FAILED 16KB: $SO_FILE" + FAILED=1 + fi + done + + exit $FAILED - - name: Upload + - name: Upload AAR uses: actions/upload-artifact@v4 with: - name: android-so - path: out/jni/**/*.so + name: libSatoshiX-aar-16kb + path: libSatoshiX.aar From 64cbe1563379e41e7c372e1e75b77427a893cb26 Mon Sep 17 00:00:00 2001 From: Evgeny Bozhko Date: Sat, 23 May 2026 16:13:03 +0300 Subject: [PATCH 5/7] Update android.yml --- .github/workflows/android.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index e7556d8f..a703d297 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -17,7 +17,7 @@ jobs: - name: Setup Go uses: actions/setup-go@v6 with: - go-version: '1.25.0' + go-version: '>=1.26.2' - name: Install Android NDK run: | From 9bcfe6d45a257e7f21de8fcc09a79b935e0b72c5 Mon Sep 17 00:00:00 2001 From: Evgeny Bozhko Date: Wed, 3 Jun 2026 10:48:52 +0300 Subject: [PATCH 6/7] Add armv7 --- .github/workflows/android.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index a703d297..8a6f4834 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -17,7 +17,8 @@ jobs: - name: Setup Go uses: actions/setup-go@v6 with: - go-version: '>=1.26.2' + go-version: 'stable' + check-latest: true - name: Install Android NDK run: | @@ -44,7 +45,7 @@ jobs: export PATH=$PATH:$(go env GOPATH)/bin gomobile bind \ - -target=android/arm64 \ + -target=android/arm,android/arm64 \ -androidapi 26 \ -o libSatoshiX.aar \ ./ From eacc496f3c9fff0a05f60668d025b50909ef769e Mon Sep 17 00:00:00 2001 From: Evgeny Bozhko Date: Wed, 3 Jun 2026 11:02:29 +0300 Subject: [PATCH 7/7] Change check for 16kb --- .github/workflows/android.yml | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 8a6f4834..ffdc485c 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -64,15 +64,19 @@ jobs: for SO_FILE in $(find aar_check/jni -name "*.so"); do echo "Checking: $SO_FILE" $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-readelf -l "$SO_FILE" | grep LOAD - - if $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-readelf -l "$SO_FILE" | grep -q "0x4000"; then - echo "OK 16KB: $SO_FILE" + + if echo "$SO_FILE" | grep -q "arm64-v8a\|x86_64"; then + if $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-readelf -l "$SO_FILE" | grep -q "0x4000"; then + echo "OK 16KB: $SO_FILE" + else + echo "FAILED 16KB: $SO_FILE" + FAILED=1 + fi else - echo "FAILED 16KB: $SO_FILE" - FAILED=1 + echo "SKIP 16KB check for 32-bit ABI: $SO_FILE" fi done - + exit $FAILED - name: Upload AAR