Skip to content

Android

Slint 支持用 Rust 和 C++ 构建 Android 应用程序。 另请参见 Rust API 文档中的 android 模块。

Slint 使用 android-activity crate 作为与 操作系统交互的接口,它以 slint::android::android_activity 的形式重新导出。

要开始,请遵循以下步骤:

首先,你的项目需要是一个 library crate。将以下内容添加到你的 Cargo.toml:

[lib]
crate_type = ["cdylib"]
toml

选择你想使用的 android-activity 版本:

[dependencies]
slint = { version = "1.18.0", features = ["backend-android-activity-06"] }
toml

无条件启用这个 feature 是安全的。

然后,在你的 lib.rs 中添加这个函数:

#[cfg(target_os = "android")]
#[unsafe(no_mangle)]
fn android_main(app: slint::android::AndroidApp) {
slint::android::init(app).unwrap();
let main_window = ...; // window generated by the Slint macros
main_window.run().unwrap();
}
rs

你还可以通过把对 slint::android::init 的调用替换为 slint::android::init_with_event_listener, 来添加一个 Android 事件 (android_activity::PollEvent) 监听器。

接下来,我们将设置用于构建项目的环境。

Android 开发工作流以 adb 命令行工具为中心。用它连接到 Android 设备和模拟器以上传并运行应用程序。

安装 Android 开发环境最简单的方式是下载并安装 Android Studio。在设置面板中,导航到 Android SDK 页面并安装你需要的所有 SDK 版本。我们建议使用可用的最新版本, 因为它可以配置为向后兼容更早版本的 Android。SDK Manager 可在设置的“Languages & Frameworks” > “Android SDK”中找到。

Android SDK Manager 截图

还要注意顶部的 SDK 位置;如果构建工具无法自动检测到,可能必须将此路径用于 ANDROID_HOME 环境 变量。

在 SDK Manager 中,还要安装:

  • Android NDK(在“SDK Tools”选项卡下)
  • CMake(在“SDK Tools”选项卡下)

设置这些环境变量,以便构建能够找到 NDK:

Terminal window
export ANDROID_HOME=$HOME/Android/Sdk
export ANDROID_NDK_ROOT=$ANDROID_HOME/ndk/<version>
bash

Slint 是用 Rust 编写的,因此需要 Rust 工具链才能为 Android 编译。 通过 Rust 入门指南安装 Rust,然后添加 Android 目标:

Terminal window
rustup target add aarch64-linux-android
bash

如果你需要支持其他 ABI,请添加其他目标:

Terminal window
rustup target add armv7-linux-androideabi # armeabi-v7a
rustup target add x86_64-linux-android # x86_64 (emulator)
rustup target add i686-linux-android # x86 (emulator)
bash

将 platform-tools 目录添加到你的 PATH,以便 adb 工具能在命令行 中使用。

要获取当前连接到你的机器的 Android 设备、模拟器和仿真器列表,请运行

Terminal window
adb devices
bash

你可以通过以下方式连接到网络上的物理设备

Terminal window
adb connect <host>
bash

host 是设备的 IP 地址;该设备必须已启用开发模式。

我们建议先使用虚拟设备进行开发,因为它能加快开发周期。 不过,最终你还必须在真实设备上测试,以确保界面在触摸屏上可用, 并验证外观和手感。

要创建并运行虚拟设备,请使用 Android Studio 中提供的 Virtual Device Manager。你 可以从其主界面的“More Actions”下打开它:

Virtual Device Manager 菜单项截图

你可以在这里创建任意数量、配置各不相同的设备:

Virtual Device Manager 截图

一个好的做法是准备一台使用你的应用所支持的最低 API 级别的设备,以及 另一台使用最新版本的设备,以确保它能在两者上运行。

运行中的虚拟设备会自动连接到 adb。

根据你选择的设备模板,这里创建的虚拟设备默认可能使用 硬件键盘,这不利于测试你的应用程序。

要解决这个问题,请点击管理器中设备旁边的三个竖点打开菜单, 选择“Show on disk”。在显示的目录中,用文本编辑器打开文件 config.ini。 找到 hw.keyboard=yes 这一行,将其改为 hw.keyboard=no,然后 保存文件。

接下来我们选择触控笔:

触控笔支持截图

在键盘设置中禁用触控笔输入:

键盘设置截图

在列表中选择“Write in textfields”,然后禁用该功能。这会启用 常规的虚拟键盘。

在你的 lib.rs 中定义主函数和 UI:

#[cfg(target_os = "android")]
#[unsafe(no_mangle)]
fn android_main(app: slint::android::AndroidApp) {
slint::android::init(app).unwrap();
let main_window = MainWindow::new().unwrap();
main_window.run().unwrap();
}
rs

你还可以通过把对 slint::android::init 的调用替换为 slint::android::init_with_event_listener, 来添加一个 Android 事件 (android_activity::PollEvent) 监听器。

Slint 不要求特定的工具来构建、上传和运行用 Rust 编写的 Android 应用。 应用的 activity 必须是 android.app.NativeActivity 或其子类, 因为那是 Slint 的 Android 后端所支持的 activity 类型。 本节介绍一些可以打包此类应用的常用工具。 它们都不需要 Android Studio。

cargo-apk2 会从你的 Cargo.toml 构建、签名并安装 APK, 还可以将 Java 和 Kotlin 源代码编译进去。 安装它,并在已连接的设备上运行你的应用:

Terminal window
cargo install cargo-apk2
cargo apk2 run --target aarch64-linux-android --lib
bash

在你的 Cargo.toml 中声明 NativeActivity:

[[package.metadata.android.application.activity]]
name = "android.app.NativeActivity"
[[package.metadata.android.application.activity.meta_data]]
name = "android.app.lib_name"
[[package.metadata.android.application.activity.intent_filter]]
actions = ["android.intent.action.VIEW", "android.intent.action.MAIN"]
categories = ["android.intent.category.LAUNCHER"]
toml

在你 Cargo.toml 的 [package.metadata.android] 表中设置额外的清单值。 可用的键请参见 cargo-apk2 README。

要构建 release APK,请运行 cargo apk2 build --target aarch64-linux-android --lib --release。 APK 随后位于 target/release/apk/。

cargo-apk 会根据你的 Cargo.toml 生成 Android 清单, 包括 NativeActivity。 安装它,并在已连接的设备上运行你的应用:

Terminal window
cargo install cargo-apk
cargo apk run --target aarch64-linux-android --lib
bash

在你 Cargo.toml 的 [package.metadata.android] 表中设置额外的清单值。 可用的键请参见 cargo-apk README。

要构建 release APK,请运行 cargo apk build --target aarch64-linux-android --lib --release。 APK 随后位于 target/release/apk/。

cargo-ndk 只构建原生库。 然后由 Gradle 或 Android Studio 像打包任何其他 Android 应用一样打包它。 使用这个方案来添加 Java 或 Kotlin 代码,或为 Google Play 构建 Android App Bundle(AAB)。

将该库构建到你的 Gradle 项目的 jniLibs 目录中:

Terminal window
cargo install cargo-ndk
cargo ndk -t arm64-v8a -o app/src/main/jniLibs build --release --lib
bash

在 AndroidManifest.xml 中声明一个 NativeActivity,并把 android.app.lib_name 设置为你的库名。 本页的 C++ 选项卡展示了这样一个清单, 而 Slint Viewer 是一个完整的示例。

xbuild 可以构建 Android 和 iOS。 crates.io 上的发布版本(0.2.0)已经过时,因此请安装 git 版本:

Terminal window
cargo install --git https://github.com/rust-mobile/xbuild.git
bash

命令行工具名为 x。 用 x devices 列出已连接的设备。 对于 Android 设备,它会与 adb 通信,因此你用 adb 连接的设备也会出现在这里。

要构建你的项目,请导航到包含 Cargo.toml 的目录并运行

Terminal window
x run --device <id>
bash

其中 <id> 在 x devices 中显示为最左列,对于虚拟 Android 设备来说类似于 adb:emulator-1234。 要重新编译并测试更改,请按 ctrl-c 并再次运行相同的命令。

如果 x run 不起作用,请运行 x doctor 检查 xbuild 是否找到了它需要的所有工具。

要构建用于分发的 APK,请使用类似这样的命令

Terminal window
x build --platform android --arch arm64 --format apk --release
bash

APK 随后位于 target/x/release/android/<name>.apk。 运行 x build --help 查看其他格式。


© 2026 SixtyFPS GmbH