之前在 [ 跨平台应用程序开发框架那家强?] 一贴总请教了一下跨平台框架选型的问题。现在已经进入 Dart 和 Flutter 初学阶段, 目前遇到一些疑惑,再次请教一下各位:
Flutter 在生成目标平台的时候和之前的 Qt 一样都付带一个 Flutter 运行支持库(比如:Windows 会生成一个 flutter_windows.dll ; Android 会生成多个不同架构的 libflutter.so ),第三方框架附带一个运行支持库也不是什么问题,问题是:
这个库文件是只编译打包了程序依赖的部分,还是不论程序是否用到都一并讲整个框架打包进去(类似 Qt 支持库)? 之所以这样问无非就是整个库太大了(比如:flutter_windows.dll 整个库最小就 15M ),很多时候远远大于纯原生程序,这个问题如何破?
运行支持库支持静态直接编译进目标程序文件总吗,特别是 Linux / Windows 这种 PC 平台上是否支持?
这个运行支持库是只能固定这个名字还是可以做自定义(比如: 修改 CMakelist.txt 等方式),毕竟每个平台应用的目录结构,命名规则或者说开发者习惯等都有一些不同,如果是不能修改看起来就很怪异!
运行支持库生成的时候如何分别增加平台二进制包独有的扩展属性,比如:Windows 下 flutter_windows.dll 这个库 就不包含 版本信息,含文件说明、文件版本、版权等信息。我看框架生成的 exe 都支持这些扩展属性,所以我想应该是可以通过修改 CMakelist.txt 等方式实现。
除了上面运行支持库,框架还会生成一个 data 目录里面又包含了很多文件(如下图),这个文件夹也是必须的吗,还是仅仅是我的程序默认需要这个(因为我删除之后程序启动就闪退)?说实话这个文件及其里面的东西不论从大小( app.so 3M 多)还是里面文件的命名方式( windows 下 app.so )等还是都很难让人感觉到专业。
不知道这一些问题是一个跨平台框架需要考虑的问题吗,还是只要实现快速跨平台开发即可,根本不用考虑包大小和个平台特异性和规范的问题?我认为一个应用除了 性能,开发便捷之外,臃肿和是否符合各平台规范和特性应该也应该考量
1
jifengg 2023-07-28 09:45:43 +08:00
最近也用 flutter 做了一个 windows 项目,感觉楼主确实想得挺远的。
release 里的 flutter_windows.dll 15m ,个人感觉应该算跨平台的一个妥协吧,其实不算特别大了。 你的问题如果是比较懂 c++的,看 windows 目录下的源码可能可以找到答案。不过我不懂,所以我都是保持原样。 app.so 这个,他正是你的 dart 代码编译出来的二进制,这个是必须的。 flutter 做 windows 还有一个痛点,就是他是用自己的字体渲染中文,不会读取系统字体,代码里也没法设置系统字体。 而默认的字体渲染中文,经常会出现方框。所以必须额外自带一个字体文件,才能比较好的解决中文乱码问题。 这个字体无形中也增加了整个程序的体积。 |
2
ac169 OP @jifengg
1 2 讨论运行支持库大小的问题并不是说要追寻绝对大小,而是对于初学者的我不知道官方有没有做最基本的优化(比如:按需编译),按理来说对于大厂这些都是基本的但是运行支持库确实很大所以很疑惑 3 4 讨论自定义或平台细节问题的出发点还是,虽然用的第三方库来做但也不代表说对细节上没有要求,不想做一个与平台原生风格的差异太大的东西,至少我感觉不是那么好. |