V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ac169
V2EX  ›  Flutter

初学 Flutter 的一些疑惑

  •  
  •   ac169 · 2023-07-27 23:13:17 +08:00 · 2155 次点击
    这是一个创建于 478 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前在 [ 跨平台应用程序开发框架那家强?] 一贴总请教了一下跨平台框架选型的问题。现在已经进入 Dart 和 Flutter 初学阶段, 目前遇到一些疑惑,再次请教一下各位:

    Flutter 在生成目标平台的时候和之前的 Qt 一样都付带一个 Flutter 运行支持库(比如:Windows 会生成一个 flutter_windows.dll ; Android 会生成多个不同架构的 libflutter.so ),第三方框架附带一个运行支持库也不是什么问题,问题是:

    1. 这个库文件是只编译打包了程序依赖的部分,还是不论程序是否用到都一并讲整个框架打包进去(类似 Qt 支持库)? 之所以这样问无非就是整个库太大了(比如:flutter_windows.dll 整个库最小就 15M ),很多时候远远大于纯原生程序,这个问题如何破?

    2. 运行支持库支持静态直接编译进目标程序文件总吗,特别是 Linux / Windows 这种 PC 平台上是否支持?

    3. 这个运行支持库是只能固定这个名字还是可以做自定义(比如: 修改 CMakelist.txt 等方式),毕竟每个平台应用的目录结构,命名规则或者说开发者习惯等都有一些不同,如果是不能修改看起来就很怪异!

    4. 运行支持库生成的时候如何分别增加平台二进制包独有的扩展属性,比如:Windows 下 flutter_windows.dll 这个库 就不包含 版本信息,含文件说明、文件版本、版权等信息。我看框架生成的 exe 都支持这些扩展属性,所以我想应该是可以通过修改 CMakelist.txt 等方式实现。

    除了上面运行支持库,框架还会生成一个 data 目录里面又包含了很多文件(如下图),这个文件夹也是必须的吗,还是仅仅是我的程序默认需要这个(因为我删除之后程序启动就闪退)?说实话这个文件及其里面的东西不论从大小( app.so 3M 多)还是里面文件的命名方式( windows 下 app.so )等还是都很难让人感觉到专业。

    data

    不知道这一些问题是一个跨平台框架需要考虑的问题吗,还是只要实现快速跨平台开发即可,根本不用考虑包大小和个平台特异性和规范的问题?我认为一个应用除了 性能,开发便捷之外,臃肿和是否符合各平台规范和特性应该也应该考量

    5 条回复    2023-07-28 22:27:07 +08:00
    jifengg
        1
    jifengg  
       2023-07-28 09:45:43 +08:00
    最近也用 flutter 做了一个 windows 项目,感觉楼主确实想得挺远的。
    release 里的 flutter_windows.dll 15m ,个人感觉应该算跨平台的一个妥协吧,其实不算特别大了。
    你的问题如果是比较懂 c++的,看 windows 目录下的源码可能可以找到答案。不过我不懂,所以我都是保持原样。
    app.so 这个,他正是你的 dart 代码编译出来的二进制,这个是必须的。

    flutter 做 windows 还有一个痛点,就是他是用自己的字体渲染中文,不会读取系统字体,代码里也没法设置系统字体。
    而默认的字体渲染中文,经常会出现方框。所以必须额外自带一个字体文件,才能比较好的解决中文乱码问题。
    这个字体无形中也增加了整个程序的体积。
    ac169
        2
    ac169  
    OP
       2023-07-28 13:18:44 +08:00
    @jifengg

    1
    2
    讨论运行支持库大小的问题并不是说要追寻绝对大小,而是对于初学者的我不知道官方有没有做最基本的优化(比如:按需编译),按理来说对于大厂这些都是基本的但是运行支持库确实很大所以很疑惑

    3
    4
    讨论自定义或平台细节问题的出发点还是,虽然用的第三方库来做但也不代表说对细节上没有要求,不想做一个与平台原生风格的差异太大的东西,至少我感觉不是那么好.
    shuax
        3
    shuax  
       2023-07-28 17:12:23 +08:00
    flutter_windows.dll 这个文件是 flutter 提前编译好的,直接复制出来给你用,你动不了,除非你自己编译 flutter 引擎。如果你非要加点文件说明,也可以用 PE 编辑工具。

    data 下面的不能删,app.so 实际上就是你的 dart 代码编译出来的东西。icu 这个是处理 unicode 字符的东西,也不能删。

    压缩成 zip 占用 10M 左右吧,完全能接受了,相比 electron 程序。
    shuax
        4
    shuax  
       2023-07-28 17:20:48 +08:00
    @jifengg 中文不需要带字体啊,你设置 ThemeData 的 fontFamilyFallback 就好了。
    ac169
        5
    ac169  
    OP
       2023-07-28 22:27:07 +08:00
    @shuax

    运行支持库体积问题都还好, 比较现在设备对于这种文件大小都不是事. 最让人难受的是 3 4 这种细节问题, 特别是一直做原生开发的,我相信他们很难接受现在这种文件的组织形式! 那么能自定义目录结构和生成目标文件的名字吗, 比如: 将 data 目录改成 bin 目录, 把 flutter_windows.dll 改成 flutter.dll, app.so 改成 app.dll 或者. 我初步在 CMakelist.txt 文件中尝试了一下修改,结果失败了.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2627 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 15:25 · PVG 23:25 · LAX 07:25 · JFK 10:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.