将 Python 程序打包成 APK:从零到上手的完整指南
1. 引言
很多 Python 开发者都希望把自己写的脚本或小工具发布到 Android 手机上,让更多人直接安装使用。但 Python 本身并不直接运行在 Android 系统上,需要借助工具链将 Python 解释器、依赖库和你的代码一起打包成 APK 安装包。
本文将带你了解几种主流的打包方案,并给出可复现的实战步骤,帮助你顺利把 Python 程序变成可安装的 Android 应用。
2. 主流打包方案对比
在动手之前,先了解目前常用的几种方案,以便根据项目类型做出选择。
| 方案 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| Kivy + Buildozer | 图形界面应用 | 纯 Python 开发 UI,打包工具成熟 | 包体积较大,UI 风格偏原生 |
| Chaquopy | 在 Android 原生项目中嵌入 Python | 与 Android Studio 集成好,可调用 Java/Kotlin | 需要 Android 开发基础 |
| Termux + 脚本 | 命令行工具、脚本 | 无需打包,直接在手机上运行 | 不是真正的 APK,依赖 Termux 环境 |
| BeeWare(Briefcase) | 跨平台 GUI 应用 | 官方支持 Android 打包,工具链统一 | 对新手有一定学习成本 |
如果你的程序是带界面的应用,推荐 Kivy + Buildozer;如果只是想在 Android 原生 App 里嵌入一段 Python 逻辑,则选择 Chaquopy。
3. 环境准备
无论选择哪种方案,都需要先准备好开发环境。这里以最常用的Kivy + Buildozer为例。
3.1 安装 Python 与虚拟环境
建议使用 Python 3.8 及以上版本,并创建独立的虚拟环境,避免污染系统环境。
python3-mvenv kivy_envsourcekivy_env/bin/activate3.2 安装 Kivy
pipinstallkivy3.3 安装 Buildozer
Buildozer 是 Kivy 官方提供的 Android 打包工具,负责自动下载 Android SDK、NDK 等依赖。
pipinstallbuildozer注意:Buildozer 目前主要支持 Linux 和 macOS。Windows 用户建议使用 WSL(Windows Subsystem for Linux)或虚拟机。
4. 编写一个简单的 Kivy 应用
我们先写一个最简单的 Kivy 应用,作为打包测试对象。
# main.pyfromkivy.appimportAppfromkivy.uix.labelimportLabelclassHelloApp(App):defbuild(self):returnLabel(text="Hello, Android!")if__name__=="__main__":HelloApp().run()保存为main.py,在本地运行确认无误:
python main.py5. 使用 Buildozer 打包 APK
5.1 初始化 Buildozer 配置
在项目目录下执行:
buildozer init这会生成一个buildozer.spec配置文件。打开它,修改关键字段:
[app] title = Hello Android package.name = helloandroid package.domain = org.example source.dir = . source.include_exts = py,png,jpg,kv,atlas version = 1.0.0 [buildozer] log_level = 2 warn_on_root = 15.2 开始打包
执行打包命令:
buildozer-vandroid debug首次打包会下载 Android SDK、NDK 等大量依赖,耗时较长,请耐心等待。打包成功后,APK 文件会生成在bin/目录下。
lsbin/# 输出类似:helloandroid-1.0.0-arm64-v8a-debug.apk5.3 安装到手机
将 APK 传输到 Android 手机,开启「允许安装未知来源应用」后即可安装。
adbinstallbin/helloandroid-1.0.0-arm64-v8a-debug.apk6. 常见问题与优化
6.1 打包体积过大
Kivy 应用默认包含完整的 Python 解释器和 Kivy 框架,APK 体积通常在 20MB 以上。可以通过以下方式优化:
- 使用
--release模式打包,启用压缩; - 精简依赖库,只保留必要的模块;
- 使用
android.archs指定目标架构,减少多架构冗余。
6.2 依赖库缺失
如果程序使用了第三方库(如requests、numpy),需要在buildozer.spec中声明:
requirements = python3,kivy,requests,numpy6.3 权限配置
如果应用需要访问网络、存储等权限,在buildozer.spec中配置:
android.permissions = INTERNET, WRITE_EXTERNAL_STORAGE7. 进阶:使用 Chaquopy 嵌入 Python
如果你的项目是基于 Android Studio 的原生应用,希望嵌入 Python 逻辑,可以使用 Chaquopy。
在build.gradle中添加:
plugins { id 'com.chaquo.python' } android { defaultConfig { ndk { abiFilters "arm64-v8a", "x86_64" } } } chaquopy { defaultConfig { pip { install "requests" } } }然后在 Java/Kotlin 代码中调用 Python:
Pythonpy=Python.getInstance();PyObjectmodule=py.getModule("my_module");module.callAttr("my_function");8. 总结
将 Python 程序打包成 APK 主要有两条路径:
- 纯 Python 应用:使用 Kivy + Buildozer,全程 Python 开发,适合快速发布带界面的小工具;
- 原生 Android 嵌入:使用 Chaquopy,在 Android Studio 项目中嵌入 Python 逻辑,适合已有原生项目的团队。
无论选择哪种方案,核心都是把 Python 解释器和依赖一起打包进 APK。建议先从简单的 Kivy 示例入手,跑通整个流程后再扩展到你的实际项目。