ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

将 Python 程序打包成 APK:从零到上手的完整指南

将 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/activate

3.2 安装 Kivy

pipinstallkivy

3.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.py

5. 使用 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 = 1

5.2 开始打包

执行打包命令:

buildozer-vandroid debug

首次打包会下载 Android SDK、NDK 等大量依赖,耗时较长,请耐心等待。打包成功后,APK 文件会生成在bin/目录下。

lsbin/# 输出类似:helloandroid-1.0.0-arm64-v8a-debug.apk

5.3 安装到手机

将 APK 传输到 Android 手机,开启「允许安装未知来源应用」后即可安装。

adbinstallbin/helloandroid-1.0.0-arm64-v8a-debug.apk

6. 常见问题与优化

6.1 打包体积过大

Kivy 应用默认包含完整的 Python 解释器和 Kivy 框架,APK 体积通常在 20MB 以上。可以通过以下方式优化:

  • 使用--release模式打包,启用压缩;
  • 精简依赖库,只保留必要的模块;
  • 使用android.archs指定目标架构,减少多架构冗余。

6.2 依赖库缺失

如果程序使用了第三方库(如requests、numpy),需要在buildozer.spec中声明:

requirements = python3,kivy,requests,numpy

6.3 权限配置

如果应用需要访问网络、存储等权限,在buildozer.spec中配置:

android.permissions = INTERNET, WRITE_EXTERNAL_STORAGE

7. 进阶:使用 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 示例入手,跑通整个流程后再扩展到你的实际项目。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进