Kivy应用在Android真机启动崩溃,报_JavaClass__cls_storage属性错误
Kivy APK在Android 11/13真机启动崩溃,BlueStacks正常,报
AttributeError: 'Class' object has no attribute '_JavaClass__cls_storage' 问题概述
- 开发的简易Kivy应用生成APK后,在BlueStacks模拟器可正常运行
- 在Android 11和13真机上启动即崩溃
- Logcat调试时持续输出错误:
I python: AttributeError: 'Class' object has no attribute '_JavaClass__cls_storage'
- 当前使用Cython 0.29.36,怀疑版本兼容性问题,调整Cython版本及依赖配置后未解决
应用代码示例
# main.py from kivy.app import App from kivy.uix.label import Label class TestKivyApp(App): def build(self): return Label(text="Hello Kivy") if __name__ == "__main__": TestKivyApp().run()
Buildozer配置文件(buildozer.spec)
[app] title = TestKivyApp package.name = testkivy package.domain = org.test source.dir = . source.include_exts = py,png,jpg,kv,atlas version = 0.1 requirements = python3,kivy orientation = portrait fullscreen = 0 android.api = 33 android.apptheme = @android:style/Theme.Holo.Light android.sdk = 24 android.ndk = 25b android.ndk_api = 21 android.arch = armeabi-v7a android.buildtools = 30.0.3 android.use_aapt2 = True android.permissions = INTERNET
已尝试的解决方案
- 调整Cython版本(测试过0.29.30、0.29.35、3.0.0+)
- 修改buildozer.spec中的
android.api、android.ndk版本 - 清理buildozer缓存后重新构建
排查与解决建议
1. 锁定兼容的Cython版本
该报错多由Cython与python-for-android的兼容性冲突导致,建议指定Cython 0.29.32(这是python-for-android构建Kivy应用的稳定兼容版本),修改buildozer.spec的requirements:
requirements = python3,kivy,cython==0.29.32
2. 确保python-for-android版本兼容
指定python-for-android的稳定分支,避免使用开发版带来的兼容性问题:
# 在[app]区块添加 p4a.branch = stable
3. 排查Java类隐式引用问题
_JavaClass__cls_storage是python-for-android中Java类绑定的内部属性,若代码中存在直接/间接调用Android API的逻辑(比如第三方Kivy扩展、自定义Android交互代码),需确保相关依赖正确引入,且没有未初始化的Java类调用。
4. 调整Android构建参数
- 匹配目标系统的
android.ndk_api:Android 11对应30,Android 13对应33,修改配置:android.ndk_api = 33 - 构建调试版APK获取详细日志:
查看Logcat中崩溃前的上下文信息,定位触发错误的具体类。buildozer android debug deploy run logcat
5. 彻底清理构建缓存
清理旧的构建文件后重新编译,避免缓存导致的依赖冲突:
buildozer android clean buildozer android debug
内容的提问来源于stack exchange,提问作者Samet YANIK
相关产品推荐
相关产品推荐

