diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 8d46b9c..b5a0cc3 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -20,6 +20,64 @@ jobs: - name: Run tests run: swift test --filter CoreGraphicsPolyfillTests + build-android: + name: Build for Android + runs-on: ubuntu-22.04 + env: + ANDROID_NDK_VERSION: "28.2.13676358" + ANDROID_SWIFT_TOOLCHAIN_URL: "https://download.swift.org/swift-6.3.1-release/ubuntu2204/swift-6.3.1-RELEASE/swift-6.3.1-RELEASE-ubuntu22.04.tar.gz" + ANDROID_SWIFT_SDK_URL: "https://download.swift.org/swift-6.3.1-release/android-sdk/swift-6.3.1-RELEASE/swift-6.3.1-RELEASE_android.artifactbundle.tar.gz" + ANDROID_SWIFT_SDK_CHECKSUM: "8193a4e96538635131a154736c8896fba0e5a1c30e065524f00ed78719bac35a" + + steps: + - name: Checkout code + uses: actions/checkout@v5 + + - name: Install Swift + run: | + swift_archive="$RUNNER_TEMP/swift-6.3.1.tar.gz" + swift_root="$RUNNER_TEMP/swift-6.3.1" + curl --fail --location --retry 3 \ + --output "$swift_archive" \ + "$ANDROID_SWIFT_TOOLCHAIN_URL" + mkdir -p "$swift_root" + tar -xzf "$swift_archive" -C "$swift_root" --strip-components=1 + echo "$swift_root/usr/bin" >> "$GITHUB_PATH" + + - name: Setup JDK 17 + uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 + with: + distribution: temurin + java-version: "17" + + - name: Setup Android SDK + uses: android-actions/setup-android@9fc6c4e9069bf8d3d10b2204b1fb8f6ef7065407 + with: + packages: "" + + - name: Install Android NDK + run: sdkmanager "ndk;${ANDROID_NDK_VERSION}" + + - name: Install Swift Android SDK + run: | + swift sdk install \ + "$ANDROID_SWIFT_SDK_URL" \ + --checksum "$ANDROID_SWIFT_SDK_CHECKSUM" + + - name: Configure Swift Android SDK + run: | + swift_setup_script="$( + find "$HOME" \ + -path "*/swift-sdks/*/swift-android/scripts/setup-android-sdk.sh" \ + -print -quit + )" + test -n "$swift_setup_script" + ANDROID_NDK_HOME="$ANDROID_SDK_ROOT/ndk/$ANDROID_NDK_VERSION" \ + bash "$swift_setup_script" + + - name: Build for Android + run: swift build --target SVGView --swift-sdk aarch64-unknown-linux-android31 + test-macos: name: Test on macOS runs-on: macos-26 diff --git a/Source/CoreGraphicsPolyfill.swift b/Source/CoreGraphicsPolyfill.swift index 6b50b8e..cb9121d 100644 --- a/Source/CoreGraphicsPolyfill.swift +++ b/Source/CoreGraphicsPolyfill.swift @@ -5,7 +5,7 @@ // Created by khoi on 10/5/25. // -#if os(Linux) || os(WASI) +#if os(Linux) || os(WASI) || os(Android) import Foundation #elseif canImport(FoundationEssentials) import FoundationEssentials @@ -21,7 +21,7 @@ import Android import Glibc #endif -#if os(Linux) || os(WASI) +#if os(Linux) || os(WASI) || os(Android) public typealias CGFloat = Foundation.CGFloat public typealias CGPoint = Foundation.CGPoint public typealias CGSize = Foundation.CGSize diff --git a/Source/Serialization/Serializations.swift b/Source/Serialization/Serializations.swift index ddc3570..e538548 100644 --- a/Source/Serialization/Serializations.swift +++ b/Source/Serialization/Serializations.swift @@ -49,7 +49,7 @@ extension CGFloat: SerializableAtom { } -#if canImport(CoreGraphics) || os(Linux) || os(WASI) +#if canImport(CoreGraphics) || os(Linux) || os(WASI) || os(Android) extension Double: SerializableAtom { func serialize() -> String { diff --git a/Tests/CoreGraphicsPolyfillTests/PolyfillTests.swift b/Tests/CoreGraphicsPolyfillTests/PolyfillTests.swift index 79f9d54..65ea17e 100644 --- a/Tests/CoreGraphicsPolyfillTests/PolyfillTests.swift +++ b/Tests/CoreGraphicsPolyfillTests/PolyfillTests.swift @@ -25,7 +25,6 @@ final class PolyfillTests: XCTestCase { #if os(WASI) || os(Linux) || os(Android) - #if os(WASI) || os(Linux) func testGeometryTypesMatchFoundation() { let scalar: Foundation.CGFloat = CGFloat(1) let point: Foundation.CGPoint = CGPoint(x: scalar, y: scalar) @@ -34,7 +33,10 @@ final class PolyfillTests: XCTestCase { XCTAssertEqual(rect, Foundation.CGRect(x: 1, y: 1, width: 1, height: 1)) } - #endif + + func testDoubleSerialization() { + XCTAssertEqual(Double(1).serialize(), "1") + } // MARK: - CGAffineTransform Tests