首页 > 解决方案 > Buildozer 和 Python-for-Android

问题描述

我在我的 Manjaro Linux 系统上创建了一个 Conda 环境。当我开发一个 Kivy 应用程序并运行它时,它运行良好。然后,当我将它编译成 APK 以在我的 Android 平板电脑上运行时,我遇到了一个奇怪的问题。我可以成功创建一个 APK 并将其安装在我的平板电脑上。但是... Python-For-Android 会在构建我的 APK 时下载我已经安装的软件包。有时它会下载我不使用的版本。有时它找不到我已经安装的包。

我的问题是:如何覆盖(可能在我的 Buildozer Spec 文件中)P4A 下载包(我猜它被称为食谱)并只使用我已经下载并安装在我的 Conda 环境中的包。(这样我编译的 APK 将与我在我的 Linux 机器上运行的 Kivy 应用程序完全相同。)

标签: pythonkivybuildozerp4apython-for-android

解决方案


我遇到了一个奇怪的问题。我可以成功创建一个 APK 并将其安装在我的平板电脑上。但是... Python-For-Android 会在构建我的 APK 时下载我已经安装的软件包。有时它会下载我不使用的版本

这不是一个奇怪的问题,这就是 python-for-android 的工作原理。它需要为android环境安装包,这不一定是使用本地的,即使是它仍然是python-for-android操作的一种更简单的方式。

我的问题是:如何覆盖(可能在我的 Buildozer Spec 文件中)P4A 下载包(我猜它被称为食谱)并只使用我已经下载并安装在我的 Conda 环境中的包

你不能。buildozer.spec 文件中有一些选项可以指定给定配方的源目录,但这需要指向项目的源目录(即对于 python 模块,根目录带有 setup.py),而不是在另一个 python 环境中安装包。

根据 conda 缓存包的方式,您可能可以将其指向它被拉取的内容,但这不适用于例如轮子。

这样我编译的 APK 将与我在我的 Linux 机器上运行的 Kivy 应用程序完全相同。

如果这是您的目标,您可以使用 指定事物的版本requirements=package==version,例如requirements=colorama==0.4.4. 但是,对于使用配方安装的软件包,并非所有版本都受支持,通常使用默认值是个好主意。例如,仅支持某些 python3 次要版本。


推荐阅读