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

如何设计适配多平台构建的Kivy项目布局?

适配多平台的Kivy项目布局方案(支持PyPI/Android/Windows/iOS)

先上兼顾所有场景的扁平化项目结构,只做了小调整就能解决Android构建问题,同时适配其他平台:

.
├── pyproject.toml
├── buildozer.spec
├── pyinstaller.spec  # 可选,嫌麻烦也可以用命令行参数
├── my_app/
│   ├── __init__.py
│   ├── __main__.py
│   ├── core/
│   │   ├── main.py  # 把你原来的main.py移到这个子目录里
│   │   └── source/  # 原资源目录不动,跟着main.py走
│   └── resources/    # 可选,资源多的话单独放这里更清晰
└── tests/            # 可选,测试代码按需添加

各平台适配细节

PyPI & pipx 支持

  • 在pyproject.toml里配置入口点,指向my_app.__main__的启动函数:
    [project.scripts]
    my-app = "my_app.__main__:run_app"
    
  • __main__.py写极简启动逻辑,不用改动业务代码:
    from my_app.core.main import run_app
    
    if __name__ == "__main__":
        run_app()
    
    这样pipx安装后,直接敲my-app就能启动应用。

Android 构建(Buildozer)

  • 之前构建失败的原因是Buildozer默认找项目根目录的main.py,现在在buildozer.spec里明确指定入口路径:
    source.dir = .
    source.include_exts = py,png,jpg,kv,atlas
    source.main.py = my_app/core/main.py
    
  • 资源文件会被Buildozer自动打包,只要代码里用相对路径引用(比如os.path.join(os.path.dirname(__file__), 'source/xxx.png'))就没问题。

Windows 打包(PyInstaller)

  • 直接用命令行打包:
    pyinstaller --name MyApp --windowed my_app/__main__.py
    
  • 有资源文件的话,加--add-data参数,或者写pyinstaller.spec配置datas项:
    a = Analysis(
        ['my_app/__main__.py'],
        datas=[('my_app/core/source/*', 'my_app/core/source')],
        # 窗口、图标等配置按需添加
    )
    
  • 用__main__.py当入口,PyInstaller能自动识别模块结构,不会出现路径找不到的问题。

iOS 构建(Buildozer/Kivy-iOS)

  • 用Buildozer的话,配置和Android几乎一致,在buildozer.spec里指定相同的source.main.py路径即可。
  • 用Kivy-iOS的话,确保入口脚本指向my_app/core/main.py,打包时把资源目录一起加入,代码里的资源引用同样用相对路径。

核心调整逻辑

把业务逻辑的main.py移到子模块下,既避免根模块的命名冲突,又让各平台的入口配置更清晰;用__main__.py做统一启动入口,不用为每个平台单独写启动脚本,保持布局简洁的同时兼容所有场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 14:01:11