原生Android项目中引入Flutter并实现android 与 flutter 之间的通信

前提条件:

    完成Flutter安装与环境搭建

一、原生Android项目中引入Flutter

1、在Android项目中,添加Flutter支持的体系结构过滤器

项目 - > app -> build.gradle

        ......   defaultConfig {......ndk {// Flutter支持的体系结构过滤器abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86_64'}}

2、 Android Studio需要将你的 Flutter 模块作为依赖:

1)、在现有Android项目同级目录终端创建flutter module

前往File > New > New Flutter Project…

选择“Flutter”

填写你的 Flutter SDK path 

之后点击“Next

点击“Next”之后,进入下面图示:

备注:
Project name:创建Flutter项目名称
Projrct location:项目安装路径(要放在Android项目同级目录
Project type:选择“Module
之后点击“Create”即创建一个新的Flutter Module项目。
2)、引入逻辑
  • 在app下的build.gradle文件中添加以下配置
compileOptions {sourceCompatibility 1.8targetCompatibility 1.8
} 
        我们知道这是使用Java 8所需要的配置,在这里的作用是为了解决版本兼容问题,如果不配置的话运行项目可能会报错:Invoke-customs are only supported starting with Android O (--min-api 26)
如果新创建的Android项目build.gradle已存在,就不需要添加上述配置了。
  • 然后在项目根目录下的setting.gradle文件中配置:

// 加入下面配置setBinding(new Binding([gradle: this]))evaluate(new File(settingsDir.parentFile,'flutter_data/.android/include_flutter.groovy'))

说明:flutter_data是上面刚创建的Flutter Module项目名称

之后“Sync Now”一下项目。

  • 如果sync项目报Failed to apply plugin class 'FlutterPlugin'.错

解决办法:
打开setting.gradle,将repositoriesMode改为:RepositoriesMode.PREFER_PROJECT

改后:

将RepositoriesMode模式替换后,再点击“Try Again”

如果还遇到第三方解析失败,在app -> build.gradle中添加maven:

dependencyResolutionManagement {repositoriesMode.set(RepositoriesMode.PREFER_PROJECT)repositories {maven { url 'https://jitpack.io' }maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }maven { url 'https://maven.aliyun.com/repository/central' }maven { url 'https://maven.aliyun.com/nexus/content/repositories/google' }google()mavenCentral()}
}

另外在项目下的build.gradel 添加:

allprojects {repositories {maven { url 'https://jitpack.io' }maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }maven { url 'https://maven.aliyun.com/repository/central' }maven { url 'https://maven.aliyun.com/nexus/content/repositories/google' }google()mavenCentral()}
}task clean(type: Delete) {delete rootProject.buildDir
}

如图所示:

  • Sync后我们可以看到项目中多了一个名称为flutter的library module:

我们需要在app下的build.gradle文件中添加该module的依赖。

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

“Sync”一下项目这样就成功地将Flutter引入到了Android原生项目中。

二、Android与Flutter交互

        上面的项目,每次要看flutter代码是不是每次都要切过来切过去的,所以呢,我们可以在setting.gradle 加上这么一行代码:

加下面两行主要目的是直接在原生的app工程下,查看flutter的代码,避免切来切去

include "flutter_data"

project(':flutter_data').projectDir = new File('../flutter_data')

添加代码后“sync”项目,会生成flutter_data项目,这样就可以直接在原生app中修改flutter中代码了。

1、Android跳转Flutter

1)、在清单AndroidManifest里面添加 FlutterActivity在清单AndroidManifest里面添加 FlutterActivity

 <activityandroid:name="io.flutter.embedding.android.FlutterActivity"android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"android:hardwareAccelerated="true"android:windowSoftInputMode="adjustResize" />

在MainActivity中,调用点击事件,直接跳转:

btnSendFlutter.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {startActivity(FlutterActivity.createDefaultIntent(MainActivity.this));}});
2)、上述跳转你会发现跳转有些慢或者常出现卡顿现象,所以我们常用带有 缓存的初始路由来 启动FlutterActivity
创建一个Application:
public class MyApplication extends Application {private FlutterEngine flutterEngine;@Overridepublic void onCreate() {super.onCreate();// 创建一个Flutter引擎flutterEngine = new FlutterEngine(this);// 开始执行 Dart 代码来预热flutter引擎flutterEngine.getDartExecutor().executeDartEntrypoint(DartExecutor.DartEntrypoint.createDefault());//缓存Flutter引擎用来开启FlutterActivityFlutterEngineCache.getInstance().put("my_engine_id", flutterEngine);}}

在AndroidManifest.xml中使用引用的Application:

android:name=".MyApplication"

使用缓存引擎跳转Flutter:

startActivity(FlutterActivity.withCachedEngine("my_engine_id").build(MainActivity.this)
);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/236708.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【笔记】Spring是什么

什么是spring&#xff1f; Spring的基础知识铺垫 IOC AOP<-Spring->容器->生态 先说你的认知&#xff0c;总-分结构 spring是一个基础的框架&#xff0c;同时提供了Bean的容器&#xff0c;用来方便装载具体的Bean对象&#xff0c;之前在使用对象的时候必须自己new&…

公章透明png图片怎么弄?一键生成透明图片

公章透明png图片可以应用于图像或照片的水印保护。通过将公章图片作为水印添加到图像上&#xff0c;可以保护图像的版权和来源&#xff0c;并防止未经授权的复制和使用&#xff0c;但是通常我们扫描到电脑上的公章图片都是有背景底色的&#xff0c;如何将图片去背景变透明呢&am…

Android Studio使用Genymotion

1. Genymotion介绍 GenyMotion速度之快令人发指&#xff0c;模拟效果堪比真机调试&#xff0c;支持绝大部分的模拟器功能&#xff0c;甚至包括语音&#xff0c;Google Now&#xff0c;支持eclipse, android studio。非常适合用来开发和演示效果。 2. Genymotion下载 Genymotio…

设计模式03结构型模式

结构型模式 参考网课:黑马程序员Java设计模式详解 博客笔记 https://zgtsky.top/ 结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式&#xff0c;前者采用继承机制来组织接口和类&#xff0c;后者釆用组合或聚合来组合对象。 由于…

数字生态文明:构建可持续发展的未来

数字技术的快速发展给人类社会带来了巨大的变革,同时也对生态环境产生了深远的影响。在这个背景下,数字生态文明的概念应运而生,它强调在数字时代实现经济、社会和环境的协调发展,构建可持续的未来。 一、数字生态文明的内涵 数字生态文明是指在数字经济发展过程中,遵循…

什么是逆变器电源?逆变器需要测试哪些指标?

逆变器是一种将低压直流电(12v/24v/48v)转化为220v交流电的电子设备&#xff0c;由逆变桥、控制逻辑、滤波电路组成&#xff0c;被广泛应用于电脑、洗衣机、空调、太阳能发电系统、电池储能系统、风力发电系统等。逆变器有以下特点&#xff1a; 1.转换效率高、启动快; 2.安全性…

Java 第14章 集合 课堂练习

文章目录 HashSet判断是否两次add都能加入成功HashSet编码遍历HashMap判断输出中是否有"abc" HashSet判断是否两次add都能加入成功 HashSet set new HashSet(); set.add(new String("hsp")); set.add(new String("hsp"));第一次可以&#xff0…

直播电商“去网红化”势在必行,AI数字人打造品牌专属IP

近年来&#xff0c;网红直播带货“翻车”事件频发&#xff0c;给品牌商带来了信任危机和负面口碑的困扰&#xff0c;严重损害了企业的声誉。这证明强大的个人IP,对于吸引粉丝和流量确实能起到巨大的好处,堪称“金牌销售”,但太过强势的个人IP属性也会给企业带来一定风险&#x…

.NET 药厂业务系统 CPU爆高分析

Windbg 分析 1. CPU 真的爆高吗 还是老规矩&#xff0c;要想找到这个答案&#xff0c;可以使用 !tp 命令。 0:044> !tp logStart: 1 logSize: 200 CPU utilization: 88 % Worker Thread: Total: 8 Running: 4 Idle: 4 MaxLimit: 1023 MinLimit: 4 Work Request in Queue: …

如何本地搭建Zblog网站并通过内网穿透将个人博客发布到公网

文章目录 1. 前言2. Z-blog网站搭建2.1 XAMPP环境设置2.2 Z-blog安装2.3 Z-blog网页测试2.4 Cpolar安装和注册 3. 本地网页发布3.1. Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 人工智能学习网站…

Navicat里MySQL表的创建(详细)

我以Navicat连接MySQL为例&#xff0c;演示表的创建方法。 前提 创建表的语法&#xff1a; create table 表名 &#xff08; 字段名1&#xff0c;字段类型&#xff0c; 字段名2&#xff0c;字段类型&#xff0c; ...... 字段名n&#xff0c;字段类型 ); 我计划在test库存放一…

第三方登录-pc支付宝扫码登录流程

最近有个奇葩的需求&#xff0c;用户要支持支付宝扫码登录。这个需求很少见&#xff0c;那就做一下&#xff0c;看起来有点难&#xff0c;其实很简单。 先看结果 流程梳理 核心代码 获取支付宝扫码页面的url // 获取支付宝扫码登录页面的urlasync function getZFBLoginUrl()…

动态规划--三步问题

本题题目链接备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能&#xff0c;轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/three-steps-problem-lcci/ 个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 动态规划&…

Centos 8.5 Oracle12c安装

由于多次安装踩坑&#xff0c;所以本次写了一份12c安装的完整版。可以直接使用。 一、安装数据库基本信息 名称 值 主机名 database 操作系统 CentOS Linux release 8.5.2111 Oracle用户名/密码 oracle Oracle 版本 12c Enterprise Edition Release 12.2.0.1.0 oracle…

Java 基础学习(十五)集合排序、Lambda和Stream

1 集合排序 1.1 集合排序API 1.1.1 集合排序概述 集合排序是指对一个集合中的元素按照特定规则进行重新排列&#xff0c;以使得集合中的元素按照预定义的顺序呈现。 在集合排序中&#xff0c;通常需要定义一个比较规则&#xff0c;这个比较规则用于决定集合中的元素在排序后…

【Linux C | 文件I/O】文件的打开关闭 | open、creat、colse 函数

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

【LeetCode刷题笔记(11-1)】【Python】【和为 K 的子数组】【前缀和】【中等】

文章目录 引言和为 K 的子数组题目描述提示 解决方案1&#xff1a;【暴力枚举】解决方案2&#xff1a;【前缀和】结束语 和为 K 的子数组 引言 编写通过所有测试案例的代码并不简单&#xff0c;通常需要深思熟虑和理性分析。虽然这些代码能够通过所有的测试案例&#xff0c;但…

SQL进阶理论篇(十七):数据库主从同步的原理

文章目录 简介为什么需要主从同步主从同步的原理总结参考文献 简介 以MySQL数据库为例&#xff0c;在实际生产中&#xff0c;我们会如何对MySQL数据库进行性能优化呢&#xff1f; 比如说配合上Redis做缓存。Redis是一种高性能的内存数据库&#xff0c;而MySQL是一种基于磁盘文…

docker-compose安装Rocketmq总结,以及如何更换mq端口

默认你已经装好了docker哈 安装docker-compose sudo curl -L https://github.com/docker/compose/releases/download/1.25.1-rc1/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-composechmod x /usr/local/bin/docker-composedocker-compose --version成功打印…

截断霍夫曼编码

截断霍夫曼编码是一种数据压缩技术&#xff0c;它基于霍夫曼编码的原理&#xff0c;通过截断霍夫曼树&#xff0c;减少编码中的冗余信息&#xff0c;实现更高效的数据压缩。在本文中&#xff0c;我们将详细探讨截断霍夫曼编码的原理、应用及其优势。 一、霍夫曼编码简介 霍夫曼…