适用于 Android 的 Kivy 应用程序无法加载图像

Posted

技术标签:

【中文标题】适用于 Android 的 Kivy 应用程序无法加载图像【英文标题】:Kivy App for Android Unable to Load Image 【发布时间】:2021-11-11 19:33:35 【问题描述】:

我通过 Buildozer 部署到 android 的 Kivy 应用程序无法在 Android 上正常启动,因为我添加了 .jpg 和 .wav 文件(用作背景图像和应用程序声音)。它在我的 Window 机器上运行得很好。

adb catlog 给我以下警告:Unable to load image </data/user/0/org.test.galaxy/files/app/assets/images/bg1.jpg>。但更重要的是,如果我在我的 android 模拟器中导航到这个文件路径,那个文件确实存在。

View all my code in this public repo

执行我的galaxy.kv 的第 10 行时抛出此错误,该行尝试使用source: root.resource_path('assets/images/bg1.jpg') 设置我的 Rectangle 的背景信息

最初,我只是使用相对路径并将其全部留给 Buildozer 来处理特定于操作系统的路径(我在某个地方读过这应该可以工作),但由于我有这个错误,我已经包含了resource_path()(感谢 *** 上的某个人)方法,该方法应该考虑操作系统特定的路径。下面是这段代码的样子:

def resource_path(self, relative_path):
    base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__)))
    print('base path:', base_path)
    return os.path.join(base_path, relative_path)

我的buildozer.spec 中的一些相关行(再次,通过上面的链接查看我的整个回购):

source.include_exts = py,png,jpg,kv,atlas,wav,ttf
...
requirements = python3,kivy

我是 Kivy 和 Buildozer 的新手,我显然错过了有关如何访问静态文件的一些内容。任何帮助将不胜感激。

【问题讨论】:

为了将来参考,在@JonathanRoux 指出问题所在后,我删除了所有resource_path() 的使用,它仍然可以正常工作。 【参考方案1】:

这可能是由于您的背景图像的分辨率太高。 请使用较小的图片重试。

【讨论】:

非常感谢!我将它换成较低分辨率的图像,现在它可以工作了。我如何让它与更大分辨率的图像一起使用?我一直在按照您的 Kivy 教程最终为 4K Android 智能电视构建不同的 Kivy 应用程序,因此需要大图像文件。

以上是关于适用于 Android 的 Kivy 应用程序无法加载图像的主要内容,如果未能解决你的问题,请参考以下文章

从 kivy/python 程序创建适用于 Android 的 APK [重复]

对 Kivy 的 Admob 支持(适用于 Android 的 Python)

如何打包适用于 iOS 的 Kivy 应用程序?

Kivy 和 buildozer “权限被拒绝”

无法在 Kivy 中绘制时钟回调

使用适用于 android 的字节播放声音