Skip to content

Commit ad2821c

Browse files
authored
Add Android blog post answering common questions and sharing more links and info (#1249)
1 parent d98547e commit ad2821c

File tree

2 files changed

+144
-0
lines changed

2 files changed

+144
-0
lines changed

_data/authors.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,10 @@ parkera:
243243
github: parkera
244244
about: "Tony Parker manages teams at Apple working on Foundation, Swift packages, and the Swift Standard Library."
245245

246+
android-workgroup:
247+
name: The Android workgroup
248+
about: "The Android workgroup works toward furthering Swift on Android."
249+
246250
diversity-workgroup:
247251
name: The Diversity in Swift workgroup
248252
about: "The Diversity in Swift workgroup is a group of volunteers working to make our community more approachable and inclusive."
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
---
2+
layout: new-layouts/post
3+
published: true
4+
date: 2025-12-18 10:00:00
5+
title: "Exploring the Swift SDK for Android"
6+
author: android-workgroup
7+
category: "Developer Tools"
8+
---
9+
10+
Since the announcement of [the preview Swift SDK for Android](/blog/nightly-swift-sdk-for-android/),
11+
the Android workgroup has seen a lot of interest in how it works and what's next.
12+
Please read on for some answers to common questions about the technology and its
13+
future, and try out the new Swift 6.3 SDK nightly previews.
14+
15+
## How Swift works on Android
16+
17+
Swift compiles directly to native machine code on Android, the same way it does on most
18+
other platforms. This approach produces similar performance to C and C++ code built using the
19+
Android Native Development Kit (NDK), while achieving a happier balance between performance,
20+
safety, and usability. To make this possible, Swift apps on Android bundle a native runtime
21+
that implements many of its features, including its standard library and core
22+
libraries, like Dispatch and [Foundation](/blog/foundation-preview-now-available/).
23+
24+
However, since most Android APIs are only made available through Java and Kotlin,
25+
Swift must call into the Android Runtime (ART); that's where the [Java interoperability
26+
project's](https://github.com/swiftlang/swift-java) `jextract` and `wrap-java`
27+
tools come in. These tools automatically create bindings that enable you to call
28+
Swift from Java or go the other way using the Java Native Interface (JNI), which
29+
allows Swift to seamlessly integrate with the Android platform.
30+
31+
The [`jextract` tool gained a JNI mode this summer](/blog/gsoc-2025-showcase-swift-java/):
32+
you can watch its author Mads Odgaard's [Server-Side Swift Conference talk](https://www.youtube.com/watch?v=tOH6V1IvTAc)
33+
and try out the [example weather app](https://github.com/swiftlang/swift-android-examples/tree/main/swift-java-weather-app) he submitted in the Android examples repository.
34+
35+
## Swift on Android in production
36+
37+
While work is still ongoing on official Java interoperability, Android apps built using Swift
38+
have been in production for many years employing homegrown Java interop, with these apps
39+
collectively downloaded millions of times. Here are some notable examples:
40+
41+
- [Spark](https://play.google.com/store/apps/details?id=com.readdle.spark) - A popular email client using Swift to share code between mobile iOS/Android and desktop macOS/Windows versions
42+
- [flowkey](https://play.google.com/store/apps/details?id=com.flowkey.app) - An interactive piano learning app built with Swift for Android for almost a decade
43+
- [MediQuo](https://play.google.com/store/apps/details?id=com.mediquo.main) - A healthcare app leveraging Swift for cross-platform development
44+
- [Naturitas](https://play.google.com/store/apps/details?id=com.naturitas.android) - An organic products marketplace running Swift in production
45+
46+
## Ongoing work
47+
48+
Grassroots community efforts to run Swift on Android [began as soon as the language source was opened in 2015](https://lists.swift.org/pipermail/swift-dev/Week-of-Mon-20151207/000171.html),
49+
and continue to this day. The [Android project board](https://github.com/orgs/swiftlang/projects/17) lists areas the workgroup determines important,
50+
such as easy debugging, now a high priority for us. While it [may work for small examples](https://github.com/swiftlang/llvm-project/issues/10831),
51+
we need to expand and test it more and make it easy to configure and access. That will likely
52+
mean tying the debugger and Swift Language Server Protocol tool, [sourcekit-lsp](/blog/gsoc-2025-showcase-code-completion/),
53+
into Integrated Development Environments (IDEs) like [Visual Studio Code](/blog/gsoc-2025-showcase-swiftly-support-in-vscode/)
54+
and Android Studio, another issue on our board.
55+
56+
[An Android workflow](https://github.com/swiftlang/github-workflows/pull/172) was
57+
added to the official Swift workflows for GitHub months ago, allowing you to easily
58+
try building your Swift packages with the Swift SDK for Android, and work is underway to let you
59+
[run your tests in an Android emulator](https://github.com/swiftlang/github-workflows/pull/215)
60+
too.
61+
62+
We are looking to onboard more contributors and have set up a [video call this
63+
weekend](https://forums.swift.org/t/swift-on-android-new-contributors-call/83729) to discuss getting started.
64+
We hope to make these contributor calls a recurring event moving forward, as more people
65+
pitch in to improve these Swift tools themselves.
66+
67+
## Sharing Swift across platforms: logic vs UI
68+
69+
Swift allows you to target many platforms with the same business logic, and Swift
70+
on Android expands that much more.
71+
As we shared in [our draft vision document](https://github.com/swiftlang/swift-evolution/blob/807b844be42db582e434d1667fc907ae7a7a8775/visions/android.md),
72+
a prominent use case we’re focused on is sharing core business logic, algorithms, and data models across applications.
73+
The workgroup is not providing a single GUI solution, however a number of nascent community projects have approached the challenge in different ways.
74+
75+
Our [recent post in the Swift forums](https://forums.swift.org/t/swift-gui-toolkits-for-android/83337)
76+
lists a handful of popular and in-progress options.
77+
While the workgroup has not validated the claims on individual projects, we plan to add
78+
more info on using compatible GUI tools with the Swift SDK for Android in the coming months.
79+
80+
## Android API versioning
81+
82+
Until recently, Swift on Android did not support targeting multiple Android API levels
83+
in the same app, but recent preview releases bring the familiar `@available`
84+
attribute and `#available` runtime check that you know from Apple platforms to Android:
85+
86+
```swift
87+
#if canImport(Android)
88+
import Android
89+
import Dispatch
90+
#endif
91+
92+
@available(Android 33, *)
93+
func backtrace() {
94+
withUnsafeTemporaryAllocation(of: UnsafeMutableRawPointer.self, capacity: 1) { address in
95+
_ = backtrace(address.baseAddress!, 1)
96+
}
97+
}
98+
99+
@main
100+
struct ExecutableDemo {
101+
static func main() {
102+
#if os(Android)
103+
print("Hello from Android API 28 or later")
104+
if #available(Android 33, *) {
105+
// The following code is only run on Android 33+ devices.
106+
backtrace()
107+
print("Hello from Android API 33+")
108+
}
109+
#endif
110+
}
111+
}
112+
```
113+
Try this new feature on Android and let us know how it works for you.
114+
115+
## Learn from the community
116+
117+
Those using Swift on Android for many years have been sharing their experiences,
118+
as founding contributors like [Readdle](https://readdle.com/blog/swift-for-android-our-experience-and-tools)
119+
and [flowkey](https://medium.com/@ephemer/why-we-put-an-app-in-the-android-play-store-using-swift-96ac87c88dfc)
120+
have written about their work for the last decade.
121+
122+
The Left Bit's Pierluigi Cifani [recently wrote about their experiences](https://forums.swift.org/t/thoughts-on-swift-for-android/80961),
123+
gave [a great talk at NSSpain 2025 a couple months ago](https://youtu.be/EIGl6GOo210),
124+
and was [interviewed by Swift Toolkit last month](https://www.swifttoolkit.dev/posts/dc-pier).
125+
126+
A [community member recently contributed an example app](https://github.com/swiftlang/swift-android-examples/tree/main/hello-cpp-swift)
127+
that builds C++ using CMake and links it with Swift, using Swift's automated JNI bridging
128+
to Java instead.
129+
130+
## Swift 6.3 SDK nightly previews
131+
132+
Finally, we are happy to announce that [an official Swift 6.3 SDK CI](https://ci.swift.org/job/oss-swift-6.3-package-swift-sdk-for-android/)
133+
has been set up, and it is producing [nightly preview releases of the Swift 6.3 SDK for Android](/install/macos/#swift-sdk-buindles-dev).
134+
Please follow the [Getting Started guide](/documentation/articles/swift-sdk-for-android-getting-started.html)
135+
to install and use it.
136+
137+
Swift on Android has been a community effort for the last decade, growing
138+
from that initial patch to apps in production and an active group of developers.
139+
Try out the new preview releases of the Swift 6.3 SDK for Android and help us
140+
make it even better!

0 commit comments

Comments
 (0)