使用Kivy编写第一个Python Android App入门教程

小满
小满
发布时间:2026-11-10| 12人浏览过
原创

本教程详细介绍如何使用Python与Kivy图形框架开发第一个Android应用程序,涵盖桌面环境搭建、main.py业务编码、Buildozer打包配置、APK生成及真机调试与排错方案。

使用Python开发Android应用的标准工程路径,是通过跨平台图形库Kivy构建应用交互界面,随后利用官方打包工具Buildozer调用Android构建工具链,将Python解释器、依赖包与脚本封装为原生APK安装包。本文将以最精简的闭环流程,依次讲解桌面环境配置、第一个交互式Kivy应用编写、Buildozer参数调优、自动化编译APK及真机调试排错方法。

使用Kivy编写第一个Python Android App入门教程
图0:Kivy 与 Buildozer 开发 Android 应用整体流程概览

一、整体构建流程与操作全景

初学者使用 Python 进行移动端开发时,常误以为手机端会安装一个独立的 Python.exe 或像 Web 页面一样在浏览器容器中运行。事实上,Kivy 配合 Buildozer 的打包过程是标准的交叉编译:它会将微型 Python 解释器(libpython.so)、项目依赖库(.whl 或源码编译出的 .so 文件)以及你编写的业务代码整合进同一个 Android 宿主工程,通过 JNI 接口驱动 OpenGL 视口进行绘制。

完成一个可运行的 APK 必须经历五个标准环节:本地环境安装、业务代码编写、桌面运行验证、Buildozer 配置文件定制、真机安装与日志排查。

使用Kivy编写第一个Python Android App入门教程
图1:使用 Kivy 开发与打包 Android 应用的核心步骤流

二、桌面开发环境准备与本地编写

在向移动端打包之前,所有界面开发与业务调试均应在桌面端(macOS/Linux/Windows)先执行完毕。建议使用 Python 3.10 或 3.11,避免选用过新的 Python 大版本以防其与 Android 构建端交叉编译工具链不兼容。

1. 搭建虚拟环境与安装 Kivy

# 1. 创建干净的独立虚拟环境
python3 -m venv kivy_env

# 2. 激活虚拟环境
# Linux / macOS 执行:
source kivy_env/bin/activate
# Windows PowerShell 执行:
# .\kivy_env\Scripts\Activate.ps1

# 3. 升级基础包管理器并安装 Kivy
pip install --upgrade pip setuptools wheel
pip install kivy

示例 1:在当前工作空间建立独立虚拟环境并安装基础库

2. 编写入口文件 main.py

入口命名规范:打包系统对工程主文件具有强命名约定。无论你的项目有多少个子模块,入口文件名必须为 main.py 且置于根目录。如果命名为 app.py 或 run.py,打包出的 APK 会因找不到主入口而直接闪退。

下面实现一个包含标题栏、计数按钮和重置按钮的完整实例。界面采用垂直盒子布局(BoxLayout),支持多点触控与动态属性绑定:

# -*- coding: utf-8 -*-
"""
main.py - 第一个 Kivy Android 应用入口
"""
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.core.window import Window

# 设置桌面调试时的默认窗口尺寸(模拟手机竖屏)
Window.size = (360, 640)

class MainScreen(BoxLayout):
    def __init__(self, **kwargs):
        super(MainScreen, self).__init__(**kwargs)
        self.orientation = 'vertical'
        self.padding = 24
        self.spacing = 16
        self.count = 0

        # 1. 顶部提示标题
        self.title_label = Label(
            text="我的第一个 Kivy App",
            font_size="22sp",
            size_hint=(1, 0.2),
            color=(0.15, 0.2, 0.25, 1)
        )
        self.add_widget(self.title_label)

        # 2. 中间数据显示面板
        self.counter_label = Label(
            text="当前计数值:0",
            font_size="28sp",
            size_hint=(1, 0.4),
            color=(0.39, 0.53, 0.65, 1) # 柔蓝主题色
        )
        self.add_widget(self.counter_label)

        # 3. 核心交互按钮
        self.action_btn = Button(
            text="点击递增计数 (+1)",
            font_size="18sp",
            size_hint=(1, 0.2),
            background_normal="",
            background_color=(0.76, 0.55, 0.41, 1), # 陶橙主题色
            color=(1, 1, 1, 1)
        )
        self.action_btn.bind(on_press=self.increment_counter)
        self.add_widget(self.action_btn)

        # 4. 重置按钮
        self.reset_btn = Button(
            text="清零重置",
            font_size="16sp",
            size_hint=(1, 0.15),
            background_normal="",
            background_color=(0.88, 0.9, 0.92, 1),
            color=(0.2, 0.25, 0.3, 1)
        )
        self.reset_btn.bind(on_press=self.reset_counter)
        self.add_widget(self.reset_btn)

    def increment_counter(self, instance):
        self.count += 1
        self.counter_label.text = f"当前计数值:{self.count}"

    def reset_counter(self, instance):
        self.count = 0
        self.counter_label.text = "当前计数值:0"

class FirstKivyApp(App):
    def build(self):
        # 统一背景底色为暖白
        Window.clearcolor = (0.98, 0.98, 0.97, 1)
        return MainScreen()

if __name__ == '__main__':
    FirstKivyApp().run()

示例 2:包含状态管理、事件绑定与自适应布局的 main.py 源码

在终端中运行 python main.py,屏幕上会弹出一个模拟 360×640 竖屏的窗口。点击按钮确认数值正常自增与清零,即可判定本地逻辑无误,进入打包阶段。

三、Kivy 在 Android 上的底层运行架构

为了在后续打包报错或性能调优时能够准确定位问题,理解 Kivy 怎样在 Android 操作系统内运行是关键。Kivy 并不依赖 Web 技术,也不将 Python 源码转换成 Java 代码,其底层架构依赖三个关键支柱:python-for-android (p4a)、SDL2 与 PyJNIus。

使用Kivy编写第一个Python Android App入门教程
图2:Kivy 跨平台运行机制与分层调用架构

四、使用 Buildozer 打包 APK 完整实操

1. 构建环境限制与依赖安装

Buildozer 的核心底层依赖包含 Android NDK 编译工具集(Clang、LLVM、Make)以及 Unix 基础环境,目前无法直接在原生 Windows CMD/PowerShell 下执行编译。

  • Linux / macOS:原生支持,直接在系统终端中执行。
  • Windows 用户:请直接启用 WSL2(推荐 Ubuntu 22.04 LTS 分发版),在 Linux 子系统内完成打包。

在 Linux/WSL2 环境中,首先更新并安装打包所需的系统开发库及 OpenJDK:

# 更新软件仓库
sudo apt update

# 安装 Android 交叉编译所需的基础开发工具链
sudo apt install -y git zip unzip autoconf libtool pkg-config zlib1g-dev \
    libncurses5-dev libncursesw5-dev libtinfo5 cmake libffi-dev libssl-dev \
    build-essential openjdk-17-jdk

# 安装 Buildozer 与 Cython
pip install --user --upgrade buildozer cython

示例 3:在 Ubuntu/WSL 中配置 Buildozer 编译所需底层依赖

2. 生成与调整 buildozer.spec

进入包含 main.py 的工程根目录,运行初始化命令生成默认配置文件:

# 初始化生成 buildozer.spec
buildozer init

生成的 buildozer.spec 是一个标准的 INI 配置文件,控制打包全过程。初学者最需要核对和修改的是以下核心字段:

使用Kivy编写第一个Python Android App入门教程
图3:工程文件组织与 buildozer.spec 核心配置映射解析

3. 执行打包命令与产物生成

参数校验完成后,在包含 buildozer.spec 的目录中执行以下命令开始打包:

# -v 参数用于输出详细的编译与下载日志
buildozer -v android debug

首测耗时与流程说明:首次执行该命令时,Buildozer 会自动联网拉取 Android SDK、NDK(约 1GB 左右)以及构建配方(Recipes)。在此期间无需手动干预,通常需要 10 至 30 分钟(取决于网络带宽与机器性能)。

编译完成后,终端最后会输出类似 # Android packaging done! 的提示。进入项目内的 bin/ 目录,即可看到生成的安装文件:

bin/myfirstapp-0.1-arm64-v8a_armeabi-v7a-debug.apk

五、真机安装、部署与运行排错

1. 部署到 Android 设备

将 APK 运行到真机上有两种主流方式:

  1. 直接传输安装:通过数据线或聊天软件将 bin/ 目录下的 .apk 文件发送到手机上,在手机“文件管理”中点击安装。安装时若弹出“未知来源应用”告警,点击“允许继续安装”。
  2. ADB 自动化部署(推荐):开启手机的“开发者模式”并启用“USB 调试”。连接电脑后执行:
    # 自动完成编译、推送、安装并直接唤醒应用
    buildozer android deploy run

2. 常见问题排查与决策路径

Android 平台上运行 Python 代码,最常见的挫折是应用点击后“闪退”或者在打包过程中直接“卡死/报错”。切忌盲目猜测,应当根据具体现象沿决策链路排查:

使用Kivy编写第一个Python Android App入门教程
图4:Kivy Android 常见编译及运行故障排查决策路线

3. 获取 Python 运行时崩溃日志

当手机打开应用黑屏或闪退时,Android 系统的常规提示仅为“屡次停止运行”。此时必须通过电脑端 ADB 抓取过滤出 Python 进程的原生报错栈(Traceback):

# 电脑终端执行(需手机保持 USB 调试开启):
adb logcat -s "python"

# 典型报错示例(依赖缺失):
# I/python: Traceback (most recent call last):
# I/python:   File "main.py", line 4, in <module>
# I/python: ModuleNotFoundError: No module named 'requests'

示例 4:通过 adb logcat 抓取精确到具体行数的 Python 错误栈

看到 ModuleNotFoundError 提示后,只需编辑 buildozer.spec,将 requirements = python3,kivy 改为 requirements = python3,kivy,requests,再次执行 buildozer -v android debug 重新打包即可解决。

六、桌面开发与 Android 运行对比要点

为了帮助初学者建立清晰的心智模型,下表总结了在桌面开发与手机实际运行时的关键差异与注意事项:

对比维度 桌面测试阶段 (Desktop) Android 真机运行阶段 (Mobile)
入口与路径 任意文件名,通过绝对/相对路径读取 必须为 main.py,文件路径需基于系统内部存储
分辨率与缩放 固定窗口像素(如 360×640 px) 高 DPI 屏幕,尺寸单位推荐使用 sp 或 dp
依赖安装机制 直接 pip install 即可使用 必须显式声明在 requirements 中由 p4a 编译打包
系统权限管理 继承当前操作系统登录用户权限 需在 spec 的 android.permissions 声明网络/存储权限
调试定位手段 IDE 控制台直接查看 print 与异常 必须使用 adb logcat -s python 抓取进程输出

遵循以上开发范式,你便掌握了使用 Python 和 Kivy 交付 Android 原生应用的基础能力。在后续进阶中,可继续探索利用 KV 语言(Kivy Language)将界面层与逻辑解耦,以及通过 PyJNIus 直接调用 Android 原生相机、GPS 定位和蓝牙等底层硬件接口。

相关专题:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。