UIKit-cross-platform 快速上手指南:5 步把现有 iOS 项目跑到 Android 模拟器

📅 发布时间:2026/8/21 12:43:20
UIKit-cross-platform 快速上手指南:5 步把现有 iOS 项目跑到 Android 模拟器 UIKit-cross-platform 快速上手指南5 步把现有 iOS 项目跑到 Android 模拟器【免费下载链接】UIKit-cross-platformCross-platform Swift implementation of UIKit, mostly for Android项目地址: https://gitcode.com/gh_mirrors/ui/UIKit-cross-platformUIKit-cross-platform是一个用 Swift 实现的跨平台 UI 框架它的目标很直接让你为 iOS 写的 UIKit 代码几乎原样跑在 Android 上同时保留原生性能和原生观感。也就是说你不再需要为 iOS 和 Android 各写一套界面也不用为了跨平台去牺牲性能换 React Native 这类方案。这篇UIKit-cross-platform 快速上手指南就用 5 个清晰步骤带你亲手把一个现有 iOS 项目跑到 Android 模拟器里全程适合新手跟做。 先花 30 秒搞懂它是怎么做到的UIKit-cross-platform 的渲染底层依赖SDL_gpu最终翻译成 OpenGL 指令字体渲染走SDL_ttf在 Android 上Swift 代码由 CMake Ninja 编译成原生库再通过JNIJava Native Interface被 Kotlin/Java 层调用。架构细节可以看 docs/ARCHITECTURE.md以下路径均为纯文本提示方便你在仓库里定位。它对UIView、UILabel、UIButton、UIAlertController、UINavigationController等常用 API 都有实现所以你的 iOS 界面代码基本不用大改。先确认你已经实现的功能在覆盖范围内再去动手迁移会更稳。 第 1 步准备好本地环境一次装好后面不折腾在开始跑模拟器之前先检查这几样工具是否就绪工具版本要求用途CMake 3.16编译 Swift 原生代码Ninja最新稳定版构建系统Android Studio最新稳定版打开 Android 工程并运行Android SDKAPI Level 29 及以上Android 运行环境NDK27.1.12297006交叉编译 Swift 到原生库macOS 上装前两个最简单的方式brew install cmake brew install ninja然后在 Android Studio 的SDK Manager里勾选对应 API Level、Build Tools 和 NDK 版本。装好 NDK 后建议再建一个软链接让工程能稳定找到它例如链接到/usr/local/ndk/27.1.12297006/。 第 2 步改造 iOS 工程让它“无场景化”UIKit-cross-platform 目前不支持UIScene生命周期所以需要把工程改回传统的 AppDelegate 启动方式删除Main.storyboard并移除Info.plist里的对应引用移除Info.plist中整个Application Scene Manifest配置块同时删掉SceneDelegate.swift改AppDelegate.swift去掉UIApplicationMain注解、让类变成final在application(_:didFinishLaunchingWithOptions:)里手动创建UIWindow和根控制器。改造后的核心长这样完整说明在 docs/PREPARE_IOS_PROJECT.md// UIApplicationMain final class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) - Bool { window UIWindow() window?.rootViewController ViewController() window?.makeKeyAndVisible() return true } }再新建一个main.swift手动调用入口import UIKit import func Foundation.NSStringFromClass _ UIApplicationMain(CommandLine.argc, CommandLine.unsafeArgv, nil, NSStringFromClass(AppDelegate.self))这样改完iOS 端照常能跑Android 端也具备了标准启动入口。 第 3 步把 UIKit-cross-platform 接进你的项目推荐用git submodule的方式把它放进工程的UIKit子目录并同步拉取全部子依赖。在项目根目录执行git submodule add gitgithub.com:flowkey/UIKit-cross-platform.git UIKit git submodule update --init --recursive UIKit如果只是快速体验也可以直接 clone 整个仓库到本地备用git clone https://gitcode.com/gh_mirrors/ui/UIKit-cross-platform仓库里的samples/getting-started/DemoApp/是一个完整的示例AppDelegate.swift中创建UINavigationController并挂上ViewController的写法就是你接入后工程应有的样子。 第 4 步一键生成 Android 工程这是最省心的环节。UIKit-cross-platform 自带一个脚手架脚本会自动读取你 Xcode 工程里的PRODUCT_BUNDLE_IDENTIFIER生成配套的 Android 工程、CMakeLists 和androidMain.swift这个文件负责通过 JNI 把AppDelegate注册给 Android 端。在 iOS 工程根目录执行./UIKit/create-android-project脚本会完成这些事生成android/目录Gradle 工程 MainActivity生成根目录CMakeLists.txt把 Swift 源文件编译为共享库可参考samples/getting-started/CMakeLists.txt自动替换包名、应用名把路径指向你的UIKit/子目录在你的源码目录放置androidMain.swift实现JNI_OnLoad注册 AppDelegate。全部完成会输出Done.此时你的 iOS 工程已经具备双端构建能力。▶️ 第 5 步在 Android Studio 里一键跑上模拟器用 Android Studio 打开刚才生成的android/文件夹等待 Gradle 同步完成首次会编译 Swift 原生库耐心等几分钟创建或启动一个Android 模拟器AVDAPI Level 不低于 29点击工具栏的Run ▶按钮选择模拟器设备看到 App 界面出现的那一刻你的iOS 代码就成功跑在 Android 上了。如果构建报错优先按这份清单排查NDK 路径没配对 → 检查软链接和local.properties里的ndk.dirCMake/Ninja 版本过低 → 升级到 3.16 以上编译报错缺 Swift 源文件 → 确认CMakeLists.txt里的源文件列表包含了你的全部.swift文件写法可参考samples/getting-started/CMakeLists.txt中的add_library与target_link_libraries模拟器黑屏 → 确认 API Level 与 SDL 渲染初始化是否正常。更详细的坑位整理在 docs/FAQs.md遇到问题先去翻一遍能省下不少时间。 写在最后这套方案的适用场景如果你的目标是一套 Swift/UIKit 代码同时交付 iOS 和 Android、并且看重原生性能与原生交互UIKit-cross-platform 是很值得尝试的路线。它的 API 直接对齐 Apple 官方 UIKit 文档学习成本低渲染走 OpenGL动画和列表性能都有保障。测试体系也比较完整UIKitTests/下覆盖了动画、手势、按钮、滚动等核心模块社区贡献指南在 docs/CONTRIBUTING.md。今天这 5 步小结一下装环境 → 改 AppDelegate → 接入框架 → 跑生成脚本 → 模拟器运行。跟着走一遍你的 iOS 项目就能在 Android 模拟器里跑起来接下来要做的就是逐步验证业务功能、补上平台差异适配享受“写一次、跑两端”的快感了 【免费下载链接】UIKit-cross-platformCross-platform Swift implementation of UIKit, mostly for Android项目地址: https://gitcode.com/gh_mirrors/ui/UIKit-cross-platform创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考