From 0dd867125e79a8682e586381c8595f8774d0337b Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Fri, 27 Feb 2026 21:31:59 -0500 Subject: [PATCH 1/5] Renamed `CAndroidNDK` target --- Package.swift | 24 +++++++++---------- Sources/AndroidBinder/AndroidBinder.swift | 2 +- Sources/AndroidBinder/BinderClass.swift | 2 +- Sources/AndroidBinder/Error.swift | 2 +- Sources/AndroidBinder/Parcel.swift | 2 +- Sources/AndroidBinder/Status.swift | 2 +- Sources/AndroidContent/AssetManagerNDK.swift | 2 +- .../AndroidFileManager.swift | 2 +- Sources/AndroidFileManager/Asset.swift | 2 +- Sources/AndroidFileManager/AssetManager.swift | 2 +- .../AndroidFileManager/Configuration.swift | 2 +- .../AndroidFileManager/StorageManager.swift | 2 +- Sources/AndroidHardware/Sensor.swift | 2 +- Sources/AndroidHardware/SensorEvent.swift | 2 +- .../AndroidHardware/SensorEventQueue.swift | 2 +- Sources/AndroidHardware/SensorManager.swift | 2 +- Sources/AndroidInput/GameController.swift | 2 +- Sources/AndroidInput/InputEvent.swift | 2 +- Sources/AndroidInput/InputQueue.swift | 2 +- Sources/AndroidInput/Keycodes.swift | 2 +- Sources/AndroidKit/AndroidKit.swift | 2 +- Sources/AndroidLooper/AndroidMainActor.swift | 2 +- Sources/AndroidLooper/Choreographer.swift | 2 +- Sources/AndroidLooper/Looper.swift | 2 +- Sources/AndroidLooper/LooperEvents.swift | 2 +- .../AndroidLooper/LooperPrepareOptions.swift | 2 +- Sources/AndroidLooper/SerialExecutor.swift | 2 +- Sources/AndroidManifest/PermissionCheck.swift | 2 +- .../NativeActivity.swift | 2 +- Sources/AndroidOS/AndroidAPI.swift | 6 ++--- Sources/AndroidOS/IBinderNDK.swift | 2 +- Sources/AndroidOS/ParcelNDK.swift | 2 +- .../AndroidSupport.cpp | 0 .../{AndroidNDK => CAndroidNDK}/include/ndk.h | 0 .../module.modulemap | 2 +- 35 files changed, 46 insertions(+), 46 deletions(-) rename Sources/{AndroidNDK => CAndroidNDK}/AndroidSupport.cpp (100%) rename Sources/{AndroidNDK => CAndroidNDK}/include/ndk.h (100%) rename Sources/{AndroidNDK => CAndroidNDK}/module.modulemap (58%) diff --git a/Package.swift b/Package.swift index 6c61d0cd..ed3056ba 100644 --- a/Package.swift +++ b/Package.swift @@ -74,7 +74,7 @@ var package = Package( name: "AndroidLooper", targets: ["AndroidLooper"] ), .library( - name: "AndroidNDK", targets: ["AndroidNDK"] + name: "CAndroidNDK", targets: ["CAndroidNDK"] ), .library( name: "AndroidHardware", targets: ["AndroidHardware"] @@ -143,7 +143,7 @@ var package = Package( name: "JavaLangReflect", package: "swift-java" ), - "AndroidNDK", + "CAndroidNDK", "AndroidJava", "AndroidManifest", "AndroidR", @@ -265,7 +265,7 @@ var package = Package( name: "AndroidOS", dependencies: [ "AndroidJava", - "AndroidNDK" + "CAndroidNDK" ], exclude: ["swift-java.config"], swiftSettings: [ @@ -293,7 +293,7 @@ var package = Package( "AndroidJava", "AndroidUtil", "AndroidOS", - "AndroidNDK", + "CAndroidNDK", "AndroidFileManager", ], exclude: ["swift-java.config"], @@ -434,7 +434,7 @@ var package = Package( name: "Socket", package: "Socket" ), - "AndroidNDK" + "CAndroidNDK" ], swiftSettings: [ .swiftLanguageMode(.v6), @@ -446,7 +446,7 @@ var package = Package( ] ), .target( - name: "AndroidNDK", + name: "CAndroidNDK", cxxSettings: [ .define("ANDROID_NDK_VERSION", to: ndkVersion.description), .define("ANDROID_SDK_VERSION", to: sdkVersion.description) @@ -458,7 +458,7 @@ var package = Package( .target( name: "AndroidHardware", dependencies: [ - "AndroidNDK", + "CAndroidNDK", "AndroidLooper" ], swiftSettings: [ @@ -473,7 +473,7 @@ var package = Package( .target( name: "AndroidFileManager", dependencies: [ - "AndroidNDK" + "CAndroidNDK" ], swiftSettings: [ .swiftLanguageMode(.v6), @@ -487,7 +487,7 @@ var package = Package( .target( name: "AndroidManifest", dependencies: [ - "AndroidNDK" + "CAndroidNDK" ], swiftSettings: [ .swiftLanguageMode(.v6), @@ -501,7 +501,7 @@ var package = Package( .target( name: "AndroidNativeActivity", dependencies: [ - "AndroidNDK", + "CAndroidNDK", "AndroidLooper", "AndroidFileManager", "AndroidInput", @@ -522,7 +522,7 @@ var package = Package( .target( name: "AndroidInput", dependencies: [ - "AndroidNDK", + "CAndroidNDK", "AndroidLooper" ], swiftSettings: [ @@ -551,7 +551,7 @@ if ndkBinder { name: "Binder", package: "Binder" ), - "AndroidNDK" + "CAndroidNDK" ], swiftSettings: [ .swiftLanguageMode(.v6) diff --git a/Sources/AndroidBinder/AndroidBinder.swift b/Sources/AndroidBinder/AndroidBinder.swift index d827b684..15087881 100644 --- a/Sources/AndroidBinder/AndroidBinder.swift +++ b/Sources/AndroidBinder/AndroidBinder.swift @@ -7,7 +7,7 @@ #if canImport(Android) import Android -import AndroidNDK +import CAndroidNDK #elseif canImport(Darwin) import Darwin #elseif canImport(Glibc) diff --git a/Sources/AndroidBinder/BinderClass.swift b/Sources/AndroidBinder/BinderClass.swift index e6addf84..9a74b658 100644 --- a/Sources/AndroidBinder/BinderClass.swift +++ b/Sources/AndroidBinder/BinderClass.swift @@ -7,7 +7,7 @@ #if canImport(Android) import Android -import AndroidNDK +import CAndroidNDK #endif public struct BinderClass: ~Copyable { diff --git a/Sources/AndroidBinder/Error.swift b/Sources/AndroidBinder/Error.swift index 6a2c1150..03177a34 100644 --- a/Sources/AndroidBinder/Error.swift +++ b/Sources/AndroidBinder/Error.swift @@ -7,7 +7,7 @@ #if canImport(Android) import Android -import AndroidNDK +import CAndroidNDK #endif /// Android NDK Binder Error diff --git a/Sources/AndroidBinder/Parcel.swift b/Sources/AndroidBinder/Parcel.swift index 90aa4f92..ec49c1d8 100644 --- a/Sources/AndroidBinder/Parcel.swift +++ b/Sources/AndroidBinder/Parcel.swift @@ -7,7 +7,7 @@ #if canImport(Android) import Android -import AndroidNDK +import CAndroidNDK #endif import Binder diff --git a/Sources/AndroidBinder/Status.swift b/Sources/AndroidBinder/Status.swift index 2ec9851b..2fac99c4 100644 --- a/Sources/AndroidBinder/Status.swift +++ b/Sources/AndroidBinder/Status.swift @@ -7,7 +7,7 @@ #if canImport(Android) import Android -import AndroidNDK +import CAndroidNDK #endif /** diff --git a/Sources/AndroidContent/AssetManagerNDK.swift b/Sources/AndroidContent/AssetManagerNDK.swift index 1e873242..4b3d5ca8 100644 --- a/Sources/AndroidContent/AssetManagerNDK.swift +++ b/Sources/AndroidContent/AssetManagerNDK.swift @@ -7,7 +7,7 @@ #if canImport(Android) import Android -import AndroidNDK +import CAndroidNDK #endif import SwiftJava import CSwiftJavaJNI diff --git a/Sources/AndroidFileManager/AndroidFileManager.swift b/Sources/AndroidFileManager/AndroidFileManager.swift index 7058582d..70881885 100644 --- a/Sources/AndroidFileManager/AndroidFileManager.swift +++ b/Sources/AndroidFileManager/AndroidFileManager.swift @@ -7,6 +7,6 @@ #if os(Android) import Android -import AndroidNDK +import CAndroidNDK #endif diff --git a/Sources/AndroidFileManager/Asset.swift b/Sources/AndroidFileManager/Asset.swift index 4f6b739d..2faa8467 100644 --- a/Sources/AndroidFileManager/Asset.swift +++ b/Sources/AndroidFileManager/Asset.swift @@ -7,7 +7,7 @@ #if os(Android) import Android -import AndroidNDK +import CAndroidNDK #endif /// A handle to an `AAsset`. diff --git a/Sources/AndroidFileManager/AssetManager.swift b/Sources/AndroidFileManager/AssetManager.swift index 1e58bd60..1809b243 100644 --- a/Sources/AndroidFileManager/AssetManager.swift +++ b/Sources/AndroidFileManager/AssetManager.swift @@ -7,7 +7,7 @@ #if os(Android) import Android -import AndroidNDK +import CAndroidNDK #endif /// Wrapper around Android `AAssetManager`. diff --git a/Sources/AndroidFileManager/Configuration.swift b/Sources/AndroidFileManager/Configuration.swift index cd58413b..90771efb 100644 --- a/Sources/AndroidFileManager/Configuration.swift +++ b/Sources/AndroidFileManager/Configuration.swift @@ -7,7 +7,7 @@ #if os(Android) import Android -import AndroidNDK +import CAndroidNDK #endif /// Wrapper around Android NDK `AConfiguration`. diff --git a/Sources/AndroidFileManager/StorageManager.swift b/Sources/AndroidFileManager/StorageManager.swift index 93e81eac..c3126372 100644 --- a/Sources/AndroidFileManager/StorageManager.swift +++ b/Sources/AndroidFileManager/StorageManager.swift @@ -7,7 +7,7 @@ #if os(Android) import Android -import AndroidNDK +import CAndroidNDK #endif /// Wrapper around Android `AStorageManager`. diff --git a/Sources/AndroidHardware/Sensor.swift b/Sources/AndroidHardware/Sensor.swift index 684b5660..dda749d1 100644 --- a/Sources/AndroidHardware/Sensor.swift +++ b/Sources/AndroidHardware/Sensor.swift @@ -7,7 +7,7 @@ #if os(Android) import Android -import AndroidNDK +import CAndroidNDK #endif /// A reference to a hardware sensor. diff --git a/Sources/AndroidHardware/SensorEvent.swift b/Sources/AndroidHardware/SensorEvent.swift index 1f57ba21..cd92d7ad 100644 --- a/Sources/AndroidHardware/SensorEvent.swift +++ b/Sources/AndroidHardware/SensorEvent.swift @@ -7,7 +7,7 @@ #if canImport(Android) import Android -import AndroidNDK +import CAndroidNDK #endif /// A sensor event containing a measurement from a hardware sensor. diff --git a/Sources/AndroidHardware/SensorEventQueue.swift b/Sources/AndroidHardware/SensorEventQueue.swift index e0e90b72..e2459620 100644 --- a/Sources/AndroidHardware/SensorEventQueue.swift +++ b/Sources/AndroidHardware/SensorEventQueue.swift @@ -7,7 +7,7 @@ #if os(Android) import Android -import AndroidNDK +import CAndroidNDK #endif /// An event queue for receiving sensor events. diff --git a/Sources/AndroidHardware/SensorManager.swift b/Sources/AndroidHardware/SensorManager.swift index a3532cce..dd39d752 100644 --- a/Sources/AndroidHardware/SensorManager.swift +++ b/Sources/AndroidHardware/SensorManager.swift @@ -7,7 +7,7 @@ #if os(Android) import Android -import AndroidNDK +import CAndroidNDK #endif import AndroidLooper diff --git a/Sources/AndroidInput/GameController.swift b/Sources/AndroidInput/GameController.swift index a1e6a30d..126498d1 100644 --- a/Sources/AndroidInput/GameController.swift +++ b/Sources/AndroidInput/GameController.swift @@ -8,7 +8,7 @@ #if AGDK #if os(Android) import Android -import AndroidNDK +import CAndroidNDK #endif /// Swift wrapper for the Android Game Controller (Paddleboat) C API. diff --git a/Sources/AndroidInput/InputEvent.swift b/Sources/AndroidInput/InputEvent.swift index 766bc3b5..e04df708 100644 --- a/Sources/AndroidInput/InputEvent.swift +++ b/Sources/AndroidInput/InputEvent.swift @@ -7,7 +7,7 @@ #if os(Android) import Android -import AndroidNDK +import CAndroidNDK #endif /// Input Event diff --git a/Sources/AndroidInput/InputQueue.swift b/Sources/AndroidInput/InputQueue.swift index add60bc1..94795d35 100644 --- a/Sources/AndroidInput/InputQueue.swift +++ b/Sources/AndroidInput/InputQueue.swift @@ -7,7 +7,7 @@ #if os(Android) import Android -import AndroidNDK +import CAndroidNDK #endif import AndroidLooper diff --git a/Sources/AndroidInput/Keycodes.swift b/Sources/AndroidInput/Keycodes.swift index a1ef9ba8..93add2b6 100644 --- a/Sources/AndroidInput/Keycodes.swift +++ b/Sources/AndroidInput/Keycodes.swift @@ -7,7 +7,7 @@ #if os(Android) import Android -import AndroidNDK +import CAndroidNDK #endif /// Key code identifying a physical key on a keyboard or virtual key from an input device. diff --git a/Sources/AndroidKit/AndroidKit.swift b/Sources/AndroidKit/AndroidKit.swift index a219357c..38996077 100644 --- a/Sources/AndroidKit/AndroidKit.swift +++ b/Sources/AndroidKit/AndroidKit.swift @@ -7,7 +7,7 @@ #if os(Android) import Android -import AndroidNDK +import CAndroidNDK #endif @_exported import SwiftJava @_exported import JavaIO diff --git a/Sources/AndroidLooper/AndroidMainActor.swift b/Sources/AndroidLooper/AndroidMainActor.swift index 114f184c..4f06ee8e 100644 --- a/Sources/AndroidLooper/AndroidMainActor.swift +++ b/Sources/AndroidLooper/AndroidMainActor.swift @@ -7,7 +7,7 @@ #if os(Android) import Android -import AndroidNDK +import CAndroidNDK #endif import SystemPackage diff --git a/Sources/AndroidLooper/Choreographer.swift b/Sources/AndroidLooper/Choreographer.swift index 8c93f7e4..06863aca 100644 --- a/Sources/AndroidLooper/Choreographer.swift +++ b/Sources/AndroidLooper/Choreographer.swift @@ -7,7 +7,7 @@ #if os(Android) import Android -import AndroidNDK +import CAndroidNDK #endif /// Choreographer coordinates the timing of frame rendering. diff --git a/Sources/AndroidLooper/Looper.swift b/Sources/AndroidLooper/Looper.swift index 3d861fe5..af327f7a 100644 --- a/Sources/AndroidLooper/Looper.swift +++ b/Sources/AndroidLooper/Looper.swift @@ -7,7 +7,7 @@ #if os(Android) import Android -import AndroidNDK +import CAndroidNDK #endif import SystemPackage diff --git a/Sources/AndroidLooper/LooperEvents.swift b/Sources/AndroidLooper/LooperEvents.swift index 17ec883c..ef78c9c5 100644 --- a/Sources/AndroidLooper/LooperEvents.swift +++ b/Sources/AndroidLooper/LooperEvents.swift @@ -7,7 +7,7 @@ #if os(Android) import Android -import AndroidNDK +import CAndroidNDK #endif public extension Looper { diff --git a/Sources/AndroidLooper/LooperPrepareOptions.swift b/Sources/AndroidLooper/LooperPrepareOptions.swift index 806a6a38..a5d32222 100644 --- a/Sources/AndroidLooper/LooperPrepareOptions.swift +++ b/Sources/AndroidLooper/LooperPrepareOptions.swift @@ -7,7 +7,7 @@ #if os(Android) import Android -import AndroidNDK +import CAndroidNDK #endif public extension Looper { diff --git a/Sources/AndroidLooper/SerialExecutor.swift b/Sources/AndroidLooper/SerialExecutor.swift index ab7bcdbc..18f10c18 100644 --- a/Sources/AndroidLooper/SerialExecutor.swift +++ b/Sources/AndroidLooper/SerialExecutor.swift @@ -7,7 +7,7 @@ #if os(Android) import Android -import AndroidNDK +import CAndroidNDK #endif import CoreFoundation diff --git a/Sources/AndroidManifest/PermissionCheck.swift b/Sources/AndroidManifest/PermissionCheck.swift index cfe34d28..af0831f1 100644 --- a/Sources/AndroidManifest/PermissionCheck.swift +++ b/Sources/AndroidManifest/PermissionCheck.swift @@ -7,7 +7,7 @@ #if os(Android) import Android -import AndroidNDK +import CAndroidNDK #elseif canImport(Darwin) import Darwin #elseif canImport(Glibc) diff --git a/Sources/AndroidNativeActivity/NativeActivity.swift b/Sources/AndroidNativeActivity/NativeActivity.swift index d031cb83..dcaa2392 100644 --- a/Sources/AndroidNativeActivity/NativeActivity.swift +++ b/Sources/AndroidNativeActivity/NativeActivity.swift @@ -7,7 +7,7 @@ #if os(Android) import Android -import AndroidNDK +import CAndroidNDK #endif import AndroidLooper import AndroidFileManager diff --git a/Sources/AndroidOS/AndroidAPI.swift b/Sources/AndroidOS/AndroidAPI.swift index 20035d4f..3a2349ce 100644 --- a/Sources/AndroidOS/AndroidAPI.swift +++ b/Sources/AndroidOS/AndroidAPI.swift @@ -7,7 +7,7 @@ #if os(Android) import Android -import AndroidNDK +import CAndroidNDK #endif import SwiftJava @@ -35,7 +35,7 @@ public extension AndroidAPI { internal extension AndroidAPI { static func deviceAPILevel() throws -> Int32 { - #if os(Android) && canImport(AndroidNDK) + #if os(Android) && canImport(CAndroidNDK) try ndkValue().get() #else try jniValue() @@ -58,7 +58,7 @@ internal extension AndroidAPI { /// Available since API level 24. Returns the API level of the device we're actually running on. static func ndkValue() -> Result { - #if os(Android) && canImport(AndroidNDK) + #if os(Android) && canImport(CAndroidNDK) let value = android_get_device_api_level() #else let value: Int32 = -1 diff --git a/Sources/AndroidOS/IBinderNDK.swift b/Sources/AndroidOS/IBinderNDK.swift index 668bc209..3e2071a9 100644 --- a/Sources/AndroidOS/IBinderNDK.swift +++ b/Sources/AndroidOS/IBinderNDK.swift @@ -8,7 +8,7 @@ #if canImport(AndroidBinder) #if canImport(Android) import Android -import AndroidNDK +import CAndroidNDK #endif import SwiftJava import CSwiftJavaJNI diff --git a/Sources/AndroidOS/ParcelNDK.swift b/Sources/AndroidOS/ParcelNDK.swift index 340de82e..eb6caa95 100644 --- a/Sources/AndroidOS/ParcelNDK.swift +++ b/Sources/AndroidOS/ParcelNDK.swift @@ -8,7 +8,7 @@ #if canImport(AndroidBinder) #if canImport(Android) import Android -import AndroidNDK +import CAndroidNDK #endif import SwiftJava import CSwiftJavaJNI diff --git a/Sources/AndroidNDK/AndroidSupport.cpp b/Sources/CAndroidNDK/AndroidSupport.cpp similarity index 100% rename from Sources/AndroidNDK/AndroidSupport.cpp rename to Sources/CAndroidNDK/AndroidSupport.cpp diff --git a/Sources/AndroidNDK/include/ndk.h b/Sources/CAndroidNDK/include/ndk.h similarity index 100% rename from Sources/AndroidNDK/include/ndk.h rename to Sources/CAndroidNDK/include/ndk.h diff --git a/Sources/AndroidNDK/module.modulemap b/Sources/CAndroidNDK/module.modulemap similarity index 58% rename from Sources/AndroidNDK/module.modulemap rename to Sources/CAndroidNDK/module.modulemap index 4dfa1eac..2ebf8999 100644 --- a/Sources/AndroidNDK/module.modulemap +++ b/Sources/CAndroidNDK/module.modulemap @@ -1,4 +1,4 @@ -module AndroidNDK [system] { +module CAndroidNDK [system] { link "log" header "ndk.h" export * From bbf980648f3a2403461aff43621ed8f3f6671a4e Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Fri, 27 Feb 2026 21:43:24 -0500 Subject: [PATCH 2/5] Add availability annotations --- Sources/AndroidBinder/Parcel.swift | 4 ++++ Sources/AndroidManifest/PermissionCheck.swift | 3 +++ 2 files changed, 7 insertions(+) diff --git a/Sources/AndroidBinder/Parcel.swift b/Sources/AndroidBinder/Parcel.swift index ec49c1d8..696aa7cc 100644 --- a/Sources/AndroidBinder/Parcel.swift +++ b/Sources/AndroidBinder/Parcel.swift @@ -132,6 +132,7 @@ public extension Parcel { * \param length number of bytes to marshal, or nil to marshal from \p start to end. * \return the marshaled bytes. */ + @available(Android 33, *) func marshal(start: Int = 0, length: Int? = nil) throws(AndroidBinderError) -> [UInt8] { let len = length ?? (dataSize - start) var buffer = [UInt8](repeating: 0, count: len) @@ -148,6 +149,7 @@ public extension Parcel { * * \param data the bytes to unmarshal. */ + @available(Android 33, *) func unmarshal(_ data: [UInt8]) throws(AndroidBinderError) { if let base = data.withUnsafeBufferPointer({ $0.baseAddress }) { try handle.unmarshal(base, length: data.count).get() @@ -671,6 +673,7 @@ internal extension Parcel.Handle { * * Available since API level 33. */ + @available(Android 33, *) func marshal(into buffer: UnsafeMutablePointer, start: Int, length: Int) -> Result { AParcel_marshal(pointer, buffer, start, length).mapError() } @@ -680,6 +683,7 @@ internal extension Parcel.Handle { * * Available since API level 33. */ + @available(Android 33, *) func unmarshal(_ data: UnsafePointer, length: Int) -> Result { AParcel_unmarshal(pointer, data, length).mapError() } diff --git a/Sources/AndroidManifest/PermissionCheck.swift b/Sources/AndroidManifest/PermissionCheck.swift index af0831f1..740d197c 100644 --- a/Sources/AndroidManifest/PermissionCheck.swift +++ b/Sources/AndroidManifest/PermissionCheck.swift @@ -53,6 +53,7 @@ public extension Permission { /// - pid: Process ID to evaluate. Defaults to the current process ID. /// - uid: User ID to evaluate. Defaults to the current user ID. /// - Returns: Permission check status. + @available(Android 31, *) func check( pid: pid_t = getpid(), uid: uid_t = getuid() @@ -67,6 +68,7 @@ public extension Permission { /// - pid: Process ID to evaluate. Defaults to the current process ID. /// - uid: User ID to evaluate. Defaults to the current user ID. /// - Returns: Permission check status. + @available(Android 31, *) internal func _check( pid: pid_t = getpid(), uid: uid_t = getuid() @@ -87,6 +89,7 @@ public extension Permission { } /// Returns `true` when this permission is granted for the current process. + @available(Android 31, *) var isGranted: Bool { let status = _check() switch status { From 87c386240734473af4382ae1694af7e08a9ab5b7 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Fri, 27 Feb 2026 11:50:00 -0500 Subject: [PATCH 3/5] Update workflow to add nightly-6.3 version and armv7 arch --- .github/workflows/swift.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/swift.yml b/.github/workflows/swift.yml index 73e11cfd..ea175a30 100644 --- a/.github/workflows/swift.yml +++ b/.github/workflows/swift.yml @@ -7,8 +7,8 @@ jobs: strategy: fail-fast: false matrix: - swift: ['6.2.3'] - arch: ['aarch64', 'x86_64'] + swift: ['6.2.3', 'nightly-6.3'] + arch: ['aarch64', 'x86_64', 'armv7'] sdk: ['28', '29', '31', '33'] runs-on: macos-15 timeout-minutes: 30 @@ -18,4 +18,4 @@ jobs: run: | brew install skiptools/skip/skip || (brew update && brew install skiptools/skip/skip) skip android sdk install --version ${{ matrix.swift }} - ANDROID_NDK_ROOT="" ANDROID_SDK_VERSION=${{ matrix.sdk }} skip android build --arch ${{ matrix.arch }} --android-api-level ${{ matrix.sdk }} \ No newline at end of file + ANDROID_NDK_ROOT="" ANDROID_SDK_VERSION=${{ matrix.sdk }} skip android build --arch ${{ matrix.arch }} --android-api-level ${{ matrix.sdk }} From 63ce35fba779f1e907d60e369540a9cffbd17918 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Fri, 27 Feb 2026 22:42:41 -0500 Subject: [PATCH 4/5] Add availability annotation --- Sources/AndroidHardware/Sensor.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/Sources/AndroidHardware/Sensor.swift b/Sources/AndroidHardware/Sensor.swift index dda749d1..ac10b890 100644 --- a/Sources/AndroidHardware/Sensor.swift +++ b/Sources/AndroidHardware/Sensor.swift @@ -82,6 +82,7 @@ public extension Sensor { } /// The hardware sensor handle, unique within a device. + @available(Android 29, *) var handle: Int32 { ASensor_getHandle(pointer) } From f7e5fc503d9ef5ef89cb877b7db59296cec2aeae Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Fri, 27 Feb 2026 22:45:35 -0500 Subject: [PATCH 5/5] Remove missing constants --- Sources/AndroidInput/Keycodes.swift | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/Sources/AndroidInput/Keycodes.swift b/Sources/AndroidInput/Keycodes.swift index 93add2b6..9f057dc4 100644 --- a/Sources/AndroidInput/Keycodes.swift +++ b/Sources/AndroidInput/Keycodes.swift @@ -748,13 +748,7 @@ public extension KeyCode { /// Recent Apps key. static var recentApps: KeyCode { KeyCode(rawValue: AKEYCODE_RECENT_APPS) } - - /// Screenshot key. - static var screenshot: KeyCode { KeyCode(rawValue: AKEYCODE_SCREENSHOT) } - - /// Emoji Picker key. - static var emojiPicker: KeyCode { KeyCode(rawValue: AKEYCODE_EMOJI_PICKER) } - + // MARK: System Navigation Gestures /// System Navigation Up key.