


















将 Python 代码打包成 Android 可执行程序(.apk 或 .aab),核心是通过「中间层框架」将 Python 运行时、代码与 Android 原生环境(Java/Kotlin)整合。由于 Android 系统原生不支持 Python 解释器,需借助第三方工具实现跨语言调用和打包。以下是 3 种主流方案(从易到难,覆盖不同场景),附详细步骤和注意事项:
pywin32、psutil 部分功能);requests、pandas),C 扩展库(如 numpy)需确保框架支持编译。# 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 推荐)
# 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
创建项目文件夹(如 android-python-demo),新建 2 个文件:
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()
在项目文件夹中执行以下命令,生成默认配置文件:
打开生成的 buildozer.spec,修改关键配置(其他保持默认):
# 应用名称(必填)
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
在项目文件夹中执行打包命令(首次打包会下载 Android SDK、NDK 等依赖,约 1-3GB,需耐心等待):
buildozer android debug deploy run
debug:生成调试版 .apk(无签名,可用于测试);deploy:自动部署到连接的 Android 设备(需开启 USB 调试);run:部署后自动运行应用。打包成功后,.apk 文件路径:
项目文件夹/bin/mypythonapp-0.1-debug.apk
BeeWare 是一套跨平台框架,核心是 Briefcase 工具,可将 Python 代码打包成 Android 原生应用(.apk)、iOS 应用、Windows 程序等。与 Kivy 不同,BeeWare 试图调用平台原生 UI 组件(如 Android 的 TextView、Button),体验更接近原生应用。
# 创建虚拟环境(推荐)
virtualenv beeware-env
activate beeware-env # 激活环境(Windows/macOS/Linux 命令同方案 1)
# 安装 BeeWare 核心工具
pip install briefcase
按提示输入项目信息(示例):
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()
cd mybeewareapp # 进入项目根目录(briefcase new 创建的文件夹)
briefcase build android # 首次执行会下载 Android 依赖
briefcase package android --debug
打包成功后,.apk 路径:
mybeewareapp/android/build/outputs/apk/debug/mybeewareapp-0.1-debug.apk
Chaquopy 是一个 Android Studio 插件,允许在 Android 原生项目(Java/Kotlin)中直接调用 Python 代码,支持:
requests、pandas)和部分 C 扩展库(如 numpy)。需要 Android 原生 UI(如 RecyclerView、Fragment)+ Python 核心逻辑(如数据分析、AI 模型推理)的混合开发项目。
build.gradle 中添加 Chaquopy 仓库:
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 兼容
}
}
build.gradle 中应用插件并配置 Python:
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"
}
}
}
在 app/src/main 下新建 python 文件夹,创建 mypython.py:
# 供 Java/Kotlin 调用的 Python 函数
def add(a, b):
return a + b
def process_data(data):
# 示例:处理字符串数据
return f"Python 处理结果:{data.upper()}"
在 Android 原生 Activity 中调用 Python 函数:
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);
}
}
直接用 Android Studio 的「Build → Build Bundle (s)/APK (s) → Build APK (s)」,生成的 .apk 路径:
app/build/outputs/apk/debug/app-debug.apk
numpy),需 Chaquopy/Kivy 支持交叉编译;buildozer.spec 中添加 requirements = python3,kivy,numpy(Buildozer 会自动编译);pip install 中添加即可。kivy[full]);android.strip 配置(在 buildozer.spec 中设置 android.strip = True,移除调试符号);briefcase 打包(体积比 Kivy 小)。main.py 测试);Python 相关日志);buildozer.spec 中添加权限,如 android.permissions = INTERNET,CAMERA;AndroidManifest.xml 中添加权限,如 <uses-permission android:name="android.permission.INTERNET" />。如果是新手,优先选择 Kivy + Buildozer,快速实现 Python 代码打包 Android;如果需要原生 UI 体验,尝试 BeeWare;如果需与 Android 原生功能深度交互,选择 Chaquopy。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。