Python 高阶编程技术 · 第 35 篇
移动端打包:Kivy、BeeWare、PySide6 for Android/iOS (适配 Python 3.12;测试机型:Pixel 8 / iPhone 14 Pro)
──────────────────
• 运行时——iOS 不允解释器 JIT,Android 又要求 Android NDK; • UI——桌面控件在 6.7″ 触控屏上延迟高、滑动掉帧; • 原生桥接——调用摄像头、蓝牙、推送通知,需要 Objective-C / Kotlin 桥接; • 包体积——一次性把 CPython + 依赖全塞进去,APK/IPA > 40 MB; • CI/CD——签名、证书、TestFlight、AB Split 发布全自动化。
本篇聚焦 Kivy + Buildozer、BeeWare + Briefcase、PySide6 ( Qt 6 ) 三条路线,拆解打包流程、原生桥接、触控优化的工程细节,并通过三个 Demo 把“20 行 Python 原型 → 上架 App”完整走通。
────────────────── 2. 原理剖析
2.1 打包栈对比
UI 渲染 | OpenGL ES + 自家 Widget | 原生控件 (UIKit / Jetpack) via Toga | QtQuick/QML + Hardware Accelerate |
构建工具 | buildozer + Gradle / Xcode | briefcase + Xcode/Gradle + template | CMake + Qt Android/iOS Kit |
体积 (空壳) | ~16 MB APK / 30 MB IPA | ~20 MB / 35 MB | ~30 MB / 45 MB |
原生桥接 | pyjnius (Java) / pyobjus (ObjC) | rubicon-objc / rubicon-java | Shiboken C++ binding + JNI |
社区 & 组件 | 游戏/IoT 多,Material 限 | 较新,小巧 | 丰富 Qt 与 3rd-party Widgets |
2.2 架构 & 执行模式 • Kivy:CPython + SDL2 + OpenGL;APK 内置运行时,启动后解压 .so; • BeeWare:CPython 链接到动态库,UIKit 事件透过 Rubicon-ObjC 转 Python; • PySide6:Qt MainLoop 主线程,Python 控制 QML;所有信号槽自动转换。
2.3 原生桥接机制
pyjnius | JNI + Cython | Python ↔ Java obj (≈1 µs) |
rubicon-objc | libffi | Python ↔ ObjC msg (≈5 µs) |
Shiboken | C++ code-gen | 编译期生成薄代理 |
2.4 触控优化 • 禁止主线程阻塞:I/O 任务放 asyncio + threading; • OpenGL 60 fps:Clock.schedule_interval(draw, 1/60) / QtQuick vsync; • Gesture Recognizer:
评论前必须登录!
注册