Skip to content

Commit 0109382

Browse files
authored
Merge pull request #23 from PureSwift/feature/fix-demo-skip-android
Fix Demo app build script
2 parents d3da0a5 + 276cd53 commit 0109382

File tree

7 files changed

+98
-30
lines changed

7 files changed

+98
-30
lines changed

Demo/app/build.gradle.kts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -52,18 +52,18 @@ android {
5252
)
5353
}
5454
}
55-
/*
56-
// Custom Swift build task
57-
val buildSwift by tasks.registering(Exec::class) {
58-
group = "build"
59-
description = "Build Swift sources"
60-
workingDir("$projectDir")
61-
commandLine("bash", "build-swift.sh")
62-
}
55+
}
6356

64-
tasks.withType<JavaCompile> {
65-
dependsOn(buildSwift)
66-
}*/
57+
// Compile native Swift code for the demo app with `skip android build`.
58+
val buildSwift by tasks.registering(Exec::class) {
59+
group = "build"
60+
description = "Build native Swift sources for Android"
61+
workingDir(rootProject.projectDir)
62+
commandLine("bash", "build-swift.sh")
63+
}
64+
65+
tasks.named("preBuild") {
66+
dependsOn(buildSwift)
6767
}
6868

6969
dependencies {
@@ -86,4 +86,4 @@ dependencies {
8686
androidTestImplementation(libs.androidx.ui.test.junit4)
8787
debugImplementation(libs.androidx.ui.tooling)
8888
debugImplementation(libs.androidx.ui.test.manifest)
89-
}
89+
}

Demo/app/src/main/swift/ListViewAdapter.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
//
77

88
import Foundation
9+
import SwiftJava
10+
import JavaUtil
911
import AndroidKit
1012

1113
@JavaClass("com.pureswift.swiftandroid.ListViewAdapter", extends: ListAdapter.self)

Demo/app/src/main/swift/MainActivity.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
import Foundation
99
import AndroidKit
1010
import JavaLang
11+
#if canImport(Binder)
1112
import Binder
13+
#endif
1214

1315
@JavaClass("com.pureswift.swiftandroid.MainActivity")
1416
open class MainActivity: AndroidApp.Activity {
@@ -64,9 +66,11 @@ private extension MainActivity {
6466
//setRootView()
6567
startEmitterTimer()
6668

69+
#if canImport(Binder)
6770
Task {
6871
printBinderVersion()
6972
}
73+
#endif
7074
}
7175

7276
func runAsync() {
@@ -338,6 +342,7 @@ private extension MainActivity {
338342
.commit()
339343
}
340344

345+
#if canImport(Binder)
341346
private func printBinderVersion() {
342347
// Print Binder version
343348
do {
@@ -348,6 +353,7 @@ private extension MainActivity {
348353
logError("Unable to read binder: \(error)")
349354
}
350355
}
356+
#endif
351357
}
352358

353359
extension MainActivity {

Demo/build-swift.sh

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,32 @@
11
#!/bin/bash
2-
set -e
3-
source swift-define
2+
set -euo pipefail
3+
4+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5+
source "$SCRIPT_DIR/swift-define"
6+
JNI_LIBS_DIR="$SRC_ROOT/app/src/main/jniLibs/$ANDROID_ARCH"
47

58
# Build with SwiftPM
6-
ANDROID_NDK_ROOT="" ANDROID_SDK_VERSION=$ANDROID_SDK_VERSION skip android build --arch $SWIFT_TARGET_ARCH --android-api-level $ANDROID_SDK_VERSION
9+
ANDROID_NDK_ROOT="" ANDROID_SDK_VERSION="$ANDROID_SDK_VERSION" skip android build --arch "$SWIFT_TARGET_ARCH" --android-api-level "$ANDROID_SDK_VERSION"
710

811
# Copy compiled Swift package
9-
mkdir -p $SRC_ROOT/app/src/main/jniLibs/$ANDROID_ARCH/
10-
cp -rf $SWIFT_PACKAGE_SRC/.build/$SWIFT_TARGET_NAME/debug/libSwiftAndroidApp.so \
11-
$SRC_ROOT/app/src/main/jniLibs/$ANDROID_ARCH/
12+
mkdir -p "$JNI_LIBS_DIR/"
13+
cp -f "$SWIFT_PACKAGE_SRC/.build/$SWIFT_TARGET_NAME/debug/libSwiftAndroidApp.so" "$JNI_LIBS_DIR/"
14+
15+
# Copy Swift runtime shared libraries required by libSwiftAndroidApp.so.
16+
if [[ -d "$SWIFT_ANDROID_RUNTIME_LIBS" ]]; then
17+
shopt -s nullglob
18+
for so in "$SWIFT_ANDROID_RUNTIME_LIBS"/*.so; do
19+
cp -f "$so" "$JNI_LIBS_DIR/"
20+
done
21+
shopt -u nullglob
22+
fi
23+
24+
# Copy SwiftJava helper library when available.
25+
if [[ -f "$SWIFT_PACKAGE_SRC/.build/$SWIFT_TARGET_NAME/debug/libSwiftJava.so" ]]; then
26+
cp -f "$SWIFT_PACKAGE_SRC/.build/$SWIFT_TARGET_NAME/debug/libSwiftJava.so" "$JNI_LIBS_DIR/"
27+
fi
28+
29+
# Copy C++ runtime from Android sysroot.
30+
if [[ -f "$SWIFT_ANDROID_SYSROOT/usr/lib/$ANDROID_LIB/libc++_shared.so" ]]; then
31+
cp -f "$SWIFT_ANDROID_SYSROOT/usr/lib/$ANDROID_LIB/libc++_shared.so" "$JNI_LIBS_DIR/"
32+
fi

Demo/setup.sh

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
#!/bin/bash
2-
set -e
3-
source swift-define
2+
set -euo pipefail
3+
4+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5+
source "$SCRIPT_DIR/swift-define"
6+
JNI_LIBS_DIR="$SRC_ROOT/app/src/main/jniLibs/$ANDROID_ARCH"
47

58
# Install macOS dependencies
69
if [[ $OSTYPE == 'darwin'* ]]; then
@@ -12,11 +15,38 @@ if [[ $OSTYPE == 'darwin'* ]]; then
1215
fi
1316

1417
# Copy Swift libraries
15-
rm -rf $SRC_ROOT/app/src/main/jniLibs/$ANDROID_ARCH/
16-
mkdir -p $SRC_ROOT/app/src/main/jniLibs/$ANDROID_ARCH/
17-
cp -rf $SWIFT_ANDROID_LIBS/*.so \
18-
$SRC_ROOT/app/src/main/jniLibs/$ANDROID_ARCH/
18+
rm -rf "$JNI_LIBS_DIR/"
19+
mkdir -p "$JNI_LIBS_DIR/"
20+
21+
copied_swift_libs=0
22+
if [[ -d "$SWIFT_ANDROID_RUNTIME_LIBS" ]]; then
23+
shopt -s nullglob
24+
for so in "$SWIFT_ANDROID_RUNTIME_LIBS"/*.so; do
25+
cp -f "$so" "$JNI_LIBS_DIR/"
26+
copied_swift_libs=1
27+
done
28+
shopt -u nullglob
29+
fi
30+
31+
# Fallback for newer Skip/Swift SDK layouts where runtime libs are emitted into `.build`.
32+
if [[ $copied_swift_libs -eq 0 && -d "$SWIFT_PACKAGE_SRC/.build/$SWIFT_TARGET_NAME/debug" ]]; then
33+
shopt -s nullglob
34+
for so in "$SWIFT_PACKAGE_SRC/.build/$SWIFT_TARGET_NAME/debug"/libSwift*.so; do
35+
cp -f "$so" "$JNI_LIBS_DIR/"
36+
copied_swift_libs=1
37+
done
38+
shopt -u nullglob
39+
fi
40+
41+
if [[ $copied_swift_libs -eq 0 ]]; then
42+
echo "Warning: No Swift runtime libraries found to copy."
43+
fi
44+
1945
# Copy C stdlib
20-
cp -rf $SWIFT_ANDROID_SYSROOT/usr/lib/$ANDROID_LIB/libc++_shared.so \
21-
$SRC_ROOT/app/src/main/jniLibs/$ANDROID_ARCH/
46+
if [[ -f "$SWIFT_ANDROID_SYSROOT/usr/lib/$ANDROID_LIB/libc++_shared.so" ]]; then
47+
cp -f "$SWIFT_ANDROID_SYSROOT/usr/lib/$ANDROID_LIB/libc++_shared.so" \
48+
"$JNI_LIBS_DIR/"
49+
else
50+
echo "Warning: libc++_shared.so not found at $SWIFT_ANDROID_SYSROOT/usr/lib/$ANDROID_LIB/libc++_shared.so"
51+
fi
2252
echo "Copied Swift libraries"

Demo/swift-define

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# Configurable
2-
SRC_ROOT="${SRC_ROOT:=$(pwd)}"
2+
SWIFT_DEFINE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
3+
SRC_ROOT="${SRC_ROOT:=$SWIFT_DEFINE_DIR}"
34
SWIFT_TARGET_ARCH="${SWIFT_TARGET_ARCH:=aarch64}"
45
ANDROID_ARCH="${ANDROID_ARCH:=arm64-v8a}"
56
ANDROID_LIB="${ANDROID_LIB:=aarch64-linux-android}"
@@ -11,12 +12,17 @@ SWIFT_VERSION_SHORT=6.2.3
1112
SWIFT_VERSION=swift-$SWIFT_VERSION_SHORT-RELEASE
1213
SWIFT_TARGET_NAME=$SWIFT_TARGET_ARCH-unknown-linux-android$ANDROID_SDK_VERSION
1314
XCTOOLCHAIN=/Library/Developer/Toolchains/$SWIFT_VERSION.xctoolchain
14-
SWIFT_ARTIFACT_BUNDLE=swift-$SWIFT_VERSION_SHORT-RELEASE-android-0.1.artifactbundle
15+
SWIFT_ARTIFACT_BUNDLE="${SWIFT_ARTIFACT_BUNDLE:=swift-$SWIFT_VERSION_SHORT-RELEASE_android.artifactbundle}"
16+
SWIFT_SDKS_ROOT="${SWIFT_SDKS_ROOT:=$HOME/Library/org.swift.swiftpm/swift-sdks}"
17+
if [[ ! -d "$SWIFT_SDKS_ROOT/$SWIFT_ARTIFACT_BUNDLE" ]]; then
18+
SWIFT_SDKS_ROOT="$HOME/.swiftpm/swift-sdks"
19+
fi
1520

1621
# Paths
1722
SWIFT_SDK=swift-$SWIFT_VERSION_SHORT-release-android-$ANDROID_SDK_VERSION-sdk
18-
SWIFT_ANDROID_SYSROOT=~/.swiftpm/swift-sdks/$SWIFT_ARTIFACT_BUNDLE/swift-android/ndk-sysroot
19-
SWIFT_ANDROID_LIBS=~/.swiftpm/swift-sdks/$SWIFT_ARTIFACT_BUNDLE/swift-android/swift-resources/usr/lib/swift-$SWIFT_TARGET_ARCH/android/
23+
SWIFT_ANDROID_SYSROOT="$SWIFT_SDKS_ROOT/$SWIFT_ARTIFACT_BUNDLE/swift-android/ndk-sysroot"
24+
SWIFT_ANDROID_LIBS="$SWIFT_SDKS_ROOT/$SWIFT_ARTIFACT_BUNDLE/swift-android/swift-resources/usr/lib/swift-$SWIFT_TARGET_ARCH"
25+
SWIFT_ANDROID_RUNTIME_LIBS="$SWIFT_ANDROID_LIBS/android"
2026
SWIFT_PACKAGE_SRC=$SRC_ROOT
2127
JAVA_HOME=$SWIFT_ANDROID_SYSROOT/usr
2228

Sources/AndroidKit/AndroidKit.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ import AndroidNDK
1414
@_exported import JavaNet
1515
@_exported import JavaUtilFunction
1616
@_exported import JavaLang
17+
@_exported import JavaLangUtil
18+
@_exported import JavaLangIO
19+
@_exported import JavaLangNet
1720
@_exported import AndroidOS
1821
@_exported import AndroidContent
1922
@_exported import AndroidUtil

0 commit comments

Comments
 (0)