The Swift Package Index logo.Swift Package Index

Build Information

Failed to build Readium, reference develop (e20d5c), with Swift 6.2 for Android on 25 Oct 2026 09:04:05 UTC.

Build Command

bash -c docker run --pull=always --rm -v "checkouts-54344846-1":/host -w "$PWD" -e JAVA_HOME="/root/.sdkman/candidates/java/current" -e SPI_BUILD="1" -e SPI_PROCESSING="1" registry.gitlab.com/saguaro1/spi-images:android-6.2-latest swift build --swift-sdk aarch64-unknown-linux-android28 2>&1

Build Log

========================================
RunAll
========================================
Builder version: 5.1.3
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/readium/swift-toolkit.git
Reference: develop
Initialized empty Git repository in /host/spi-builder-workspace/.git/
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint: 	git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint: 	git branch -m <name>
From https://github.com/readium/swift-toolkit
 * branch            develop    -> FETCH_HEAD
 * [new branch]      develop    -> origin/develop
HEAD is now at e20d5cf Add speed and pitch settings to `PublicationSpeechSynthesizer` (#928)
Cloned https://github.com/readium/swift-toolkit.git
Revision (git rev-parse @):
e20d5cfc847c2cfa02aaf7be409848b504bd46ca
SUCCESS checkout https://github.com/readium/swift-toolkit.git at develop
========================================
Build
========================================
Selected platform:         android
Swift version:             6.2
Building package at path:  $PWD
https://github.com/readium/swift-toolkit.git
Running build ...
bash -c docker run --pull=always --rm -v "checkouts-54344846-1":/host -w "$PWD" -e JAVA_HOME="/root/.sdkman/candidates/java/current" -e SPI_BUILD="1" -e SPI_PROCESSING="1" registry.gitlab.com/saguaro1/spi-images:android-6.2-latest swift build --swift-sdk aarch64-unknown-linux-android28 2>&1
android-6.2-latest: Pulling from saguaro1/spi-images
Digest: sha256:9e4b64e17859f153444a8085b41803f96a8252f8f76139cd5e69e2540803aa5a
Status: Image is up to date for registry.gitlab.com/saguaro1/spi-images:android-6.2-latest
Fetching https://github.com/readium/ZIPFoundation.git
Fetching https://github.com/marmelroy/Zip.git
Fetching https://github.com/readium/Fuzi.git
Fetching https://github.com/scinfu/SwiftSoup.git
Fetching https://github.com/apple/swift-docc-plugin
[1/845] Fetching fuzi
[10/2845] Fetching fuzi, zip
[1188/5190] Fetching fuzi, zip, swift-docc-plugin
[1541/12322] Fetching fuzi, zip, swift-docc-plugin, swiftsoup
[5232/18282] Fetching fuzi, zip, swift-docc-plugin, swiftsoup, zipfoundation
Fetched https://github.com/apple/swift-docc-plugin from cache (0.52s)
[10166/15937] Fetching fuzi, zip, swiftsoup, zipfoundation
Fetched https://github.com/scinfu/SwiftSoup.git from cache (0.63s)
[7985/8805] Fetching fuzi, zip, zipfoundation
Fetched https://github.com/readium/Fuzi.git from cache (0.72s)
Fetched https://github.com/readium/ZIPFoundation.git from cache (0.72s)
Fetched https://github.com/marmelroy/Zip.git from cache (0.72s)
Computing version for https://github.com/apple/swift-docc-plugin
Computed https://github.com/apple/swift-docc-plugin at 1.5.0 (1.62s)
Fetching https://github.com/swiftlang/swift-docc-symbolkit
[1/3849] Fetching swift-docc-symbolkit
Fetched https://github.com/swiftlang/swift-docc-symbolkit from cache (0.55s)
Computing version for https://github.com/readium/ZIPFoundation.git
Computed https://github.com/readium/ZIPFoundation.git at 3.0.1 (0.70s)
Computing version for https://github.com/marmelroy/Zip.git
Computed https://github.com/marmelroy/Zip.git at 2.1.2 (0.17s)
Computing version for https://github.com/swiftlang/swift-docc-symbolkit
Computed https://github.com/swiftlang/swift-docc-symbolkit at 1.0.0 (0.21s)
Computing version for https://github.com/readium/Fuzi.git
Computed https://github.com/readium/Fuzi.git at 4.0.1 (0.17s)
Computing version for https://github.com/scinfu/SwiftSoup.git
Computed https://github.com/scinfu/SwiftSoup.git at 2.14.3 (0.15s)
Creating working copy for https://github.com/swiftlang/swift-docc-symbolkit
Working copy of https://github.com/swiftlang/swift-docc-symbolkit resolved at 1.0.0
Creating working copy for https://github.com/apple/swift-docc-plugin
Working copy of https://github.com/apple/swift-docc-plugin resolved at 1.5.0
Creating working copy for https://github.com/marmelroy/Zip.git
Working copy of https://github.com/marmelroy/Zip.git resolved at 2.1.2
Creating working copy for https://github.com/readium/ZIPFoundation.git
Working copy of https://github.com/readium/ZIPFoundation.git resolved at 3.0.1
Creating working copy for https://github.com/readium/Fuzi.git
Working copy of https://github.com/readium/Fuzi.git resolved at 4.0.1
Creating working copy for https://github.com/scinfu/SwiftSoup.git
Working copy of https://github.com/scinfu/SwiftSoup.git resolved at 2.14.3
warning: 'zipfoundation': found 1 file(s) which are unhandled; explicitly declare them as resources or exclude from the target
    /host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/Resources/PrivacyInfo.xcprivacy
[1/1] Compiling plugin Swift-DocC Preview
[2/2] Compiling plugin Swift-DocC
Building for debugging...
[2/31] Write sources
[5/31] Copying Info.plist
[7/31] Copying W3CAccessibilityMetadataDisplayGuide.strings
[7/31] Copying Info.plist
[8/31] Copying W3CAccessibilityMetadataDisplayGuide.strings
[12/31] Copying Localizable.strings
[13/31] Write sources
[15/31] Copying Localizable.strings
[15/31] Copying Info.plist
[15/31] Copying Localizable.strings
[17/31] Write sources
[23/31] Copying Info.plist
[24/31] Copying Assets
[25/31] Copying Publications
[26/31] Copying Assets
[27/31] Compiling Minizip ioapi.c
[28/31] Compiling Minizip unzip.c
[29/31] Write swift-version--11D90AFD9DD3AB2.txt
[29/31] Compiling Minizip zip.c
[32/116] Compiling SwiftSoup HtmlTreeBuilder.swift
[33/116] Compiling SwiftSoup HtmlTreeBuilderState.swift
[34/116] Compiling SwiftSoup LRUCache.swift
[35/116] Compiling SwiftSoup Mutex.swift
[36/116] Compiling SwiftSoup Node.swift
[37/116] Compiling SwiftSoup NodeTraversor.swift
[38/116] Compiling SwiftSoup NodeVisitor.swift
[39/116] Compiling SwiftSoup OrderedSet.swift
[40/123] Compiling ReadiumFuzi Queryable.swift
/host/spi-builder-workspace/.build/checkouts/Fuzi/Sources/Document.swift:23:8: error: no such module 'libxml2'
 21 |
 22 | import Foundation
 23 | import libxml2
    |        `- error: no such module 'libxml2'
 24 |
 25 | /// XML document which can be searched and queried.
error: emit-module command failed with exit code 1 (use -v to see invocation)
[41/123] Emitting module ReadiumFuzi
/host/spi-builder-workspace/.build/checkouts/Fuzi/Sources/Document.swift:23:8: error: no such module 'libxml2'
 21 |
 22 | import Foundation
 23 | import libxml2
    |        `- error: no such module 'libxml2'
 24 |
 25 | /// XML document which can be searched and queried.
[42/123] Compiling SwiftSoup Attribute.swift
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/Data+Compression.swift:184:51: error: cannot pass function of type '(UnsafeMutableRawBufferPointer) async throws -> ()' to parameter expecting synchronous function type
182 |             zipCRC32 = inputChunk.crc32(checksum: zipCRC32)
183 |             stream.avail_in = UInt32(inputChunk.count)
184 |             try inputChunk.withUnsafeMutableBytes { (rawBufferPointer) in
    |                                                   `- error: cannot pass function of type '(UnsafeMutableRawBufferPointer) async throws -> ()' to parameter expecting synchronous function type
185 |                 if let baseAddress = rawBufferPointer.baseAddress {
186 |                     let pointer = baseAddress.assumingMemoryBound(to: UInt8.self)
    :
207 |
208 |                     outputChunk.count = bufferSize - Int(stream.avail_out)
209 |                     try await consumer(outputChunk)
    |                         `- note: 'async' inferred from asynchronous operation used here
210 |                 } while stream.avail_out == 0
211 |             }
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/Data+Compression.swift:229:46: error: cannot pass function of type '(UnsafeMutableRawBufferPointer) async throws -> ()' to parameter expecting synchronous function type
227 |             var chunk = try await provider(position, bufferSize)
228 |             position += Int64(chunk.count)
229 |             try chunk.withUnsafeMutableBytes { (rawBufferPointer) in
    |                                              `- error: cannot pass function of type '(UnsafeMutableRawBufferPointer) async throws -> ()' to parameter expecting synchronous function type
230 |                 if let baseAddress = rawBufferPointer.baseAddress, rawBufferPointer.count > 0 {
231 |                     let pointer = baseAddress.assumingMemoryBound(to: UInt8.self)
    :
250 |                         let remainingLength = UInt32(bufferSize) - stream.avail_out
251 |                         outputData.count = Int(remainingLength)
252 |                         try await consumer(outputData)
    |                             `- note: 'async' inferred from asynchronous operation used here
253 |                         if !skipCRC32 { unzipCRC32 = outputData.crc32(checksum: unzipCRC32) }
254 |                     } while stream.avail_out == 0
[43/123] Compiling SwiftSoup AttributeMutationTracking.swift
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/Data+Compression.swift:184:51: error: cannot pass function of type '(UnsafeMutableRawBufferPointer) async throws -> ()' to parameter expecting synchronous function type
182 |             zipCRC32 = inputChunk.crc32(checksum: zipCRC32)
183 |             stream.avail_in = UInt32(inputChunk.count)
184 |             try inputChunk.withUnsafeMutableBytes { (rawBufferPointer) in
    |                                                   `- error: cannot pass function of type '(UnsafeMutableRawBufferPointer) async throws -> ()' to parameter expecting synchronous function type
185 |                 if let baseAddress = rawBufferPointer.baseAddress {
186 |                     let pointer = baseAddress.assumingMemoryBound(to: UInt8.self)
    :
207 |
208 |                     outputChunk.count = bufferSize - Int(stream.avail_out)
209 |                     try await consumer(outputChunk)
    |                         `- note: 'async' inferred from asynchronous operation used here
210 |                 } while stream.avail_out == 0
211 |             }
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/Data+Compression.swift:229:46: error: cannot pass function of type '(UnsafeMutableRawBufferPointer) async throws -> ()' to parameter expecting synchronous function type
227 |             var chunk = try await provider(position, bufferSize)
228 |             position += Int64(chunk.count)
229 |             try chunk.withUnsafeMutableBytes { (rawBufferPointer) in
    |                                              `- error: cannot pass function of type '(UnsafeMutableRawBufferPointer) async throws -> ()' to parameter expecting synchronous function type
230 |                 if let baseAddress = rawBufferPointer.baseAddress, rawBufferPointer.count > 0 {
231 |                     let pointer = baseAddress.assumingMemoryBound(to: UInt8.self)
    :
250 |                         let remainingLength = UInt32(bufferSize) - stream.avail_out
251 |                         outputData.count = Int(remainingLength)
252 |                         try await consumer(outputData)
    |                             `- note: 'async' inferred from asynchronous operation used here
253 |                         if !skipCRC32 { unzipCRC32 = outputData.crc32(checksum: unzipCRC32) }
254 |                     } while stream.avail_out == 0
[44/123] Compiling SwiftSoup ByteSlice.swift
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/Archive+Reading.swift:42:34: error: cannot find 'errno' in scope
 40 |             let destinationRepresentation = fileManager.fileSystemRepresentation(withPath: url.path)
 41 |             guard let destinationFile: FILEPointer = fopen(destinationRepresentation, "wb+") else {
 42 |                 throw POSIXError(errno, path: url.path)
    |                                  `- error: cannot find 'errno' in scope
 43 |             }
 44 |             defer { fclose(destinationFile) }
/root/.swiftpm/swift-sdks/swift-6.2-RELEASE-android-0.1.artifactbundle/swift-android/ndk-sysroot/usr/include/errno.h:58:9: note: macro 'errno' unavailable: structure not supported
56 |  * thread.
57 |  */
58 | #define errno (*__errno())
   |         `- note: macro 'errno' unavailable: structure not supported
59 |
60 | __END_DECLS
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/Archive+Writing.swift:71:34: error: cannot find 'errno' in scope
 69 |             let entryFileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: fileURL.path)
 70 |             guard let entryFile: FILEPointer = fopen(entryFileSystemRepresentation, "rb") else {
 71 |                 throw POSIXError(errno, path: url.path)
    |                                  `- error: cannot find 'errno' in scope
 72 |             }
 73 |             defer { fclose(entryFile) }
/root/.swiftpm/swift-sdks/swift-6.2-RELEASE-android-0.1.artifactbundle/swift-android/ndk-sysroot/usr/include/errno.h:58:9: note: macro 'errno' unavailable: structure not supported
56 |  * thread.
57 |  */
58 | #define errno (*__errno())
   |         `- note: macro 'errno' unavailable: structure not supported
59 |
60 | __END_DECLS
[45/123] Compiling SwiftSoup CharacterExt.swift
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/Archive+Reading.swift:42:34: error: cannot find 'errno' in scope
 40 |             let destinationRepresentation = fileManager.fileSystemRepresentation(withPath: url.path)
 41 |             guard let destinationFile: FILEPointer = fopen(destinationRepresentation, "wb+") else {
 42 |                 throw POSIXError(errno, path: url.path)
    |                                  `- error: cannot find 'errno' in scope
 43 |             }
 44 |             defer { fclose(destinationFile) }
/root/.swiftpm/swift-sdks/swift-6.2-RELEASE-android-0.1.artifactbundle/swift-android/ndk-sysroot/usr/include/errno.h:58:9: note: macro 'errno' unavailable: structure not supported
56 |  * thread.
57 |  */
58 | #define errno (*__errno())
   |         `- note: macro 'errno' unavailable: structure not supported
59 |
60 | __END_DECLS
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/Archive+Writing.swift:71:34: error: cannot find 'errno' in scope
 69 |             let entryFileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: fileURL.path)
 70 |             guard let entryFile: FILEPointer = fopen(entryFileSystemRepresentation, "rb") else {
 71 |                 throw POSIXError(errno, path: url.path)
    |                                  `- error: cannot find 'errno' in scope
 72 |             }
 73 |             defer { fclose(entryFile) }
/root/.swiftpm/swift-sdks/swift-6.2-RELEASE-android-0.1.artifactbundle/swift-android/ndk-sysroot/usr/include/errno.h:58:9: note: macro 'errno' unavailable: structure not supported
56 |  * thread.
57 |  */
58 | #define errno (*__errno())
   |         `- note: macro 'errno' unavailable: structure not supported
59 |
60 | __END_DECLS
[46/123] Compiling SwiftSoup CharacterReader.swift
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/Archive+Reading.swift:42:34: error: cannot find 'errno' in scope
 40 |             let destinationRepresentation = fileManager.fileSystemRepresentation(withPath: url.path)
 41 |             guard let destinationFile: FILEPointer = fopen(destinationRepresentation, "wb+") else {
 42 |                 throw POSIXError(errno, path: url.path)
    |                                  `- error: cannot find 'errno' in scope
 43 |             }
 44 |             defer { fclose(destinationFile) }
/root/.swiftpm/swift-sdks/swift-6.2-RELEASE-android-0.1.artifactbundle/swift-android/ndk-sysroot/usr/include/errno.h:58:9: note: macro 'errno' unavailable: structure not supported
56 |  * thread.
57 |  */
58 | #define errno (*__errno())
   |         `- note: macro 'errno' unavailable: structure not supported
59 |
60 | __END_DECLS
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/Archive+Writing.swift:71:34: error: cannot find 'errno' in scope
 69 |             let entryFileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: fileURL.path)
 70 |             guard let entryFile: FILEPointer = fopen(entryFileSystemRepresentation, "rb") else {
 71 |                 throw POSIXError(errno, path: url.path)
    |                                  `- error: cannot find 'errno' in scope
 72 |             }
 73 |             defer { fclose(entryFile) }
/root/.swiftpm/swift-sdks/swift-6.2-RELEASE-android-0.1.artifactbundle/swift-android/ndk-sysroot/usr/include/errno.h:58:9: note: macro 'errno' unavailable: structure not supported
56 |  * thread.
57 |  */
58 | #define errno (*__errno())
   |         `- note: macro 'errno' unavailable: structure not supported
59 |
60 | __END_DECLS
[47/123] Compiling SwiftSoup DocumentType.swift
[48/123] Compiling SwiftSoup Element.swift
[49/125] Emitting module Zip
[50/125] Compiling Zip ZipUtilities.swift
[51/125] Compiling Zip Zip.swift
/host/spi-builder-workspace/.build/checkouts/Zip/Zip/Zip.swift:209:51: error: cannot find type 'FILE' in scope
207 |
208 |             var writeBytes: UInt64 = 0
209 |             var filePointer: UnsafeMutablePointer<FILE>?
    |                                                   `- error: cannot find type 'FILE' in scope
210 |             filePointer = fopen(fullPath, "wb")
211 |             while filePointer != nil {
[52/125] Compiling Zip QuickZip.swift
error: emit-module command failed with exit code 1 (use -v to see invocation)
[53/125] Compiling SwiftSoup Attributes.swift
[54/125] Compiling SwiftSoup BinarySearch.swift
[55/125] Compiling SwiftSoup BooleanAttribute.swift
[56/125] Emitting module ReadiumZIPFoundation
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/Date+ZIP.swift:77:11: error: cannot find type 'stat' in scope
75 | }
76 |
77 | extension stat {
   |           `- error: cannot find type 'stat' in scope
78 |
79 |     var lastAccessDate: Date {
[57/125] Compiling ReadiumZIPFoundation FileDataSource.swift
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileDataSource.swift:120:9: error: cannot find 'ftruncate' in scope
118 |
119 |     func truncate(to length: UInt64) async throws {
120 |         ftruncate(fileno(file), off_t(length))
    |         `- error: cannot find 'ftruncate' in scope
121 |         try checkNoError()
122 |     }
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileDataSource.swift:144:30: error: cannot find 'errno' in scope
142 |         let fsRepr = FileManager.default.fileSystemRepresentation(withPath: path)
143 |         guard let file = fopen(fsRepr, mode.rawValue) else {
144 |             throw POSIXError(errno, path: path)
    |                              `- error: cannot find 'errno' in scope
145 |         }
146 |         return file
/root/.swiftpm/swift-sdks/swift-6.2-RELEASE-android-0.1.artifactbundle/swift-android/ndk-sysroot/usr/include/errno.h:58:9: note: macro 'errno' unavailable: structure not supported
56 |  * thread.
57 |  */
58 | #define errno (*__errno())
   |         `- note: macro 'errno' unavailable: structure not supported
59 |
60 | __END_DECLS
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift:196:15: error: cannot find 'lchmod' in scope
194 |         let fileSystemRepresentation = self.fileSystemRepresentation(withPath: url.path)
195 |         let modeT = posixPermissions.uint16Value
196 |         guard lchmod(fileSystemRepresentation, mode_t(modeT)) == 0 else {
    |               `- error: cannot find 'lchmod' in scope
197 |             throw POSIXError(errno, path: url.path)
198 |         }
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift:197:30: error: cannot find 'errno' in scope
195 |         let modeT = posixPermissions.uint16Value
196 |         guard lchmod(fileSystemRepresentation, mode_t(modeT)) == 0 else {
197 |             throw POSIXError(errno, path: url.path)
    |                              `- error: cannot find 'errno' in scope
198 |         }
199 |     }
/root/.swiftpm/swift-sdks/swift-6.2-RELEASE-android-0.1.artifactbundle/swift-android/ndk-sysroot/usr/include/errno.h:58:9: note: macro 'errno' unavailable: structure not supported
56 |  * thread.
57 |  */
58 | #define errno (*__errno())
   |         `- note: macro 'errno' unavailable: structure not supported
59 |
60 | __END_DECLS
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift:203:24: error: cannot find 'stat' in scope
201 |     func setSymlinkModificationDate(_ modificationDate: Date, ofItemAtURL url: URL) throws {
202 |         let fileSystemRepresentation = self.fileSystemRepresentation(withPath: url.path)
203 |         var fileStat = stat()
    |                        `- error: cannot find 'stat' in scope
204 |         guard lstat(fileSystemRepresentation, &fileStat) == 0 else {
205 |             throw POSIXError(errno, path: url.path)
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift:204:15: error: cannot find 'lstat' in scope
202 |         let fileSystemRepresentation = self.fileSystemRepresentation(withPath: url.path)
203 |         var fileStat = stat()
204 |         guard lstat(fileSystemRepresentation, &fileStat) == 0 else {
    |               `- error: cannot find 'lstat' in scope
205 |             throw POSIXError(errno, path: url.path)
206 |         }
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift:205:30: error: cannot find 'errno' in scope
203 |         var fileStat = stat()
204 |         guard lstat(fileSystemRepresentation, &fileStat) == 0 else {
205 |             throw POSIXError(errno, path: url.path)
    |                              `- error: cannot find 'errno' in scope
206 |         }
207 |
/root/.swiftpm/swift-sdks/swift-6.2-RELEASE-android-0.1.artifactbundle/swift-android/ndk-sysroot/usr/include/errno.h:58:9: note: macro 'errno' unavailable: structure not supported
56 |  * thread.
57 |  */
58 | #define errno (*__errno())
   |         `- note: macro 'errno' unavailable: structure not supported
59 |
60 | __END_DECLS
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift:215:34: error: cannot find 'errno' in scope
213 |         try array.withUnsafeBufferPointer {
214 |             guard lutimes(fileSystemRepresentation, $0.baseAddress) == 0 else {
215 |                 throw POSIXError(errno, path: url.path)
    |                                  `- error: cannot find 'errno' in scope
216 |             }
217 |         }
/root/.swiftpm/swift-sdks/swift-6.2-RELEASE-android-0.1.artifactbundle/swift-android/ndk-sysroot/usr/include/errno.h:58:9: note: macro 'errno' unavailable: structure not supported
56 |  * thread.
57 |  */
58 | #define errno (*__errno())
   |         `- note: macro 'errno' unavailable: structure not supported
59 |
60 | __END_DECLS
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift:244:72: error: cannot find 'S_IFMT' in scope
242 |         switch osType {
243 |         case .unix, .osx:
244 |             let permissions = mode_t(externalFileAttributes >> 16) & (~S_IFMT)
    |                                                                        `- error: cannot find 'S_IFMT' in scope
245 |             let defaultPermissions = entryType == .directory ? defaultDirectoryPermissions : defaultFilePermissions
246 |             return permissions == 0 ? defaultPermissions : UInt16(permissions)
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift:256:30: error: cannot find 'S_IFREG' in scope
254 |         switch type {
255 |         case .file:
256 |             typeInt = UInt16(S_IFREG)
    |                              `- error: cannot find 'S_IFREG' in scope
257 |         case .directory:
258 |             typeInt = UInt16(S_IFDIR)
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift:258:30: error: cannot find 'S_IFDIR' in scope
256 |             typeInt = UInt16(S_IFREG)
257 |         case .directory:
258 |             typeInt = UInt16(S_IFDIR)
    |                              `- error: cannot find 'S_IFDIR' in scope
259 |         case .symlink:
260 |             typeInt = UInt16(S_IFLNK)
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift:260:30: error: cannot find 'S_IFLNK' in scope
258 |             typeInt = UInt16(S_IFDIR)
259 |         case .symlink:
260 |             typeInt = UInt16(S_IFLNK)
    |                              `- error: cannot find 'S_IFLNK' in scope
261 |         }
262 |         var externalFileAttributes = UInt32(typeInt|UInt16(permissions))
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift:270:24: error: cannot find 'stat' in scope
268 |         let fileManager = FileManager()
269 |         let entryFileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: URL.path)
270 |         var fileStat = stat()
    |                        `- error: cannot find 'stat' in scope
271 |         lstat(entryFileSystemRepresentation, &fileStat)
272 |         let permissions = fileStat.st_mode
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift:271:9: error: cannot find 'lstat' in scope
269 |         let entryFileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: URL.path)
270 |         var fileStat = stat()
271 |         lstat(entryFileSystemRepresentation, &fileStat)
    |         `- error: cannot find 'lstat' in scope
272 |         let permissions = fileStat.st_mode
273 |         return UInt16(permissions)
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift:282:24: error: cannot find 'stat' in scope
280 |         }
281 |         let entryFileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: url.path)
282 |         var fileStat = stat()
    |                        `- error: cannot find 'stat' in scope
283 |         lstat(entryFileSystemRepresentation, &fileStat)
284 | #if os(macOS) || os(iOS) || os(tvOS) || os(visionOS) || os(watchOS)
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift:283:9: error: cannot find 'lstat' in scope
281 |         let entryFileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: url.path)
282 |         var fileStat = stat()
283 |         lstat(entryFileSystemRepresentation, &fileStat)
    |         `- error: cannot find 'lstat' in scope
284 | #if os(macOS) || os(iOS) || os(tvOS) || os(visionOS) || os(watchOS)
285 |         let modTimeSpec = fileStat.st_mtimespec
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift:301:24: error: cannot find 'stat' in scope
299 |         }
300 |         let entryFileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: url.path)
301 |         var fileStat = stat()
    |                        `- error: cannot find 'stat' in scope
302 |         lstat(entryFileSystemRepresentation, &fileStat)
303 |         guard fileStat.st_size >= 0 else {
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift:302:9: error: cannot find 'lstat' in scope
300 |         let entryFileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: url.path)
301 |         var fileStat = stat()
302 |         lstat(entryFileSystemRepresentation, &fileStat)
    |         `- error: cannot find 'lstat' in scope
303 |         guard fileStat.st_size >= 0 else {
304 |             throw CocoaError(.fileReadTooLarge, userInfo: [NSFilePathErrorKey: url.path])
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift:316:24: error: cannot find 'stat' in scope
314 |         }
315 |         let entryFileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: url.path)
316 |         var fileStat = stat()
    |                        `- error: cannot find 'stat' in scope
317 |         lstat(entryFileSystemRepresentation, &fileStat)
318 |         return Entry.EntryType(mode: mode_t(fileStat.st_mode))
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift:317:9: error: cannot find 'lstat' in scope
315 |         let entryFileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: url.path)
316 |         var fileStat = stat()
317 |         lstat(entryFileSystemRepresentation, &fileStat)
    |         `- error: cannot find 'lstat' in scope
318 |         return Entry.EntryType(mode: mode_t(fileStat.st_mode))
319 |     }
[58/125] Compiling ReadiumZIPFoundation FileManager+ZIP.swift
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileDataSource.swift:120:9: error: cannot find 'ftruncate' in scope
118 |
119 |     func truncate(to length: UInt64) async throws {
120 |         ftruncate(fileno(file), off_t(length))
    |         `- error: cannot find 'ftruncate' in scope
121 |         try checkNoError()
122 |     }
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileDataSource.swift:144:30: error: cannot find 'errno' in scope
142 |         let fsRepr = FileManager.default.fileSystemRepresentation(withPath: path)
143 |         guard let file = fopen(fsRepr, mode.rawValue) else {
144 |             throw POSIXError(errno, path: path)
    |                              `- error: cannot find 'errno' in scope
145 |         }
146 |         return file
/root/.swiftpm/swift-sdks/swift-6.2-RELEASE-android-0.1.artifactbundle/swift-android/ndk-sysroot/usr/include/errno.h:58:9: note: macro 'errno' unavailable: structure not supported
56 |  * thread.
57 |  */
58 | #define errno (*__errno())
   |         `- note: macro 'errno' unavailable: structure not supported
59 |
60 | __END_DECLS
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift:196:15: error: cannot find 'lchmod' in scope
194 |         let fileSystemRepresentation = self.fileSystemRepresentation(withPath: url.path)
195 |         let modeT = posixPermissions.uint16Value
196 |         guard lchmod(fileSystemRepresentation, mode_t(modeT)) == 0 else {
    |               `- error: cannot find 'lchmod' in scope
197 |             throw POSIXError(errno, path: url.path)
198 |         }
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift:197:30: error: cannot find 'errno' in scope
195 |         let modeT = posixPermissions.uint16Value
196 |         guard lchmod(fileSystemRepresentation, mode_t(modeT)) == 0 else {
197 |             throw POSIXError(errno, path: url.path)
    |                              `- error: cannot find 'errno' in scope
198 |         }
199 |     }
/root/.swiftpm/swift-sdks/swift-6.2-RELEASE-android-0.1.artifactbundle/swift-android/ndk-sysroot/usr/include/errno.h:58:9: note: macro 'errno' unavailable: structure not supported
56 |  * thread.
57 |  */
58 | #define errno (*__errno())
   |         `- note: macro 'errno' unavailable: structure not supported
59 |
60 | __END_DECLS
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift:203:24: error: cannot find 'stat' in scope
201 |     func setSymlinkModificationDate(_ modificationDate: Date, ofItemAtURL url: URL) throws {
202 |         let fileSystemRepresentation = self.fileSystemRepresentation(withPath: url.path)
203 |         var fileStat = stat()
    |                        `- error: cannot find 'stat' in scope
204 |         guard lstat(fileSystemRepresentation, &fileStat) == 0 else {
205 |             throw POSIXError(errno, path: url.path)
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift:204:15: error: cannot find 'lstat' in scope
202 |         let fileSystemRepresentation = self.fileSystemRepresentation(withPath: url.path)
203 |         var fileStat = stat()
204 |         guard lstat(fileSystemRepresentation, &fileStat) == 0 else {
    |               `- error: cannot find 'lstat' in scope
205 |             throw POSIXError(errno, path: url.path)
206 |         }
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift:205:30: error: cannot find 'errno' in scope
203 |         var fileStat = stat()
204 |         guard lstat(fileSystemRepresentation, &fileStat) == 0 else {
205 |             throw POSIXError(errno, path: url.path)
    |                              `- error: cannot find 'errno' in scope
206 |         }
207 |
/root/.swiftpm/swift-sdks/swift-6.2-RELEASE-android-0.1.artifactbundle/swift-android/ndk-sysroot/usr/include/errno.h:58:9: note: macro 'errno' unavailable: structure not supported
56 |  * thread.
57 |  */
58 | #define errno (*__errno())
   |         `- note: macro 'errno' unavailable: structure not supported
59 |
60 | __END_DECLS
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift:215:34: error: cannot find 'errno' in scope
213 |         try array.withUnsafeBufferPointer {
214 |             guard lutimes(fileSystemRepresentation, $0.baseAddress) == 0 else {
215 |                 throw POSIXError(errno, path: url.path)
    |                                  `- error: cannot find 'errno' in scope
216 |             }
217 |         }
/root/.swiftpm/swift-sdks/swift-6.2-RELEASE-android-0.1.artifactbundle/swift-android/ndk-sysroot/usr/include/errno.h:58:9: note: macro 'errno' unavailable: structure not supported
56 |  * thread.
57 |  */
58 | #define errno (*__errno())
   |         `- note: macro 'errno' unavailable: structure not supported
59 |
60 | __END_DECLS
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift:244:72: error: cannot find 'S_IFMT' in scope
242 |         switch osType {
243 |         case .unix, .osx:
244 |             let permissions = mode_t(externalFileAttributes >> 16) & (~S_IFMT)
    |                                                                        `- error: cannot find 'S_IFMT' in scope
245 |             let defaultPermissions = entryType == .directory ? defaultDirectoryPermissions : defaultFilePermissions
246 |             return permissions == 0 ? defaultPermissions : UInt16(permissions)
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift:256:30: error: cannot find 'S_IFREG' in scope
254 |         switch type {
255 |         case .file:
256 |             typeInt = UInt16(S_IFREG)
    |                              `- error: cannot find 'S_IFREG' in scope
257 |         case .directory:
258 |             typeInt = UInt16(S_IFDIR)
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift:258:30: error: cannot find 'S_IFDIR' in scope
256 |             typeInt = UInt16(S_IFREG)
257 |         case .directory:
258 |             typeInt = UInt16(S_IFDIR)
    |                              `- error: cannot find 'S_IFDIR' in scope
259 |         case .symlink:
260 |             typeInt = UInt16(S_IFLNK)
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift:260:30: error: cannot find 'S_IFLNK' in scope
258 |             typeInt = UInt16(S_IFDIR)
259 |         case .symlink:
260 |             typeInt = UInt16(S_IFLNK)
    |                              `- error: cannot find 'S_IFLNK' in scope
261 |         }
262 |         var externalFileAttributes = UInt32(typeInt|UInt16(permissions))
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift:270:24: error: cannot find 'stat' in scope
268 |         let fileManager = FileManager()
269 |         let entryFileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: URL.path)
270 |         var fileStat = stat()
    |                        `- error: cannot find 'stat' in scope
271 |         lstat(entryFileSystemRepresentation, &fileStat)
272 |         let permissions = fileStat.st_mode
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift:271:9: error: cannot find 'lstat' in scope
269 |         let entryFileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: URL.path)
270 |         var fileStat = stat()
271 |         lstat(entryFileSystemRepresentation, &fileStat)
    |         `- error: cannot find 'lstat' in scope
272 |         let permissions = fileStat.st_mode
273 |         return UInt16(permissions)
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift:282:24: error: cannot find 'stat' in scope
280 |         }
281 |         let entryFileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: url.path)
282 |         var fileStat = stat()
    |                        `- error: cannot find 'stat' in scope
283 |         lstat(entryFileSystemRepresentation, &fileStat)
284 | #if os(macOS) || os(iOS) || os(tvOS) || os(visionOS) || os(watchOS)
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift:283:9: error: cannot find 'lstat' in scope
281 |         let entryFileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: url.path)
282 |         var fileStat = stat()
283 |         lstat(entryFileSystemRepresentation, &fileStat)
    |         `- error: cannot find 'lstat' in scope
284 | #if os(macOS) || os(iOS) || os(tvOS) || os(visionOS) || os(watchOS)
285 |         let modTimeSpec = fileStat.st_mtimespec
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift:301:24: error: cannot find 'stat' in scope
299 |         }
300 |         let entryFileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: url.path)
301 |         var fileStat = stat()
    |                        `- error: cannot find 'stat' in scope
302 |         lstat(entryFileSystemRepresentation, &fileStat)
303 |         guard fileStat.st_size >= 0 else {
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift:302:9: error: cannot find 'lstat' in scope
300 |         let entryFileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: url.path)
301 |         var fileStat = stat()
302 |         lstat(entryFileSystemRepresentation, &fileStat)
    |         `- error: cannot find 'lstat' in scope
303 |         guard fileStat.st_size >= 0 else {
304 |             throw CocoaError(.fileReadTooLarge, userInfo: [NSFilePathErrorKey: url.path])
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift:316:24: error: cannot find 'stat' in scope
314 |         }
315 |         let entryFileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: url.path)
316 |         var fileStat = stat()
    |                        `- error: cannot find 'stat' in scope
317 |         lstat(entryFileSystemRepresentation, &fileStat)
318 |         return Entry.EntryType(mode: mode_t(fileStat.st_mode))
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift:317:9: error: cannot find 'lstat' in scope
315 |         let entryFileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: url.path)
316 |         var fileStat = stat()
317 |         lstat(entryFileSystemRepresentation, &fileStat)
    |         `- error: cannot find 'lstat' in scope
318 |         return Entry.EntryType(mode: mode_t(fileStat.st_mode))
319 |     }
[59/125] Compiling ReadiumFuzi Error.swift
/host/spi-builder-workspace/.build/checkouts/Fuzi/Sources/Document.swift:23:8: error: no such module 'libxml2'
 21 |
 22 | import Foundation
 23 | import libxml2
    |        `- error: no such module 'libxml2'
 24 |
 25 | /// XML document which can be searched and queried.
[60/125] Compiling ReadiumFuzi Node.swift
/host/spi-builder-workspace/.build/checkouts/Fuzi/Sources/Document.swift:23:8: error: no such module 'libxml2'
 21 |
 22 | import Foundation
 23 | import libxml2
    |        `- error: no such module 'libxml2'
 24 |
 25 | /// XML document which can be searched and queried.
[61/125] Compiling ReadiumFuzi Element.swift
/host/spi-builder-workspace/.build/checkouts/Fuzi/Sources/Document.swift:23:8: error: no such module 'libxml2'
 21 |
 22 | import Foundation
 23 | import libxml2
    |        `- error: no such module 'libxml2'
 24 |
 25 | /// XML document which can be searched and queried.
[62/125] Compiling ReadiumFuzi NodeSet.swift
/host/spi-builder-workspace/.build/checkouts/Fuzi/Sources/Document.swift:23:8: error: no such module 'libxml2'
 21 |
 22 | import Foundation
 23 | import libxml2
    |        `- error: no such module 'libxml2'
 24 |
 25 | /// XML document which can be searched and queried.
[63/125] Compiling ReadiumFuzi Document.swift
/host/spi-builder-workspace/.build/checkouts/Fuzi/Sources/Document.swift:23:8: error: no such module 'libxml2'
 21 |
 22 | import Foundation
 23 | import libxml2
    |        `- error: no such module 'libxml2'
 24 |
 25 | /// XML document which can be searched and queried.
[64/125] Compiling ReadiumFuzi Helpers.swift
/host/spi-builder-workspace/.build/checkouts/Fuzi/Sources/Document.swift:23:8: error: no such module 'libxml2'
 21 |
 22 | import Foundation
 23 | import libxml2
    |        `- error: no such module 'libxml2'
 24 |
 25 | /// XML document which can be searched and queried.
[65/125] Compiling ReadiumZIPFoundation Date+ZIP.swift
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/Date+ZIP.swift:77:11: error: cannot find type 'stat' in scope
75 | }
76 |
77 | extension stat {
   |           `- error: cannot find type 'stat' in scope
78 |
79 |     var lastAccessDate: Date {
[66/125] Compiling ReadiumZIPFoundation Entry+Serialization.swift
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/Date+ZIP.swift:77:11: error: cannot find type 'stat' in scope
75 | }
76 |
77 | extension stat {
   |           `- error: cannot find type 'stat' in scope
78 |
79 |     var lastAccessDate: Date {
[67/125] Compiling ReadiumZIPFoundation Entry+ZIP64.swift
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/Entry.swift:29:25: error: binary operator '&' cannot be applied to operands of type 'mode_t' (aka 'UInt32') and 'Int32'
 27 |
 28 |         init(mode: mode_t) {
 29 |             switch mode & S_IFMT {
    |                         |- error: binary operator '&' cannot be applied to operands of type 'mode_t' (aka 'UInt32') and 'Int32'
    |                         `- note: overloads for '&' exist with these partially matching parameter lists: (Int32, Int32), (UInt32, UInt32)
 30 |             case S_IFDIR:
 31 |                 self = .directory
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/Entry.swift:159:92: error: binary operator '&' cannot be applied to operands of type 'mode_t' (aka 'UInt32') and 'Int32'
157 |         switch osType {
158 |         case .unix, .osx:
159 |             let mode = mode_t(self.centralDirectoryStructure.externalFileAttributes >> 16) & S_IFMT
    |                                                                                            |- error: binary operator '&' cannot be applied to operands of type 'mode_t' (aka 'UInt32') and 'Int32'
    |                                                                                            `- note: overloads for '&' exist with these partially matching parameter lists: (Int32, Int32), (UInt32, UInt32)
160 |             switch mode {
161 |             case S_IFREG:
[68/125] Compiling ReadiumZIPFoundation Entry.swift
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/Entry.swift:29:25: error: binary operator '&' cannot be applied to operands of type 'mode_t' (aka 'UInt32') and 'Int32'
 27 |
 28 |         init(mode: mode_t) {
 29 |             switch mode & S_IFMT {
    |                         |- error: binary operator '&' cannot be applied to operands of type 'mode_t' (aka 'UInt32') and 'Int32'
    |                         `- note: overloads for '&' exist with these partially matching parameter lists: (Int32, Int32), (UInt32, UInt32)
 30 |             case S_IFDIR:
 31 |                 self = .directory
/host/spi-builder-workspace/.build/checkouts/ZIPFoundation/Sources/ZIPFoundation/Entry.swift:159:92: error: binary operator '&' cannot be applied to operands of type 'mode_t' (aka 'UInt32') and 'Int32'
157 |         switch osType {
158 |         case .unix, .osx:
159 |             let mode = mode_t(self.centralDirectoryStructure.externalFileAttributes >> 16) & S_IFMT
    |                                                                                            |- error: binary operator '&' cannot be applied to operands of type 'mode_t' (aka 'UInt32') and 'Int32'
    |                                                                                            `- note: overloads for '&' exist with these partially matching parameter lists: (Int32, Int32), (UInt32, UInt32)
160 |             switch mode {
161 |             case S_IFREG:
BUILD FAILURE 6.2 android