使用Buildozer构建的Kivy安卓App导入KivyMD后启动闪退如何解决?
KivyMD导入后安卓端启动闪退问题
我原本的App使用Kivy开发,安卓端运行正常,想要改用KivyMD优化界面。首先我在buildozer依赖中添加了KivyMD后编译测试,一切正常。但一旦在脚本中导入KivyMD相关内容,App就会在启动页结束后立刻闪退,我的脚本是非常基础的Hello World程序,不存在其他导致崩溃的逻辑。
测试脚本
from kivymd.app import MDApp # 该导入语句导致程序崩溃 from kivy.uix.screenmanager import Screen from kivy.uix.label import Label from kivy.lang import Builder from kivy.app import App class test(App): def build(self): return Label(text='Hello world') test().run()
错误日志
08-02 09:33:56.465 2201 2201 E LoadedApk: Unable to instantiate appComponentFactory 08-02 09:33:56.465 2201 2201 E LoadedApk: java.lang.ClassNotFoundException: Didn't find class "androidx.core.app.CoreComponentFactory" on path: DexPathList[[],nativeLibraryDirectories=[/system/priv-app/MiuiSystemUI/lib/arm64, /system/lib64, /system/product/lib64, /system/lib64, /system/product/lib64]] 08-02 09:33:56.465 2201 2201 E LoadedApk: at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:230) 08-02 09:33:56.465 2201 2201 E LoadedApk: at java.lang.ClassLoader.loadClass(ClassLoader.java:379) 08-02 09:33:56.465 2201 2201 E LoadedApk: at java.lang.ClassLoader.loadClass(ClassLoader.java:312) 08-02 09:33:56.465 2201 2201 E LoadedApk: at android.app.LoadedApk.createAppFactory(LoadedApk.java:258) 08-02 09:33:56.465 2201 2201 E LoadedApk: at android.app.LoadedApk.updateApplicationInfo(LoadedApk.java:372) 08-02 09:33:56.465 2201 2201 E LoadedApk: at android.app.ActivityThread.handleApplicationInfoChanged(ActivityThread.java:5799) 08-02 09:33:56.465 2201 2201 E LoadedApk: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2036) 08-02 09:33:56.465 2201 2201 E LoadedApk: at android.os.Handler.dispatchMessage(Handler.java:107) 08-02 09:33:56.465 2201 2201 E LoadedApk: at android.os.Looper.loop(Looper.java:224) 08-02 09:33:56.465 2201 2201 E LoadedApk: at android.app.ActivityThread.main(ActivityThread.java:7590) 08-02 09:33:56.465 2201 2201 E LoadedApk: at java.lang.reflect.Method.invoke(Native Method) 08-02 09:33:56.465 2201 2201 E LoadedApk: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539) 08-02 09:33:56.465 2201 2201 E LoadedApk: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
解决方案
- 修正脚本写法:你导入了
MDApp但仍继承Kivy原生的App类,这种混用本身就会导致运行异常,正确的KivyMD写法参考如下:
from kivymd.app import MDApp from kivymd.uix.label import MDLabel class TestApp(MDApp): def build(self): return MDLabel(text='Hello world', halign='center') TestApp().run()
- 调整buildozer.spec配置:
- 确保依赖项版本匹配,完整依赖参考:
requirements = python3, kivy==2.1.0, kivymd==1.1.1,不匹配的版本会出现兼容性问题 - 找到
android.enable_androidx配置项,将默认的False修改为True,开启AndroidX支持即可解决找不到CoreComponentFactory类的报错 - 将
android.api配置项设置为30及以上,过低的安卓API版本不支持AndroidX
- 确保依赖项版本匹配,完整依赖参考:
- 重新编译前先清理旧构建缓存:执行
buildozer android clean,再执行buildozer android debug重新打包,避免旧缓存影响构建结果
内容的提问来源于stack exchange,提问作者ThaaoBlues
相关产品推荐
相关产品推荐

