将Python程序打包成APK的几种主流方案

 更新时间:2026年11月10日 08:57:36   作者:bjzhang75  
很多 Python 开发者都希望把自己写的脚本或小工具发布到 Android 手机上,让更多人直接安装使用,但 Python 本身并不直接运行在 Android 系统上,所以本文将带你了解几种主流的打包方案,并给出可复现的实战步骤,需要的朋友可以参考下

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 -m venv kivy_env
source kivy_env/bin/activate

3.2 安装 Kivy

pip install kivy

3.3 安装 Buildozer

Buildozer 是 Kivy 官方提供的 Android 打包工具,负责自动下载 Android SDK、NDK 等依赖。

pip install buildozer

注意:Buildozer 目前主要支持 Linux 和 macOS。Windows 用户建议使用 WSL(Windows Subsystem for Linux)或虚拟机。

4. 编写一个简单的 Kivy 应用

我们先写一个最简单的 Kivy 应用,作为打包测试对象。

# main.py
from kivy.app import App
from kivy.uix.label import Label

class HelloApp(App):
    def build(self):
        return Label(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 -v android debug

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

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

5.3 安装到手机

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

adb install bin/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:

Python py = Python.getInstance();
PyObject module = py.getModule("my_module");
module.callAttr("my_function");

8. 总结

将 Python 程序打包成 APK 主要有两条路径:

  • 纯 Python 应用:使用 Kivy + Buildozer,全程 Python 开发,适合快速发布带界面的小工具;
  • 原生 Android 嵌入:使用 Chaquopy,在 Android Studio 项目中嵌入 Python 逻辑,适合已有原生项目的团队。

无论选择哪种方案,核心都是把 Python 解释器和依赖一起打包进 APK。建议先从简单的 Kivy 示例入手,跑通整个流程后再扩展到你的实际项目。

到此这篇关于将Python程序打包成APK的几种主流方案的文章就介绍到这了,更多相关Python程序打包成APK内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python爬虫学习之翻译小程序

    Python爬虫学习之翻译小程序

    这篇文章主要为大家详细介绍了Python爬虫学习之翻译小程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • 利用python模拟实现POST请求提交图片的方法

    利用python模拟实现POST请求提交图片的方法

    最近在利用python做接口测试,其中有个上传图片的接口,在网上各种搜索,各种尝试。下面这篇文章主要给大家介绍了关于利用python模拟实现POST请求提交图片的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-07-07
  • Python人工智能学习PyTorch实现WGAN示例详解

    Python人工智能学习PyTorch实现WGAN示例详解

    这篇文章主要为大家介绍了人工智能学习PyTorch实现WGAN的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-11-11
  • Python下划线命名模式

    Python下划线命名模式

    下划线前缀的含义是告知其他程序员:以单个下划线开头的变量或方法仅供内部使用,该约定在PEP 8中有定义,这篇文章主要介绍了Python下划线命名模式,需要的朋友可以参考下
    2023-10-10
  • Python 内置函数globals()和locals()对比详解

    Python 内置函数globals()和locals()对比详解

    这篇文章主要介绍了Python globals()和locals()对比详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • pycharm 解除默认unittest模式的方法

    pycharm 解除默认unittest模式的方法

    今天小编就为大家分享一篇pycharm 解除默认unittest模式的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • 从基础到实战详解Python解析NC格式文件全攻略

    从基础到实战详解Python解析NC格式文件全攻略

    在气象研究领域,每天产生的数据量超过2PB,这些海量数据中,85%以上采用NetCDF格式存储,下面我们就来看看如何使用Python解析NC格式文件吧
    2025-11-11
  • Matplotlib中文乱码的两种详细解决方案

    Matplotlib中文乱码的两种详细解决方案

    最近手头有公司的数据资源,正好拿来练习了matplotlib的画图,期间碰到一个坑,就是中文在图表中显示的是方框,下面这篇文章主要给大家介绍了关于Matplotlib中文乱码的两种详细解决方案,需要的朋友可以参考下
    2022-07-07
  • Python Selenium中忽略证书错误的完整方法

    Python Selenium中忽略证书错误的完整方法

    这篇文章主要为大家详细介绍了Python Selenium中忽略证书错误的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-11-11
  • Python秒算24点实现及原理详解

    Python秒算24点实现及原理详解

    这篇文章主要介绍了Python秒算24点,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07

最新评论