Something beautiful is on the way.

python打包apk

将 Python 代码打包成 Android 可执行程序(.apk 或 .aab),核心是通过「中间层框架」将 Python 运行时、代码与 Android 原生环境(Java/Kotlin)整合。由于 Android 系统原生不支持 Python 解释器,需借助第三方工具实现跨语言调用和打包。以下是 3 种主流方案(从易到难,覆盖不同场景),附详细步骤和注意事项:

一、核心前提

  1. 环境准备:
    • 操作系统:Windows/macOS/Linux(推荐 Windows 或 Linux,兼容性更好);
    • 基础工具:Python 3.8+(建议 3.9/3.10,避免版本兼容问题)、JDK 11+(Android 开发必需)、Android SDK(含 Build Tools、API 级别 31+);
    • 可选工具:Android Studio(可视化配置 SDK / 模拟器,新手推荐)。
  2. 代码限制:
    • 避免使用依赖系统底层库的 Python 模块(如 pywin32psutil 部分功能);
    • 图形界面需用支持 Android 的框架(如 Kivy、PyQt for Android),不能用 Tkinter(仅桌面支持);
    • 第三方库优先选择纯 Python 实现(如 requestspandas),C 扩展库(如 numpy)需确保框架支持编译。

二、方案 1:Kivy + Buildozer(最成熟,推荐新手)

什么是 Kivy/Buildozer?

  • Kivy:跨平台 Python 图形界面框架(支持 Android/iOS/ 桌面),提供原生级别的 UI 组件(按钮、输入框等),适配移动设备触摸操作;
  • Buildozer:自动化打包工具,一键将 Kivy 项目打包成 Android .apk(或 iOS .ipa),自动处理 Python 运行时、依赖库编译、Android 配置等流程。

步骤 1:安装依赖环境

1.1 安装 Kivy

bash
 
运行
 
 
 
 
# Windows/macOS/Linux 通用(建议先创建虚拟环境)
pip install virtualenv
virtualenv kivy-env
# 激活虚拟环境(Windows)
kivy-env\Scripts\activate
# 激活虚拟环境(macOS/Linux)
source kivy-env/bin/activate

# 安装 Kivy 及依赖
pip install kivy[base]  # 基础组件(含 UI、触摸支持)
pip install pillow  # 图像处理(可选,Kivy 推荐)
 

1.2 安装 Buildozer

  • Windows:需先安装 WSL(Windows 子系统 Linux,推荐 Ubuntu 20.04),在 WSL 中操作(Buildozer 对 Windows 原生支持较差);
  • macOS/Linux:直接安装:
    bash
     
    运行
     
     
     
     
    # macOS 需先安装依赖(用 brew)
    brew install pkg-config sdl2 sdl2_image sdl2_ttf sdl2_mixer python3-pip
    # Linux(Ubuntu/Debian)需先安装依赖
    sudo apt-get update
    sudo apt-get install -y build-essential ccache git libncurses5-dev libssl-dev libffi-dev python3-dev python3-pip libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev libsdl2-mixer-dev libjpeg-dev zlib1g-dev
    
    # 安装 Buildozer
    pip install buildozer
     
     

步骤 2:编写简单 Kivy 项目

创建项目文件夹(如 android-python-demo),新建 2 个文件:

2.1 主程序 main.py(核心逻辑)

python
 
运行
 
 
 
 
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout

# 定义应用界面和逻辑
class MyAndroidApp(App):
    def build(self):
        # 布局(垂直排列)
        layout = BoxLayout(orientation='vertical', padding=50, spacing=30)
        
        # 文本标签
        self.label = Label(text="Python 打包 Android 测试", font_size=30)
        layout.add_widget(self.label)
        
        # 按钮(点击事件)
        button = Button(text="点击我", font_size=25, size_hint=(1, 0.2))
        button.bind(on_press=self.on_button_click)  # 绑定点击事件
        layout.add_widget(button)
        
        return layout
    
    # 按钮点击回调
    def on_button_click(self, instance):
        self.label.text = "点击成功!🎉"

# 运行应用
if __name__ == "__main__":
    MyAndroidApp().run()
 

2.2 配置文件 buildozer.spec(自动生成 + 修改)

在项目文件夹中执行以下命令,生成默认配置文件:
bash
 
运行
 
 
 
 
buildozer init
 
打开生成的 buildozer.spec,修改关键配置(其他保持默认):
ini
 
 
 
 
 
# 应用名称(必填)
title = MyPythonApp
# 包名(Android 要求唯一,格式:com.用户名.应用名)
package.name = mypythonapp
# 应用版本
version = 0.1
# 主程序入口(默认 main.py,无需改)
source.dir = .
source.include_exts = py,png,jpg,kv,atlas
# Python 版本(建议 3.9)
requirements = python3,kivy,pillow
# Android SDK 版本(建议 31+)
android.api = 33
# Android 构建工具版本
android.buildTools = 33.0.2
# 应用图标(可选,需准备 512x512 的 png 图片,放在项目根目录)
# android.icon = %(source.dir)s/icon.png
 

步骤 3:打包生成 .apk

在项目文件夹中执行打包命令(首次打包会下载 Android SDK、NDK 等依赖,约 1-3GB,需耐心等待):
bash
 
运行
 
 
 
 
buildozer android debug deploy run
 
  • 命令说明:
    • debug:生成调试版 .apk(无签名,可用于测试);
    • deploy:自动部署到连接的 Android 设备(需开启 USB 调试);
    • run:部署后自动运行应用。

步骤 4:获取 .apk 文件

打包成功后,.apk 文件路径:
plaintext
 
 
 
 
 
项目文件夹/bin/mypythonapp-0.1-debug.apk
 
  • 可直接拷贝到 Android 设备安装测试,或用 Android Studio 模拟器运行。

优势与局限

  • 优势:操作简单(一键打包)、成熟稳定、支持复杂 UI 和触摸交互;
  • 局限:仅支持 Kivy 框架开发的项目,打包后的 .apk 体积较大(含 Python 运行时,约 10-30MB)。

三、方案 2:BeeWare(用 Python 写原生应用,推荐追求轻量化)

什么是 BeeWare?

BeeWare 是一套跨平台框架,核心是 Briefcase 工具,可将 Python 代码打包成 Android 原生应用(.apk)、iOS 应用、Windows 程序等。与 Kivy 不同,BeeWare 试图调用平台原生 UI 组件(如 Android 的 TextView、Button),体验更接近原生应用。

步骤 1:安装 BeeWare

bash
 
运行
 
 
 
 
# 创建虚拟环境(推荐)
virtualenv beeware-env
activate beeware-env  # 激活环境(Windows/macOS/Linux 命令同方案 1)

# 安装 BeeWare 核心工具
pip install briefcase
 

步骤 2:创建项目并编写代码

2.1 初始化项目

bash
 
运行
 
 
 
 
briefcase new
 
按提示输入项目信息(示例):
  • Formal Name: MyBeeWareApp(应用全称)
  • App Name: mybeewareapp(包名)
  • Description: A Python app for Android
  • Author: Your Name
  • Author Email: your@email.com
  • URL: https://your-url.com
  • License: MIT
  • GUI Framework: Toga(BeeWare 内置的跨平台 UI 框架)

2.2 修改主程序 src/mybeewareapp/__init__.py

python
 
运行
 
 
 
 
from toga import App, Box, Button, Label
from toga.style import Pack
from toga.style.pack import COLUMN, CENTER

class MyBeeWareApp(App):
    def startup(self):
        # 布局(垂直居中)
        main_box = Box(style=Pack(direction=COLUMN, alignment=CENTER, padding=50, spacing=30))
        
        # 文本标签
        self.label = Label("BeeWare 打包测试", style=Pack(font_size=30))
        main_box.add(self.label)
        
        # 按钮(点击事件)
        button = Button("点击", on_press=self.on_click, style=Pack(font_size=25, width=200))
        main_box.add(button)
        
        # 设置主窗口
        self.main_window = self.main_window(title=self.formal_name)
        self.main_window.content = main_box
        self.main_window.show()
    
    def on_click(self, widget):
        self.label.text = "原生体验!😊"

def main():
    return MyBeeWareApp()
 

步骤 3:打包 Android 应用

3.1 初始化 Android 项目结构

bash
 
运行
 
 
 
 
cd mybeewareapp  # 进入项目根目录(briefcase new 创建的文件夹)
briefcase build android  # 首次执行会下载 Android 依赖
 

3.2 生成 .apk 文件

bash
 
运行
 
 
 
 
briefcase package android --debug
 
打包成功后,.apk 路径:
plaintext
 
 
 
 
 
mybeewareapp/android/build/outputs/apk/debug/mybeewareapp-0.1-debug.apk
 

优势与局限

  • 优势:UI 更接近原生 Android 应用、.apk 体积比 Kivy 小(约 8-20MB)、支持更多 Python 库;
  • 局限:生态比 Kivy 年轻,部分复杂 UI 组件支持不足,文档相对较少。

四、方案 3:Chaquopy + Android Studio(混合开发,适合需原生交互)

什么是 Chaquopy?

Chaquopy 是一个 Android Studio 插件,允许在 Android 原生项目(Java/Kotlin)中直接调用 Python 代码,支持:
  • Python 代码与 Java/Kotlin 相互调用(如 Python 处理数据,Java 展示 UI);
  • 打包 Python 运行时和依赖库到 .apk/.aab 中;
  • 支持大多数纯 Python 库(如 requestspandas)和部分 C 扩展库(如 numpy)。

适用场景

需要 Android 原生 UI(如 RecyclerView、Fragment)+ Python 核心逻辑(如数据分析、AI 模型推理)的混合开发项目。

步骤 1:配置 Android Studio 与 Chaquopy

  1. 安装 Android Studio(确保已配置 SDK、NDK);
  2. 新建 Android 原生项目(Empty Views Activity);
  3. 在项目级 build.gradle 中添加 Chaquopy 仓库:
    gradle
     
     
     
     
     
    buildscript {
        repositories {
            google()
            mavenCentral()
            // 添加 Chaquopy 仓库
            maven { url "https://chaquo.com/maven" }
        }
        dependencies {
            classpath "com.android.tools.build:gradle:7.4.2"
            // 添加 Chaquopy 插件
            classpath "com.chaquo.python:gradle:15.0.1"  // 版本需与 Gradle 兼容
        }
    }
     
     
  4. 在模块级 build.gradle 中应用插件并配置 Python:
    gradle
     
     
     
     
     
    plugins {
        id 'com.android.application'
        id 'com.chaquo.python'  // 应用 Chaquopy 插件
    }
    
    android {
        namespace "com.example.pythonandroid"
        compileSdk 33
    
        defaultConfig {
            applicationId "com.example.pythonandroid"
            minSdk 21
            targetSdk 33
            versionCode 1
            versionName "1.0"
    
            // 配置 Python
            python {
                buildPython "C:/Python39/python.exe"  // 你的 Python 路径(Windows)
                // buildPython "/usr/bin/python3"  // macOS/Linux 路径
                pip {
                    install "requests"  // 安装 Python 依赖库
                    install "numpy"
                }
            }
        }
     
     
  5. 同步 Gradle(Sync Now),完成 Chaquopy 配置。

步骤 2:编写 Python 代码

在 app/src/main 下新建 python 文件夹,创建 mypython.py
python
 
运行
 
 
 
 
# 供 Java/Kotlin 调用的 Python 函数
def add(a, b):
    return a + b

def process_data(data):
    # 示例:处理字符串数据
    return f"Python 处理结果:{data.upper()}"
 

步骤 3:Java 调用 Python 代码

在 Android 原生 Activity 中调用 Python 函数:
java
 
运行
 
 
 
 
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import com.chaquo.python.Python;
import com.chaquo.python.android.AndroidPlatform;

public class MainActivity extends AppCompatActivity {
    private TextView resultText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 初始化 Python 环境
        if (!Python.isStarted()) {
            Python.start(new AndroidPlatform(this));
        }

        // 获取 Python 实例和模块
        Python python = Python.getInstance();
        com.chaquo.python.PyObject pyModule = python.getModule("mypython");

        // 调用 Python 函数
        int sum = pyModule.callAttr("add", 10, 20).toInt();  // 调用 add(10,20)
        String dataResult = pyModule.callAttr("process_data", "hello android").toString();  // 调用 process_data

        // 显示结果
        resultText = findViewById(R.id.result_text);
        resultText.setText("sum: " + sum + "\n" + dataResult);
    }
}
 

步骤 4:打包 .apk

直接用 Android Studio 的「Build → Build Bundle (s)/APK (s) → Build APK (s)」,生成的 .apk 路径:
plaintext
 
 
 
 
 
app/build/outputs/apk/debug/app-debug.apk
 

优势与局限

  • 优势:完美融合 Android 原生开发、支持 Python 与 Java 双向通信、适合复杂原生 UI + Python 逻辑的场景;
  • 局限:配置复杂(需懂 Android 原生开发)、学习成本高、依赖 Chaquopy 插件(部分高级功能需付费)。

五、常见问题与解决方案

1. 打包失败:依赖库编译报错

  • 原因:部分 Python 库含 C 扩展(如 numpy),需 Chaquopy/Kivy 支持交叉编译;
  • 解决方案:
    • 优先使用纯 Python 库;
    • Kivy 中需在 buildozer.spec 中添加 requirements = python3,kivy,numpy(Buildozer 会自动编译);
    • Chaquopy 支持大多数 C 扩展库,直接在 pip install 中添加即可。

2. .apk 体积过大

  • 优化方案:
    • 移除不必要的依赖库(如仅用 Kivy 基础组件,不装 kivy[full]);
    • 启用 Buildozer 的 android.strip 配置(在 buildozer.spec 中设置 android.strip = True,移除调试符号);
    • 用 briefcase 打包(体积比 Kivy 小)。

3. 应用闪退

  • 排查步骤:
    • 检查 Python 代码是否有语法错误(在桌面运行 main.py 测试);
    • 查看 Android 日志(用 Android Studio 的 Logcat,过滤 Python 相关日志);
    • 确保 minSdk 版本符合要求(Kivy/BeeWare 建议 minSdk ≥ 21)。

4. 无法调用 Android 原生功能(如相机、网络)

  • 解决方案:
    • Kivy:在 buildozer.spec 中添加权限,如 android.permissions = INTERNET,CAMERA
    • Chaquopy/Android Studio:在 AndroidManifest.xml 中添加权限,如 <uses-permission android:name="android.permission.INTERNET" />

六、方案选择建议

方案 难度 适用场景 优势
Kivy + Buildozer 纯 Python 开发移动应用、快速原型 一键打包、成熟稳定、UI 丰富
BeeWare(Briefcase) 追求原生 UI 体验、轻量应用 原生交互好、体积小
Chaquopy + Android Studio 混合开发(原生 UI + Python 逻辑) 灵活度高、支持复杂原生功能
如果是新手,优先选择 Kivy + Buildozer,快速实现 Python 代码打包 Android;如果需要原生 UI 体验,尝试 BeeWare;如果需与 Android 原生功能深度交互,选择 Chaquopy
posted @ 2025-11-28 13:24  张朋举  阅读(0)  评论(0)    收藏  举报