Kivy用Buildozer打包调用Android服务报Class not found及release域名冲突问询
解决方法
核心问题原因
你最初出现类找不到的报错,根本原因是buildozer.spec中的services配置项处于注释状态,python-for-android打包时不会自动生成对应的服务Java类,所以调用时找不到类。使用Kivy官方保留域名的配置只是刚好匹配了参考项目的类路径,没有解决根本配置问题。
正式发布可用的配置方案
- 第一步:恢复自定义包配置,不要占用Kivy官方保留域名,修改
buildozer.spec对应配置:
[app] title = My Application # 自定义包名,可根据需求修改 package.name = myapp # 替换为你自己的域名,没有实际域名也可自定义格式合法的字符串即可 package.domain = org.test # 去掉services配置前的注释,声明你的服务,格式为「服务名:服务入口脚本路径」 # 如果服务逻辑在单独的service.py中,改为 Myservice:service.py services = Myservice:main.py
- 第二步:修改
main.py中的服务类调用路径,和你的包配置对应即可:
# 路径规则:包域名倒写.包名.Service+你定义的服务名 service = autoclass('org.test.myapp.ServiceMyservice')
- 第三步:清理旧的打包缓存后重新打包即可,debug和release包都可正常运行,不会触发保留域名报错。
临时测试替代方案
如果只是个人测试不需要公开发布,也可以保留org.kivy域名的配置,打包前在终端执行以下命令绕过限制即可打release包:export BUILDOZER_ALLOW_KIVY_ORG_DOMAIN=1
内容的提问来源于stack exchange,提问作者mehdi alizade
相关产品推荐
相关产品推荐

