zoukankan      html  css  js  c++  java
  • Flutter在iOS中一些点

    1. ios对Flutter有如下依赖

    • Flutter.framework:     Flutter engine等;
    • APP.framework:业务代码, 由dart代码生成。App.framework也包含了kDartVmSnapshotData,kDartVmSnapshotInstructions,kDartIsolateSnapshotData,kDartIsolateSnapshotInstructions四个部分 ;
    • Flutter Plugin: plugin相关;
    • flutter_assets:  Flutter依赖的静态资源,如字体,图片等。

    2.  iOS工程是怎么路由到dart的?

    (1)ios初始化flutterVC

    FlutterViewController* flutterViewController = [[FlutterViewController alloc] initWithProject:nil nibName:nil bundle:nil];
    [flutterViewController setInitialRoute:@"myApp"];

    (2)dart项目的main函数启动并由window.defaultRouteName拿到route

    void main() {
          runApp(_buildWidget());
    }
    Widget _buildWidget() {
         String route = window.defaultRouteName;
         ....
         return widget;
    }

    (3)Flutter.framework渲染页面

     3. kernel_blob.bin文件的作用是什么?为什么模拟器运行需要此文件,真机运行不需要此文件?

      kernel_blob.bin是业务代码的产物 Dart kernel bytecode ,在debug调试的时候,Dart的代码有改动,则 kernel_blob.bin也会有相应的改变。release模式(AOT模式)下,dart编译器会用Dart kernel bytecode编译成二进制的arm集成代码。

       也就是说,模拟器运行是Debug模式(JIT模式),业务代码的来源是需要两个文件,一个是APP.framework里的App二进制代码一个是kernel_blob.bin。而真机运行是release模式(AOT模式),直接可以运行APP.framework里的App二进制代码。所以模拟器需要kernel_blob.bin文件,真机不需要kernel_blob.bin文件。

     4. Flutter项目里构建iOS包的常用命令

      4.1  flutter build

    (1)flutter build ios

    lipo -info .ios/Flutter/App.framework/APP  查看结果是armv7 arm64

    题外话:pod package打包iOS framework命令

    pod package hummer_container.podspec.json --spec-sources='git@gitlab.alipay-inc.com:ifoundation-ios/Specs.git' --no-mangle --force

    (2)flutter build ios --debug 

    lipo -info .ios/Flutter/engine/Flutter.framework/Flutter  查看结果是x86_64 armv7 arm64 

    (3) flutter build ios --simulator   

     lipo -info .ios/Flutter/App.framework/APP  查看结果是 x86_64

      4.2 flutter packages

    (1)flutter packages get

    当你在添加一个包后首次运行(IntelliJ中的’Packages Get’)flutter packages get,Flutter将找到包的版本保存在pubspec.lock。这确保了如果您或您的团队中的其他开发人员运行flutter packages get后回获取相同版本的包。

    (2)flutter packages upgrade

    根据pubspec.yaml中指定的版本约束下载所允许的最高可用版本。

  • 相关阅读:
    6-MySQL-Ubuntu-操作数据表的基本操作(一)
    5-MySQL-Ubuntu-操作数据库的基本操作语句
    11-Ubuntu-根目录下各目录的功能详细介绍
    4-Ubuntu-启动/关闭/重启mysql服务
    3-Windows-CMD启动mysql服务-连接本地mysql服务-连接远程mysql服务
    2-Ubuntu命令安装mysql服务器和客户端及安装后的简单验证操作
    1-Navicat无法远程连接Ubuntu上的MySQL(已解决)
    10-python基础—索引与切片总结
    Useful Things To Know About Machine Learning (机器学习中一些有用的知识)
    How to Use the TimeDistributed Layer for Long Short-Term Memory Networks in Python 译文
  • 原文地址:https://www.cnblogs.com/Xylophone/p/12028291.html
Copyright © 2011-2022 走看看