精华内容
下载资源
问答
  • 手把手教你编译Flutter engine

    千次阅读 2019-12-31 16:06:51
    手把手教你编译Flutter engine 欢迎关注姊妹篇 《手把手教你解决flutter engine内存泄漏》 《flutter engine编译问题汇总》 flutter已经到了1.7 了,小伙伴还没有使用的赶紧试试吧,如果想更...

     

    转自:https://juejin.im/post/5c24acd5f265da6164141236

    推荐原文阅读,备份防丢

    手把手教你编译Flutter engine

     

    一图说明

     

     

    欢迎关注姊妹篇

    《手把手教你解决flutter engine内存泄漏》

    《flutter engine编译问题汇总》

    flutter已经到了1.7 了,小伙伴还没有使用的赶紧试试吧,如果想更深入的把玩,可以尝试编译一下官方的flutter engine,地址在 github.com/flutter/eng…

    为什么要编译engine

    1. 学习
    2. 改造 第二篇会介绍怎么样改造engine来解决内存泄漏问题,满足自己业务需求。

    tips: 建了个qq群,发布最新修复版【flutter移动开发】217429001 flutter代码库上线了,狂戳这里👉

    事前准备

    • 翻墙
    • 机器,linux,mac,或windows
    • git 命令
    • IDE , android stuido或xcode,如需编译x86模拟器版还需xcode9.4版本
    • ssh客户端,用户github身份验证
    • python,默认自带
    • gclient 注意要经常更新 安装地址👉
    • 也可以直接使用命令安装depot_tools
    •  

    9.4 下载地址 developer.apple.com/download/mo…

    Can't build Flutter engine with Xcode 10 because it removed i386 support - but that's required at this point. I believe there's another issue open for this but I can't find it, @cbracken knows more.

    $ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
    $ export PATH=$PATH:/path/to/depot_tools
    复制代码
    • python --version 需要2.7版本

    如何编

    1. 下载

    • 1.1 从官网fork工程到自己工程,github.com/flutter/eng…
    • 1.2 配置ssh秘钥 help.github.com/articles/ge…
    • 1.3 在flutter工程的同级目录执行 gclone xxx, xxx为你自己fork后的engine地址,为了后面方便
    • 1.4 在engine目录创建.gclient文件 ,执行
    $ vim .gclient
    复制代码

    内容为

    solutions = [
      {
        "managed": False,
        "name": "src/flutter",
        "url": "git@github.com:<your_name_here>/engine.git",
        "custom_deps": {},
        "deps_file": "DEPS",
        "safesync_url": "",
      },
    ]
    复制代码
    • 1.5 切换到engine目录
    $ cd engine
    复制代码
    • 1.6 获取Flutter所依赖的所有源代码,时间超长,大概一个半小时
    $ gclient sync
    复制代码

    glcient sync 失败常见问题

    flutter engine 群友反馈:

    • 错误 1 src/flutter/tools/android_support/download_android_support.py urllib2.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:727)>

    解决方案: 出现以上错误的原因是因为python的版本问题,在python2.6(含2.6)以下版本中,在访问HTTPS的网站时,TLS握手期间不会检查服务器X509的证书签名是否是CA的可信任根证书。这种局面在python2.7 3.4 和 3.5版本中得到了修改。参考 www.jianshu.com/p/d3b60e42f…

    • 错误 2 ping chrome-infra-packages.appspot.com 不通的话,需要挂代理服务器,然后shell命令执行
    export http_proxy=http://127.0.0.1:1087;
    export https_proxy=http://127.0.0.1:1087; 
    复制代码

    再次 gclient syc

    • 错误3 SSL error: no alternative certificate subject name matches

     

     

     

    解决方案: 同上

     

     

     

    参考于 stackoverflow.com/questions/2…

    • 1.7 进入src/flutter目录,拉取操作
    $ cd src/flutter
    $ git remote add upstream git@github.com:flutter/engine.git
    $ git pull upstream master
    复制代码

    后面的操作不要看官方的了,最好的文档已经江湖失传了,仅此一篇

    2 回滚

    • 2.1 找到当前flutter对应的engine版本 类似(这里替换成你自己的flutter目录)
    $  cat /Users/boob/Documents/flutter/bin/internal/engine.version 
    复制代码

    如1.5.4 hot fix版的engine版本号,这是一个commit号

    52c7a1e849a170be4b2b2fe34142ca2c0a6fea1f
    复制代码

    v1.7.8+hotfix.3 版engine版本号是

    54ad777fd29b031b87c7a68a6637fb48c0932862
    复制代码
    • 2.2 回滚当时提交版本 执行命令
    bogon:src boo$ git reset --hard 52c7a1e849a170be4b2b2fe34142ca2c0a6fea1f 
    HEAD is now at 52c7a1 Fix dart/create_updated_flutter_deps script so it actually updates flutter/DEPS. (#175)
    
    复制代码

    查看当前版本号

    $  git rev-parse HEAD
    复制代码

    只同步指定commit版本命令

    gclient sync --with_branch_heads --with_tags  
    复制代码

    3. 创建engine工程

    编译选项具体可以参考 github.com/Natoto/flut…

    以ios为例

    生成ios设备用的未经编译的工程

    $ ./flutter/tools/gn --ios --unoptimized
    复制代码

    生成ios设备用的工程,不带符号表

    ./flutter/tools/gn --ios
    复制代码

    生成release工程

    $ ./flutter/tools/gn --ios --runtime-mode=release
    复制代码

    生成模拟器版本工程

    ./flutter/tools/gn --ios --simulator 
    复制代码

    生成模拟器用的未优化版本

    ./flutter/tools/gn --ios --simulator --unoptimized  
    复制代码

    也可以可以指定cpu

    ./flutter/tools/gn --runtime-mode=release --ios --ios-cpu=arm64
    复制代码

    4. 编译

    一种编译模式三千多个文件,大概一个半小时

    编译relase工程

    $ ninja -C out/ios_release
    复制代码

    编译设备用debug模式

     ninja -C out/ios_debug && ninja -C out/host_debug
    复制代码

    编译设备用debug模式,带符号

     ninja -C out/ios_debug_unopt && ninja -C out/host_debug_unopt
    复制代码

    编译模拟器用debug模式

     ninja -C out/ios_debug_sim_unopt && ninja -C out/host_debug_unopt
    复制代码

    如何用

    经过漫长的编译之后,终于可以看到产物了,flutter.framework 就是对应模式的产物 有两种使用方法,一边开发一边测试,或无需修改,直接使用

    1. 在工程中使用
    flutter run --local-engine-src-path /Users/boo/Documents/engine/src --local-engine=ios_debug_unopt
    复制代码
    1. 直接拷贝替换掉flutter目录里面的engine就可以立即使用了

      /Users/boo/Documents/flutter/bin/cache/artifacts/engine
    2. 使用例子 github.com/Natoto/flut…


    YY Flutter技术积累相关链接

    一行代码教你解决FlutterPlatformViews内存泄露 by AShawn

    手把手教你在Flutter项目优雅的使用ORM数据库 by williamwen1986

    flutter通用基础库flutter_luakit_plugin by williamwen1986

    github - flutter_luakit_plugin使用例子 by williamwen1986

    手把手教你编译Flutter engine by 共田君

    手把手教你解决 Flutter engine 内存泄漏 by 共田君

    github - 编译产物下载 修复内存泄漏后的flutter engine(可直接使用)by 共田君

    github demo - 修复内存泄漏后的flutter engine by 共田君

    持续更新中...

    展开全文
  • 本文的前提是你已经安装好了VS Code,并且安装了Flutter和Dart扩展插件。 1. 新建Flutter项目 查看——命令面板,或者Ctrl + Shift + P 输入 Flutter: New Project ...2. 编译Flutter项目 调试—...

    本文的前提是你已经安装好了VS Code,并且安装了Flutter和Dart扩展插件。

     

    1. 新建Flutter项目

     查看——命令面板,或者Ctrl + Shift + P

    输入 Flutter: New Project

    然后输入项目名称,选择项目路径即可。

    然后VS Code会自动打开一个新窗口示例。

     

     

     

     

    2. 编译Flutter项目

     调试——启动调试,或者快捷键F5即可编译并且自动部署App。

    如果提示选择编译环境,请选择Dart & Flutter。

     

     

     

    3.编译下载的别人的项目

     在编译别人的项目之前,请先修改一下两个变量以匹配你的环境

    一个是位于android\build.gradle中的 com.android.tools.build:gradle

    另一个是位于android\gradle\wrapper\gradle-wrapper.properties中的 distributionUrl

    具体请参考 Flutter - 下载别人的Flutter项目,本地编译不过 

     

    然后需要配置一下Flutter sdk的路径,也就是Android Studio中的FLUTTER_PATH(这个是一次性的,配置好一次,以后就不需要配置的)

    文件——首选项——设置,搜索fluttersdkpath,入红框所示,填入你的Flutter路径即可。

    下面的那个是paths,是一个数组,可以存放多个不同版本的Flutter,一般情况下不需要的。

     

     

     

     

    最后按F5即可编译。

     

    转载于:https://www.cnblogs.com/hupo376787/p/10035354.html

    展开全文
  • xcode编译Flutter IOS工程时找不到Swift库报错 为了在app中加入播放声音的功能,使用了audioplayers插件,运行Android工程没有问题,但运行IOS工程时报错。 报错信息如下: ld: warning: Could not find or use auto...

    xcode编译Flutter IOS工程时找不到Swift库报错

    为了在app中加入播放声音的功能,使用了audioplayers插件,运行Android工程没有问题,但运行IOS工程时报错。

    报错信息如下:

    ld: warning: Could not find or use auto-linked library 'swiftObjectiveC'
    ld: warning: Could not find or use auto-linked library 'swiftCoreGraphics'
    ld: warning: Could not find or use auto-linked library 'swiftUIKit'
    ld: warning: Could not find or use auto-linked library 'swiftMetal'
    ld: warning: Could not find or use auto-linked library 'swiftCoreFoundation'
    ld: warning: Could not find or use auto-linked library 'swiftCompatibility50'
    ld: warning: Could not find or use auto-linked library 'swiftDispatch'
    ld: warning: Could not find or use auto-linked library 'swiftAVFoundation'
    ld: warning: Could not find or use auto-linked library 'swiftCoreMedia'
    ld: warning: Could not find or use auto-linked library 'swiftCompatibilityDynamicReplacements'
    ld: warning: Could not find or use auto-linked library 'swiftCoreImage'
    ld: warning: Could not find or use auto-linked library 'swiftCoreAudio'
    ld: warning: Could not find or use auto-linked library 'swiftCoreMIDI'
    ld: warning: Could not find or use auto-linked library 'swiftUniformTypeIdentifiers'
    ld: warning: Could not find or use auto-linked library 'swiftDarwin'
    ld: warning: Could not find or use auto-linked library 'swiftMediaPlayer'
    ld: warning: Could not find or use auto-linked library 'swiftSwiftOnoneSupport'
    ld: warning: Could not find or use auto-linked library 'swiftQuartzCore'
    ld: warning: Could not find or use auto-linked library 'swiftCore'
    ld: warning: Could not find or use auto-linked library 'swiftsimd'
    ld: warning: Could not find or use auto-linked library 'swiftCompatibility51'
    ld: warning: Could not find or use auto-linked library 'swiftFoundation'
    

    截图:
    在这里插入图片描述

    原因

    在Xcode中混编OC和Swift需要Bridging Header桥接文件,而我的项目中没有这个文件。

    解决方案:

    1.在工程中任意创建一个Swift文件,若无桥接文件Xcode会提示是否创建Bridging Header桥接文件,点击创建即可。
    2.进入工程targetsBuild Settings 然后设置 Always Embed Swift Standard LibrariesYES

    总结

    造成这个问题的原因是工程要使用OC和Swift混编,但是并没有初始化,工程中没有桥接文件所导致的,只要在工程中创建桥接文件即可解决。

    参考1
    参考2

    展开全文
  • 针对iOS在Mac平台上编译Flutter引擎 1、配置depot_tools git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git 配置depot_tools环境变量 export PATH="$PATH:/path/to/depot_tools" 如果...

    针对iOS在Mac平台上编译Flutter引擎

    针对iOS编译Flutter引擎

    现有iOS项目中以module的方式接入Flutter,并且从原生页面跳转进Flutter的时候,会发现内存飙升,并且在退出FlutterViewController之后,内存并没有销毁;就会导致原本手机内存就吃紧的情况下,造成app的闪退。

    虽然可以通过单引擎单FlutterViewController的方式来抵消部分内存消耗,但是使用单引擎单FlutterViewController来跳转Flutter制定页面的时候就显得不方便,并且FlutterViewController的setInitialRoute方法会失效,导致使用setInitialRoute来跳转指定Widget页面的时候,window.defaultRouteName收到的总是 “/”,得不到设定的数据。

    之所以使用单引擎单FlutterViewController的方式会出现这种问题,是因为FlutterEngin在启动的时候就默认加载了Widget,导致设置setInitialRoute的时候不生效。

    为了探究这个问题,就需要拿到flutter有关engin的源码,看了源码后,自然就会有修改源码的冲动;修改后如何进行编译呢?

    接下来将会讲述Flutter.framework的编译配置过程

    1、配置depot_tools

    git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
    
    配置depot_tools环境变量
    export PATH="$PATH:/path/to/depot_tools"
    

    如果下载过程中出现443: Operation timed out,

    在这里插入图片描述

    最后在使用的终端中设置临时端口:
    export http_proxy=http://127.0.0.1:1080   //这里的端口号一定要与你使用的的dai-li端口一致
    export https_proxy=http://127.0.0.1:1080  //这里的端口号一定要与你使用的的dai-li端口一致
    

    设置完之后,就能正常拉取depot_tools代码。

    2、获取flutter的engine源码和编译需要的第三方库

    cd进去桌面(Desktop)或者别的目录,创建一个flutter_engine目录

    cd ~/Desktop
    mkdir flutter_engine
    cd flutter_engine
    

    在flutter_engine目录下创建一个**.gclient**,然后在.gclient输入以下内容:

    solutions = [
      {
        "managed": False,
        "name": "src/flutter",
        "url": "https://github.com/LVHAI/engine.git@b863200c37df4ed378042de11c4e9ff34e4e58c9",//此处可以修改为个人fork的flutter-engin地址,或者flutter-engin的github地址
        "custom_deps": {},
        "deps_file": "DEPS",
        "safesync_url": "",
      },
    ]
    

    上述中的 “url” 为flutetr-engine的地址,用 @ 符号进行分割的两部分分别为:

    https://github.com/LVHAI/engine.git:这部分代表flutetr-engine引擎地址
    b863200c37df4ed378042de11c4e9ff34e4e58c9:这部分代表你使用的flutter引擎版本号,路径为xxx/flutter/bin/internal/engine.version
    

    接下来进入到创建的 flutter_engine目录: 执行gclient sync命令

    gclient sync 查看不到执行过程
    

    如果想查看gclient sync的执行过程,可以在terminal键入:

    gclient sync --verbose 可以查看到命令的执行过程
    

    接下来只需耐性等待执行完成。

    在这里插入图片描述

    出现此种情况就表示成功了

    这一步主要是为了下载编译需要依赖的一些第三方文件:

    在这里插入图片描述

    3、开始进行编译

    首先进入到src目录下

    cd ~/Desktop/flutter_engine/src
    

    先来看一段github上面Wiki关于编译的描述:

    These steps build the engine used by flutter run for iOS devices.
    
    Run the following steps, from the src directory created in the steps above:
    
    git pull upstream master in src/flutter to update the Flutter Engine repo.
    
    gclient sync to update dependencies.
    
    ./flutter/tools/gn --ios --unoptimized to prepare build files for device-side executables (or --ios --simulator --unoptimized for simulator).
    
    This also produces an Xcode project for working with the engine source code at out/ios_debug_unopt
    For a discussion on the various flags and modes, see Flutter's modes.
    ./flutter/tools/gn --unoptimized to prepare the build files for host-side executables.
    
    ninja -C out/ios_debug_unopt && ninja -C out/host_debug_unopt to build all artifacts (use out/ios_debug_sim_unopt for Simulator).
    

    生成针对模拟器的Flutter.framework

    1、生成针对模拟器的未优化版本:

    ./flutter/tools/gn --ios --simulator --unoptimized
    ninja -C out/ios_debug_sim_unopt //ios_debug_sim_unopt,为上一步生成的文件夹名称
    

    2、生成针对模拟器的优化版本:

    ./flutter/tools/gn --ios --simulator
    ninja -C out/ios_debug_sim_unopt //ios_debug_sim_unopt,为上一步生成的文件夹名称
    

    在执行完成 ./flutter/tools/gn --ios --simulator之后,会在src目录下面看到多出来一个out文件目录,out里面存放的就是刚生成的针对模拟器版本的ios_debug_sim_unopt文件,有了这个文件,才能进行下一步的编译操作;

    ninja -C out/ios_debug_sim_unopt 这一步执行完,就会生成Flutter.framework,把个人生成的Flutter.framework文件放到项目工程中去替换之前的flutter文件,或者去flutter的安装目录中替换成字节生成的Flutter.framework;

    可以通过lipo -info查看Flutter.framework支持的型号:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xQlFWA0T-1585102634421)(./lipo_info.png)]

    生成针对手机的版本

    生成能在手机上运行的framework的时候,也分为优化版和未优化版,仅仅是在参数中有没有 –unoptimized这个参数。

    ./flutter/tools/gn --ios --unoptimized --runtime-mode=release //此处的--unoptimized可以删除掉
    ninja -C out/ios_xxx_unopt //out后面的文件名称为上一步生成的文件名
    

    有关–runtime-mode的模式,可以分为四种:

    Debug 
    Release
    Profile
    Headless test
    

    要选择那种方式编译,可自行选择。

    有关几种模式的介绍

    后续有空将会说明,FlutterViewController、FlutterEngin、FlutterMethodChannel、FlutterEventChannel以及Flutter的集中decodec存在关系。

    展开全文
  • 编译报错:Error: Cannot run with sound null safety, because the following dependencies don't support null safety: - package:english_words 解决方法: 降低到第三方依赖安全的版本 或者 在Android studio ...
  • 1,Flutter ios 端 Module ‘..... ‘ not found(找不到插件)的问题解决 解决: 一:请先确认您的MACBOOK上面已经安装pods并在项目的ios目录下面进行pos install。 二:如果是在运行模拟器时出现 Module '… ’ ...
  • 这里我们需要保证flutter跟Dart的SDK配置都没有问题,如下图: Flutter的SDK配置 Dart的SDK配置 这时候配置都已经配置好了,接下来使用用解决方法。 (二)解决方法: 重新打开一个cmd窗口:输入 flutter doctor ...
  • 因为之前一直卡在Initializing gradle步骤,然后查了CSDN修改了一次flutter.gradle文件之后,就一直报错,改回来也没用。没改之间就一直卡在Initializing gradle。 报错的代码: Exception in thread "main" ...
  • Flutter 编译时Running Gradle task ‘assembleDebug’… 卡住问题的处理 使用国内gradle镜像 修改项目android文件夹中 build.gradle文件如下(使用阿里的镜像): buildscript { repositories { maven { url '...
  • 用Android Stduio创建Flutter项目的时候,会出现各种问题,踩了一个又一个,最后编译的时候可能会出现一直显示Running Gradle task 'assembleDebug'然后就不动了,或者会显示Could not resolve io.flutter等问题,...
  • Flutter(3)— 编译和运行一、创建Flutter应用二、运行Flutter程序三、编译Flutter程序四、安装包结构五、总结 一、创建Flutter应用 如果使用Android Studio 或者Visual Studio Code 可以从IDE中创建一个新Flutter...
  • 研究基于android flutter...用来反编译flutter的dart文件的, 先把app解压出来,找到lib/armeabi-v7a/libapp.so,这个就是程序核心代码了,然后反编译它: python src/main.py -v libapp.so output 输出结果在output .
  • Flutter编译模式

    2019-01-02 18:37:55
    编程语言达到可运行的过程需要经过编译,因为机器最终认识的是二进制,所以编译就涉及到编译模式,编译模式分为两类:JIT和AOT。 JIT JIT全称Just In Time(即时编译),典型的例子就是v8,它可以即时编译并运行...
  • Flutter学习系列(3)— 编译和运行

    千次阅读 2019-04-18 22:07:53
    更多文章请访问我的个人网站:https://www.ccarea.cn ... 目录 一 创建Flutter应用 ...三 编译Flutter程序 四 安装包结构 五 总结 一 创建Flutter应用 如果使用Android Studio 或者Visual S...
  • Flutter Engine 编译笔记

    2021-07-19 20:54:18
    2、在 github 是 fork 一份 flutter-engine 代码 3、使用 gclient 同步代码 4、使用 gn 生成编译配置文件 5、使用 ninja 编译 笔者环境:MacBook、XCode、Android Studio、Git等。     1、准备 depot_toos...
  • package:inject Dart和Flutter编译时依赖项注入,类似于Dagger。 注意:这不是官方的Google或Dart团队项目。 E包:注入Dart和Flutter编译时依赖注入,类似于Dagger。 注意:这不是官方的Google或Dart团队项目。...
  • flutter sksl 着色器预热编译 怀疑是着色器编译卡顿时,可以通过命令运行app,查看Timeline raster耗时 flutter run --trace-skia --profile 进行着色器预编译信息收集 flutter run --cache-sksl 通过上一步生成的预...
  • Android Flutter混合编译

    2020-12-02 09:07:24
    1 为什么需要混合编译? Flutter只是一个用来解决跨平台的UI框架,最终还是要使用原生平台进行绘制,对于大部分和系统API无关的页面都可以使用Flutter处理,但是有一些获取系统信息的页面比如某个页面获取Android是否...
  • Flutter 的两种编译模式

    千次阅读 2018-08-02 16:07:19
    使用 Flutter 构建过 App 的人一定有一个困惑,就是 Flutter 编译出的产物到底是什么玩意。有时候分为几个文件,有时候是一个动态库,真的叫人摸不着头脑。 本文详细解释一下 Flutter编译模式。 编译模式的...
  • 初入Flutter的开发者,首先需要了解的便是如何编译运行flutter应用。与通常Android工程项目的编译不同,Flutter的打包编译是通过调用flutter命令行来实现的。 在一遍遍编译运行的过程中,你可能经常会思考:在每一...
  • 混合开发简介使用Flutter从零开始开发App是一件轻松惬意的事情,但对于一些成熟的产品来说,完全摒弃原有App的历史沉淀,全面转向Flutter是不现实的。因此使用Flutter去统一Android、iOS技术栈,把它作为已有原生App...
  • 01.Android Studio在编译Flutter的时候无法连接设备<no devices> 问题描述:Android Studio在编译Flutter的时候无法连接设备,但运行Android时设备可正常连接 参考:...
  • flutter sdk修改与编译 engine flutter 的 sdk基本的划分,engine中包含了第三方库,用于底层交互,framework封装了自己的一套render和gesture等 那么这些都是如何编译进apk中呢? 基本了解之后,构建engine...
  • xcode编译提示:/bin/sh: /packages/flutter_tools/bin/xcode_backend.sh: No such file or directory 或者 ld: warning: directory not found for option ‘-L/xxxx/build/ios/Debug-iphoneos/path_provider’ ld: ...
  • 解决方法:在Flutter项目中pubspec.yaml将出现问题的插件的版本号切换为指定版本,即去掉 ^ 符号,因为有些插件用最新的可能会出现不兼容的问题,同时确保Flutter版本与开发项目时所用的版本一致。 2、[VERBOSE-2:...
  • Flutter engine编译

    千次阅读 2018-07-02 14:02:22
    背景:之前调研过移动方向的技术发展趋势,我觉得flutter的方向是未来的一个方向.但是不是flutter这种技术暂时还不好说,但fluuter...学习一种语言,最简单的就是看源码,看源码第一步就是先编译。所以我们先搭建编...
  • Flutter初次编译报错

    2019-05-10 16:10:41
    F/flutter (10109): [FATAL:flutter/shell/common/switches.cc(133)] Check failed: mapping && size. Unable to resolve symbols: _binary_icudtl_dat 解决办法: 切换到master,更新代码 运行如下...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,459
精华内容 4,183
关键字:

编译flutter