Flutter Windows 安装 msix 后桌面应用卡在白屏上
Flutter Windows Desktop app gets stuck on white screen after msix installation
背景
我刚刚为 windows 机器开发了我的第一个 flutter 桌面应用程序。该应用程序在 developing/debugging 期间运行良好,但我正在尝试将其作为应用程序在发布模式下进行测试。
完成了什么
- 我使用 pub msix 创建了一个 msix。
- 为了签名,我都试过了
自己的证书和msix自带的测试证书
默认包。
- 我已经尝试过稳定版和 Beta 版。
实际问题
当我在其他系统上安装应用程序时(甚至在我调试应用程序的实际系统上)。我可以成功安装 msix 安装程序 我可以看到我的应用程序列在应用程序中,但是当我尝试打开它时,它卡在 blank/white 屏幕上。没有 UI 渲染。如果我尝试最大化 window,它会进入 App not responding 状态。
任何帮助将不胜感激。
提前致谢。
更新/新发现
翻了提供的链接,揪了几天头发,在这条推文中找到了答案
https://twitter.com/FilledStacks/status/1436280577439715338?s=20
所以主要问题是应用程序使用了一些在其他机器上不起作用的绝对路径(发布后)
1- 我的应用程序使用了一个数据库,所以我确保该数据库路径是相对于应用程序文档目录的。
2-现在构建也引用了一些依赖项,它们的路径也是绝对的。我注意到 cmake_install.cmake
中有一个标志 CMAKE_INSTALL_LOCAL_ONLY
,但该标志未在任何地方设置。
这是flutter build windows -v
的日志
https://pastebin.com/LAeshUMY
-- 现在我正在寻找一种将所有路径转换为相对路径的正确方法,以便构建可以在不同机器上安装,而不是仅在本地安装。
你说的是msix包,看看是app的问题还是打包过程的问题
运行 flutter build windows
没有 flutter pub run msix:create
,然后 运行 创建的 .exe 文件以查看它是否有效。
顺便说一句,这里提到这个问题:https://github.com/flutter/flutter/issues/74507
这里('maximizing' 问题):Black screen appears on maximizing and minimizing flutter desktop app
我找到了解决方案。
主要问题是应用程序正在寻找一些依赖项,但无法找到它们。如前所述 here.
在发布模式下找不到的原因可能是以下之一,
- 您正在使用系统中特定路径上可用的某些 dll(依赖于 dll 的程序包),但是当您发布该应用程序时,该(绝对)路径不再有效。
- 您正在添加一些具有绝对路径的资产(仅适用于您的系统)。
解法:
- 如果它是一个 dll,您应该将其添加到发布文件夹中。在我的例子中是 sqlite3.dll
- 如果它是其他资产,那么您应该始终使用相对路径。
背景
我刚刚为 windows 机器开发了我的第一个 flutter 桌面应用程序。该应用程序在 developing/debugging 期间运行良好,但我正在尝试将其作为应用程序在发布模式下进行测试。
完成了什么
- 我使用 pub msix 创建了一个 msix。
- 为了签名,我都试过了 自己的证书和msix自带的测试证书 默认包。
- 我已经尝试过稳定版和 Beta 版。
实际问题
当我在其他系统上安装应用程序时(甚至在我调试应用程序的实际系统上)。我可以成功安装 msix 安装程序 我可以看到我的应用程序列在应用程序中,但是当我尝试打开它时,它卡在 blank/white 屏幕上。没有 UI 渲染。如果我尝试最大化 window,它会进入 App not responding 状态。 任何帮助将不胜感激。 提前致谢。
更新/新发现
翻了
所以主要问题是应用程序使用了一些在其他机器上不起作用的绝对路径(发布后)
1- 我的应用程序使用了一个数据库,所以我确保该数据库路径是相对于应用程序文档目录的。
2-现在构建也引用了一些依赖项,它们的路径也是绝对的。我注意到 cmake_install.cmake
中有一个标志 CMAKE_INSTALL_LOCAL_ONLY
,但该标志未在任何地方设置。
这是flutter build windows -v
的日志
https://pastebin.com/LAeshUMY
-- 现在我正在寻找一种将所有路径转换为相对路径的正确方法,以便构建可以在不同机器上安装,而不是仅在本地安装。
你说的是msix包,看看是app的问题还是打包过程的问题
运行 flutter build windows
没有 flutter pub run msix:create
,然后 运行 创建的 .exe 文件以查看它是否有效。
顺便说一句,这里提到这个问题:https://github.com/flutter/flutter/issues/74507
这里('maximizing' 问题):Black screen appears on maximizing and minimizing flutter desktop app
我找到了解决方案。
主要问题是应用程序正在寻找一些依赖项,但无法找到它们。如前所述 here.
在发布模式下找不到的原因可能是以下之一,
- 您正在使用系统中特定路径上可用的某些 dll(依赖于 dll 的程序包),但是当您发布该应用程序时,该(绝对)路径不再有效。
- 您正在添加一些具有绝对路径的资产(仅适用于您的系统)。
解法:
- 如果它是一个 dll,您应该将其添加到发布文件夹中。在我的例子中是 sqlite3.dll
- 如果它是其他资产,那么您应该始终使用相对路径。