集成Flutter到现有项目

解决在现有Android项目中集成Flutter遇到的问题 如何添加Flutter到现有Android项目 Flutter官方有详细的文档, 参考文档即可。 集成过程中遇到的神坑 主Module名称一定要为"app" 如果主Module名称不是"app", 执行Flutter#createView后,会出现native层的崩溃。并且会出现错误信息VM snapshot must be valid, 崩溃信息如下: #1 main SIGABRT 解析原... 阅读详情

集成Fluter到现有iOS & Android项目


Flutter集成到现有项目功能依旧处于preview状态(2019.01.06)
操作环境:MAC/Linux

共四步:

第一步

如果要集成到现有项目,需要切换Flutter SDK的channel到master,在终端执行:flutter channel master

第二步

创建Flutter项目模版,在终端执行:flutter create -t module flutter_module,
创建完成后,终端执行:

$ cd flutter_module
$ pwd
/some/path/to/flutter_module

/some/path/to/flutter_module路径就是Flutter项目的绝对路径。

此时项目主要目录应该如下:

+ flutter_dir
	+ flutter_module		#Flutter项目
		+ .android/
		+ .ios
		+ lib
			- main.dart		#flutter项目入口代码
	+ HostAndroidProject	#待集成Flutter的Android项目
		- settings.gradle
		- build.gradle
		+ app
	+ HostIOSProject		#待集成Flutter的iOS项目
		+  HostIOSProject
		+ HostIOSProjectTests
		+ HostIOSProjectUITests
第三步

开始集成到项目。

集成到Android项目

Android项目SDK配置

  • minSdkVersion >= 16
  • targetSdkVersion >= 27
  • compileSdkVersion >= 27
  • android依赖的兼容包系列必须大于27.1.1, con.android.support:xxx:27.1.1+

打开Android工程,在settings.gradle文件末尾追加:

setBinding(new Binding([gradle: this]))
evaluate(new File(
        settingsDir.parentFile,
        'flutter_module/.android/include_flutter.groovy'
))

同步gradle sync之后,宿主项项目在project视图下变为:

+ Flutter
	+ src
	- build.gradle
+ HostAndroidProject
	- settings.gradle
	- build.gradle
	+ app
		- build.gradle

在HostAndroidProject/app/build.gradle中添加项目依赖(也可以是需要接入Flutter项目的其他模块):

dependencies {
		...
		implementation project(':flutter')
		...
}

开始编码,创建FlutterActivity,在FlutterActivity的onCreate方法中修改代码:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_flutter)
    // 创建FlutterView,router地址为Page,此处很重要
    val content = Flutter.createView(this, lifecycle, "Page")
    // 设置FlutterView宽高
    val layoutParams = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)
    // 添加FlutterView到Activity
    addContentView(content, layoutParams)
}

Flutter集成到Android工作完成。

集成到iOS项目

iOS项目集成Flutter基于CocoaPods, 在HostIOSProject路径下创建podfile文件,如果项目已经集成了pod可忽略创建podfile文件。

poadfile文件中添加代码:

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'

target 'FlutteriOSIntergrationDemo' do
end
# 此处路径是flutter_module的绝对路径
flutter_application_path = '/some/path/to/flutter_module'
eval(File.read(File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')), binding)

最后在终端执行pod install
使用xcode打开HostIOSProject.xcworkspace,宿主项目的结构视图如下:

+ HostIOSProject
	+ HostIOSProject
	+ HostIOSProjectTests
	+ HostIOSProjectUITests
	+ Products
	+ Pods
	+ Frameworks
+ Pods
	+ Podfile
	+ Development Pods
	+ Frameworks
	+ Products
	+ Targets Support Files

项目依赖添加完成,开始配置脚本:

  • 选择 iOS应用的主 TARGET;

  • 打开Build Phases Tab;

  • 点击 + 按钮,并选择New Run Script;

  • 展开Run Script,在Shell区域添加如下脚本代码:

      "$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" build
      "$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" embed
    
  • 然后拖拽新建的Run Script到Target Dependencies之后。

  • 打开Build SettingsTab ,找到Enable BitCode选项,改为NO,如果已经设置过,可忽略此步骤。

项目配置完成,开始编码:

AppDelegate.h

#import <UIKit/UIKit.h>
// 添加flutter头文件
#import <Flutter/Flutter.h>
// 修改app代理的父类为FlutterAppDelegate
@interface AppDelegate : FlutterAppDelegate
@end

AppDelegate.m

#import "AppDelegate.h"
// 添加头文件
#import <FlutterPluginRegistrant/GeneratedPluginRegistrant.h>
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    // 重写application:didFinishLaunchingWithOptions:方法
    [GeneratedPluginRegistrant registerWithRegistry:self];
    return [super application:application didFinishLaunchingWithOptions:launchOptions];
}

ViewController.m

#import "ViewController.h"
#import <Flutter/Flutter.h>
@interface ViewController ()
@end
@implementation ViewController
	
	- (void)viewDidLoad {
		[super viewDidLoad];
		UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
	    btn.frame = CGRectMake(100, 100, 198, 45);
	    btn.layer.borderWidth = 1.0f;
	    btn.layer.borderColor = UIColor.grayColor.CGColor;
	    btn.layer.cornerRadius = 10;
	    [btn setTitle:@"Jump" forState:UIControlStateNormal];
	    [btn setTitleColor:UIColor.blackColor forState:UIControlStateNormal];
	    // 设置按钮点击事件为jump
	    [btn addTarget:self action:@selector(jump) forControlEvents:UIControlEventTouchUpInside];
	    [self.view addSubview:btn];
	}

	- (void)jump {
	    NSLog(@"Just jump to flutter");
	    // 创建FlutterViewController,并跳转到Flutter页面
	    FlutterViewController *ctrl = [[FlutterViewController alloc] init];
	    // 设置Flutter页面的router为Page
	    [ctrl setInitialRoute:@"Page"];
	    [self presentViewController:ctrl animated:YES completion:nil];
	}
	
@end

致此,iOS项目集成Flutter完成。

第四步,

设置flutter代码入口。
修改flutter_module/lib/main.dart代码。

import 'package:flutter/material.dart';
import 'dart:ui'; // window
void main() => runApp(_widgetForRoute(window.defaultRouteName));

// 路由方法
Widget _widgetForRoute(String route) {
  switch(route) {
  	// 此处很重要,iOS/Android项目中均设置了路由到flutter页面的路由参数
    case 'Page':
      return MyApp();
    default:
      return Center(
        child: Text(
          "Unknown route: $route",
          textDirection: TextDirection.ltr,
        ),
      );
  }
}

集成工作全部完成。

flutter ios打包_Flutter 将 Flutter 集成到现有项目(iOS Framework篇) 本篇文章大幅参考了 caijinglong 大佬的总结文章:把flutter作为framework添加到已存在的iOS中[1]用 Flutter 来开发,从来都不可能是新开的一个纯 Flutter 项目,很大一部分都是老项目接入 Flutter 来混编。在Flutter 官网 - Adding to an iOS app[2]这里,官方也给出了一些将 Flutter 集成进入现有... 阅读详情

相关推荐

射频接收机本振相噪指标计算:从倒易混频到GSM实战

在射频接收机设计中,相位噪声是衡量本振信号频谱纯度、影响系统灵敏度的关键指标。其核心影响机制源于倒易混频原理:当不纯净的本振信号与强带外阻塞信号混频时,本振的噪声边带会被转换到中频通带内,从而抬升接收机噪声基底。这一过程直接决定了接收机在阻塞测试等场景下的性能极限。从技术价值看,精确计算本振相噪要求,是进行系统噪声预算、实现成本与性能权衡的核心依据。尤其在手机、基站等对灵敏度要求极高的应用中,它指导着锁相环和压控振荡器的选型与设计。本文以经典的GSM DCS1800标准为例,通过详细的公式推导与变量分析,演

weixin_30368405的博客 326

Flutter添加到现有应用的常见问题解决方案

Flutter添加到现有应用的常见问题解决方案 1. 项目基础介绍和主要编程语言 该项目是Flutter官方提供的示例项目,旨在帮助开发者将Flutter模块集成到他们现有的应用程序中。它包含一个Flutter模块,这个模块用于显示一个捕获用户反馈(即“净推荐值”)的弹窗。此外,该项目还包括三个分别用Swift(iOS)、Kotlin(Android)和Angular(Web)编写的新闻源应用程序...

gitblog_00640的博客 546

数字IC笔记-逻辑单元库和库文件

逻辑单元库的建立: 一个完整的单元库是由不同的功能电路所组成,在芯片应用中可分为三类: 标准单元:反相器、与门、寄存器、选择器、全加器。组合逻辑电路和时序逻辑电路。互补,反向,非反向,其他。锁存器、寄存器。 模块宏单元:ROM、RAM 输入输出单元 库文件: 在逻辑综合产生门级网表和物理设计做布局布线的过程中需要两个重要的库文件,就是物理库(lef)和时序库(lib) 1.物理库LEF文件 LEF是版图级的抽象文件,主要用于布局和布线。目前普遍使用的是由Candence开发的LEF文件格式,以le

sinat_41774721的博客 9141

Flutter 插件使用必知必会

iOS在ios/Runner目录下自动生成的中,会添加插件的注册代码。@end在项目文件中import所需的包名,并使用如果依赖中存在 platform-specific code (Java/Kotlin for Android, Swift/Objective-C for iOS),要确保代码能够编译进 App ,必须 Restart App,防止发生异常。Hot reload 或者 Hot restart 只对 dart 代码有效。

onghaha的博客 1674

[比赛]新冠期间饿了么骑士行为预估-数据理解

写在前面 饿了么的比赛的赛题数据理解。 一、骑士行为数据 courier_id 骑士id wave_index 波次index tracking_id 订单id courier_wave_start_lng 波次起始时刻骑士位置 courier_wave_...

Helslie的博客 2942

新手避坑指南:用COMSOL Multiphysics仿真气体放电(汤逊vs.流注)

本文详细介绍了使用COMSOL Multiphysics仿真气体放电的实战指南,涵盖汤逊理论和流注模型的实现方法。通过对比两种放电模型的关键参数和物理场配置,帮助新手避免常见错误,准确预测气体击穿过程。文章还提供了工程应用案例,如高压绝缘子设计优化,展示了仿真技术在电力设备绝缘设计中的实际价值。

weixin_28716181的博客 472

Flutter学习记录(二):Andriod原生项目集成Flutter

博主想偷懒了,but,还是撑着眼皮来写了哈哈^_^ 废话不说了 我喜欢简单粗暴点的,直接告诉你怎么弄哈 博主的配置环境先来了解下: Windows 10 系统 64位 (32位的装不了flutter环境哦) android suodio 4.0 flutter1.17.4 dart 2.8.4 步入正题啦,嘿嘿 一 Android原生集成Flutter环境 1.1 在已有的Android原生项目根目录 依次运行以下命令: //创建 flutter Module flutte...

zww986736788的博客 370

攻防世界GFSJ1184_welcome_CAT_CTF

由于它是 PIE 可执行文件,程序加载地址会随机化,这导致你在 GDB 调试时需要处理地址偏移(如 0x246d 变成 0x55555540246d)。:client 程序通过网络连接(get_nc() 和 get_flag(nc))与 server 通信,server 监听在端口 8888。:client 依赖外部共享库(如 libstdc++.so),因此运行时需要这些库存在系统中。程序就是wasd移动,走到不同标记(* $ @ )下方,输入j回车,会有不同反应。两个文件client和server。

拥抱AI的老粽子 1262

【Flutter入门】1. 从零开始的flutter跨平台开发之旅(概述、环境搭建、第一个Flutter应用)

想快速掌握现代移动应用开发吗?本文带你走进Google推出的开源UI工具包——Flutter的世界。你将学会如何在Windows和macOS上搭建开发环境,并创建一个简单的app应用。

xichen_knight的博客 2788

FPGA时序约束:从时钟树到数据路径的深度解析与优化策略

本文深入解析FPGA时序约束的核心技术与优化策略,涵盖时钟树结构分析、时序报告解读和数据路径优化。重点探讨Vivado工具中的时序约束方法,包括时钟定义、异常约束和物理优化,帮助工程师掌握寄存器级时序分析和系统级协同设计,实现高性能FPGA设计。

u5v6w7的博客 652

Anomalib库安装以及使用

Anomalib是一个专注于异常检测的深度学习库。它的目标是收集最新的异常检测算法,并提供用于在公共和私有数据集上进行基准测试的工具。该库提供了一系列已实现的异常检测算法,这些算法在最近的文献中有所描述。此外,Anomalib还提供了一套工具,方便开发人员开发和实现自定义模型。该库特别注重基于图像的异常检测,旨在识别数据集中的异常图像或图像中的异常像素区域。通过使用Anomalib,用户可以快速构建和评估各种异常检测算法,以满足其特定需求。

mingo_敏 5198

Flutter开发之——IOS启动Flutter

一 概述 本文介绍从原生iOS启动Flutter的几种方式 直接启动(不配置缓存 FlutterEngine和路由)Flutter 使用缓存FlutterEngine启动Flutter 使用路由方式启动Flutter 二 直接启动(不配置缓存 FlutterEngine和路由)Flutter 2.1 代码(ViewController) import UIKit import Flutter class ViewController: UIViewController { override

我的博客 1377

MIKE 21 教程 1.2 网格搭建界面介绍之点线面要素的高阶处理 (Mesh Generator 工具)

MIKE 21 教程 手把手教学系列 1.1 网格搭建界面介绍之点线面要素的高阶处理 (Mesh Generator 工具) ​ 上一篇文章讲解了如何创建基本的点、线、面要素 MIKE 21 教程 1.1 网格搭建界面介绍之点线面的创建 本节来讲一下对点线面要素的高阶处理,主要包括要素修改与打断线(break line)的讲解 ​

Hello Word 4148

在现有项目中集成Flutter

对于使用Flutter的初衷,我相信大部分领导都是出于提高生产力。但是目前就我们的项目来看,相同的时间,如果改用Native去写,我觉得两者进度并没有多大的差异,可能Native端反而会更快一些。目前Flutter中非常常见的一些控件功能都无法满足,往往在轮子上需要耗费大量的时间,反而在业务层面花费的时间很少。

金戈鐡馬 342

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

现有安卓项目集成flutter

1、集成项目 首先 在Android的同级目录执行命令 执行以下命令 flutter create -t module flutter_modal 执行完成后会在Android的同一级目录下生成一个新的 flutter_modal文件夹 然后在Android里面做如下修改 app下面的buildgradle 的Android目录加入 //加入以下 compileOptions { sourceCompatibility 1.8 targetCompatibi

qq_32683045的博客 568

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

现有项目中集成Flutter

本文列举了项目开发使用Flutter会遇到的问题,以及如何使用Flutter module在现有项目中集成Flutter,并对其原理进行了分析。 最近在做的一个商业项目,完全的使用Flutter编写的,这其中的坑,只有写过的人才能体会到。 1. 纯Flutter项目的问题 在论述纯Flutter项目问题之前,我先表述下我的观点(仅限于纯Flutter项目,目前时间2018年6月26日,不排除Flutter的发展,让我的观点改观): 对于个人开发者,可以使用纯Flutter去开发App尝鲜; 对...

505

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Flutter打包aar并且集成现有Android项目

一、前言 Flutter现在已经很火了,但是如果我们要想使用Flutter开发,在新的Flutter项目上集成以前的所有代码肯定是不现实的,同时又不想将Flutter直接侵入到我们的项目结构中去,于是最优解就是将开发的Flutter项目单独编译成aar,然后以组件的形式被主工程依赖。 这样做的好处是显而易见的:对Flutter进行探索开发的同学可以在自己的Flutter工程内编写dart代码,独立...

sanshan_star的博客 8243

学习笔记-现有项目中集成Flutter

现有项目中集成Flutter 本文列举了项目开发使用Flutter会遇到的问题,以及如何使用Flutter module在现有项目中集成Flutter,并对其原理进行了分析。 最近在做的一个商业项目,完全的使用Flutter编写的,这其中的坑,只有写过的人才能体会到。 1. 纯Flutter项目的问题 在论述纯Flutter项目问题之前,我先表述下我的观点(仅限于纯Flutter项目,目前时...

ai agent 257

Flutter - 将 Flutter 集成到现有项目(iOS - Framework篇)

本篇文章大幅参考了 caijinglong 大佬的总结文章:把flutter作为framework添加到已存在的iOS中[1]用 Flutter 来开发,从来都不可能是新开的一个纯 F...

Flutter笔记 5403

在现有iOS项目中集成Flutter

本文介绍了iOS项目中集成Flutter模块的详细步骤:首先在工程目录创建独立的Flutter模块,在Podfile中添加Flutter依赖配置;通过修改pubspec.yaml文件引入Flutter Boost等第三方库;执行Flutter构建命令后完成pod安装。第二部分阐述了页面展示的实现方案,iOS端使用FlutterEngineGroup创建多引擎页面,Flutter端则通过MaterialApp配置路由映射。全文详细说明了Flutter混合开发的工程配置和页面跳转实现方法,为iOS原生项目集成F

风·之痕的博客 1570

现有Android APP项目集成Flutter

背景 我的app现在是原生加Weex混合开发,自从调研了flutter后,发现完全可以取代weex,达到更好的性能,更美观的界面,更丰富发组件等需求,flutter的原理和性能在这里不再多说,可自行查找资料与查看官网,强烈推荐使用原生加flutter的混合开发进行app开发,当然使用flutter也是有缺点的,后续会阐述,先讲一下我的集成路程与趟过的坑。 集成开始 1.ad...

weixin_42468452的博客 1794

flutter中创建android代码,现有Android项目中集成Flutter/Flutter混合开发实战(一)

最近学了下Flutter,确实挺好的。单独的Flutter项目跑起来没有多大问题。目前也有一些混合开发的需求,所以找了一些文章来看,收获颇丰。一.在现有项目上集成Flutter步骤详解1.创建项目这一步要注意,创建项目的目录, 不是,不是,不是 Android项目的根目录 ↑不是它!应该是下图的目录结构。flutter_hybrid目录即为我们要创建的flutter项目,FlutterrHybri...

weixin_29172201的博客 701

现有Android项目中集成Flutter/Flutter混合开发实战(一)

最近学了下Flutter,确实挺好的。单独的Flutter项目跑起来没有多大问题。目前也有一些混合开发的需求,所以找了一些文章来看,收获颇丰。一.在现有项目上集成Flutter步骤详解1.创建项目这一步要注意,创建项目的目录,不是,不是,不是Android项目的根目录↑不是它!应该是下图的目录结构。flutter_hybrid目录即为我们要创建的flutter项目,FlutterrHybridDe...

weixin_34380296的博客 638

flutter加入已有android项目,解决在现有Android项目中集成Flutter遇到的问题

如何添加Flutter到现有Android项目Flutter官方有详细的文档, 参考文档便可。java集成过程当中遇到的神坑主Module名称必定要为"app"若是主Module名称不是"app", 执行Flutter#createView后,会出现native层的崩溃。而且会出现错误信息VM snapshot must be valid, 崩溃信息以下:android#1 mainSIGABRT...

weixin_32480781的博客 343

现有Android项目集成Flutter模块

1、创建Flutter Mix的Android工程: 注意:如果是使用androidx库,那么默认建立的Flutter模块项目要进行依赖的替换,后面会详细讲解。 2、建立要项目后在app工程的build.gradle中android{}节点下加入: compileOptions { sourceCompatibility 1.8 targetCo...

两岁半的专栏 659
上一篇: 关于Android加快应用崩溃效率
下一篇: Flutter应用结构分析
z529905310
博客等级 码龄10年 11粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值