You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Buildozer打包Kivy+Zbarcam安卓应用启动即崩溃求助

解决Kivy+Zbarcam安卓应用启动崩溃问题

1. 修正权限请求时机与组件初始化逻辑

你当前在全局作用域直接调用权限请求,会导致安卓环境未就绪时就触发操作,这是崩溃的核心原因之一。应将权限请求移至应用启动后的回调中,且等权限获取成功再启用Zbarcam:

from kivy.app import App
from kivy.lang import Builder
from kivy.clock import Clock
from pythonforandroid.recipes.android.src.android.permissions import request_permissions, Permission

demo = """
#:import ZBarCam kivy_garden.zbarcam.ZBarCam
BoxLayout:
    orientation: 'vertical'
    ZBarCam:
        id: zbarcam
        code_types: 'QRCODE', 'EAN13'
        opacity: 0  # 先隐藏,权限获取后再显示
    Label:
        size_hint: None, None
        size: self.texture_size[0], 50
        text: ', '.join([str(symbol.data) for symbol in zbarcam.symbols])
"""


class DemoApp(App):
    def build(self):
        self.root = Builder.load_string(demo)
        return self.root

    def on_start(self):
        # 延迟执行权限请求,确保安卓UI环境初始化完成
        Clock.schedule_once(lambda dt: self.get_permissions(), 0.1)

    def get_permissions(self):
        def permission_callback(permissions, results):
            if all(results):
                # 所有权限获取成功,显示扫码组件
                self.root.ids.zbarcam.opacity = 1
            else:
                # 权限被拒绝,可添加提示逻辑
                pass

        request_permissions(
            [Permission.CAMERA, Permission.WRITE_EXTERNAL_STORAGE, Permission.READ_EXTERNAL_STORAGE],
            permission_callback
        )

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

2. 完善buildozer.spec配置

打包配置文件中必须补充以下内容,确保依赖和权限被正确打包:

  • 权限声明:
android.permissions = CAMERA, WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE
  • 依赖配置:
requirements = python3,kivy,kivy-garden,zbarcam
android.add_jars = ./libs/zbar.jar  # 若使用本地jar包,按实际路径调整
android.arch = armeabi-v7a,arm64-v8a  # 适配主流安卓架构
  • 打包前执行garden install zbarcam,确保扫码组件被正确导入项目。

3. 匹配安卓版本要求

Zbarcam对安卓API版本有要求,在buildozer.spec中设置兼容的版本:

android.api = 33
android.minapi = 21
android.sdk = 24
android.ndk = 25b

4. 查看崩溃日志定位细节

若以上步骤无效,通过adb命令获取崩溃日志:

adb logcat | grep -E "AndroidRuntime|PythonRuntime"

日志会明确显示崩溃原因,比如so库加载失败、依赖缺失等,再针对性修复。

内容的提问来源于stack exchange,提问作者Sean Aldous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 00:00:31