This plugin integrates Swift Android Toolchain to Gradle
This plugin require Android NDK r21e and Swift Android Toolchain
Plugin lookup NDK and toolchain by environment variables ANDROID_NDK_HOME
and SWIFT_ANDROID_HOME
or local.properties
in project root
ndk.dir=/path/to/ndk
swift-android.dir=/path/to/toolchain
Plugin build swift code using SwiftPM so you should define you code inside SwiftPM modules. Root module should be located inside app/src/main/swift
. See sample.
- Add the following to your root build.gradle
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.readdle.android.swift:gradle:1.4.0'
}
}
- Add the following to your project build.gradle
apply plugin: 'com.readdle.android.swift'
- Configure build types and arhitecture
buildTypes {
release {
debuggable false
// Build Swift in release mode
jniDebuggable false
// all 4 arhitectures
}
debug {
debuggable true
// Build Swift in debug mode
jniDebuggable true
// only 2 arhitectures
ndk {
abiFilters = ["arm64-v8a", "x86_64"]
}
}
}
- Optionally you can add some extra configuration to your project build.gradle. For example:
swift {
// helpers to forward flags from Swift Package Manager to Swift Compiler Frontend
def passToFrontend = ["-Xswiftc", "-Xfrontend", "-Xswiftc"]
def disableObjcAttr = passToFrontend + "-experimental-disable-objc-attr"
// Enables swift clean when ./gradlew clean invoked. Default true
cleanEnabled false
// Custom swift flags for debug build
debug {
// Set custom preprocessor flags
extraBuildFlags "-Xswiftc", "-DDEBUG"
// Disable @objc and dynamic
extraBuildFlags disableObjcAttr
}
// Custom swift flags for release build
release {
// enable symbols in relase mode
extraBuildFlags "-Xswiftc", "-g"
// Disable @objc and dynamic
extraBuildFlags disableObjcAttr
}
}
In simple cases you can just run ./gradlew assembleDebug
and everything will work.
If your use swift package manager dependencies with external build process you should firstly invoke ./gradlew swiftInstallDebug
Gradle | SwiftPM |
---|---|
./gradlew swiftClean |
swift package clean |
./gradlew swiftBuildDebug |
swift build |
./gradlew swiftBuildRelease |
swift build --configuration release |
./gradlew swiftPackageUpdate |
swift package update |
See sample android app.