在 Android 中集成 Flutter

Android 原生项目集成 Flutter,GitHub标星1w的Android架构师必备技能 在配置 settings.gradle 之前先来简单回顾一下关于 Gradle 的一些基础知识。 如果你了解过 Gradle 相关的配置的话,一定会看到一个概念,就是 约定优于配置 ,什么意思呢,按照面向对象的思路来理解,每一个工程是一个巨大的 Project 类,整个类里有很多的属性。而我们创建的每一个项目其实就是一个具体的 Project 对象(也就是实例).约定优于配置的意思,就是在 project 实例化的时候,其内部的属性已经有了默认值。那么我们怎么知道有哪些默认值呢?在项目根目录执行 ./gra 阅读详情

在 Android 中集成 Flutter

直接使用 Android Studio 是在现有应用中自动集成 Flutter 模块比较便捷的方法。在 Android Studio 中,你可以在一个项目中同时编写 Android 代码和 Flutter 代码,还可以继续使用各种常用的 IntelliJ Flutter 插件功能,例如 Dart 代码自动补全、热重载和 widget 检查器等。
https://flutter.cn/docs/development/add-to-app/android/add-flutter-screen?tab=custom-activity-launch-kotlin-tab

1.settings.gradle

include ':app'
setBinding(new Binding([gradle: this]))
evaluate(new File(
        settingsDir.parentFile,
        'flutter_demo_library/.android/include_flutter.groovy'
))
include ':flutter_demo_library'
project(':flutter_demo_library').projectDir = new File('../flutter_demo_library')

2.项目build.gradle

buildscript {
    ext.kotlin_version = '1.6.10'
    repositories {
        google()
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:7.1.2'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

allprojects {
    repositories {
        google()
        mavenCentral()
    }
}

3.appbuild.gradle

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
}

android {
    compileSdk 32

    defaultConfig {
        applicationId "com.lxt.flutter_demo_android"
        minSdk 23
        targetSdk 32
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
}

dependencies {
    implementation project(':flutter')

    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.10"
    implementation 'androidx.core:core-ktx:1.7.0'
    implementation 'androidx.appcompat:appcompat:1.3.0'
    implementation 'com.google.android.material:material:1.4.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5'
    implementation 'androidx.navigation:navigation-ui-ktx:2.3.5'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}

4.AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  package="com.lxt.flutter_demo_android">

  <application
    android:name=".MyApp"
    android:allowBackup="true"
    android:dataExtractionRules="@xml/data_extraction_rules"
    android:fullBackupContent="@xml/backup_rules"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/Theme.Flutter_demo_android"
    tools:targetApi="31" >
    <activity
      android:name=".MainActivity"
      android:exported="true"
      android:label="@string/app_name">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>

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

5.MyFlutterEngineBinding.kt

package com.lxt.flutter_demo_android

import android.content.Context
import io.flutter.FlutterInjector
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.embedding.engine.FlutterEngineCache
import io.flutter.embedding.engine.dart.DartExecutor

/**
 * 通过FlutterGroupEngine创建Engine
 */
fun Context.createGroupEngine(entryPointName: String): FlutterEngine {
    // 获取applicationContext
    val appContext = this.applicationContext as MyApp
    // 创建跳转点(enterPoint), enterPoint需要与Flutter中的方法名一致
    val entryPoint = DartExecutor.DartEntrypoint(
        FlutterInjector.instance().flutterLoader().findAppBundlePath(), entryPointName
    )
    // 创建FlutterEngine
    val engine = appContext.engines.createAndRunEngine(this, entryPoint)
    // 预加载,减少白屏或闪屏
    engine.dartExecutor.executeDartEntrypoint(entryPoint)
    // 放入缓存
    FlutterEngineCache.getInstance().put(entryPointName, engine)
    return engine
}

6.MyApplication -

package com.lxt.flutter_demo_android

import android.app.Application
import io.flutter.embedding.engine.FlutterEngineGroup

class MyApp : Application() {
    lateinit var engines: FlutterEngineGroup

    override fun onCreate() {
        super.onCreate()
        engines = FlutterEngineGroup(this)
    }
}

7.MainActivity

class MainActivity :Activity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        createGroupEngine("main")
        findViewById<TextView>(R.id.tv_login).setOnClickListener {
            this?.let { it1 ->
                it1.startActivity(FlutterActivity
                    .withCachedEngine("main")
                    .build(it1))
            }
          //  startActivity(FlutterActivity.createDefaultIntent(this))
        }
    }
}
Flutter混合开发(一):Android项目集成Flutter模块详细指南 [](()创建Flutter module =================================================================================== 既然是做混合开发,那么我们肯定是由Android原生项目的。假如native项目的路径是这样的:flutter/flutter_hybrid/native,那么我们需要在native上一层目录flutter_hybrid中创建Flutter module。 cd flutter/flutter_h. 阅读详情

相关推荐

【最强】Android 项目集成 Flutter 实战分享!不看看?

题外话,我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在IT学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多程序员朋友无法获得正确的资料得到学习提升,故此将并将重要的Android进阶资料包括自定义view、性能优化、MVC与MVP与MVVM三大框架的区别、NDK技术、阿里面试题精编汇总、常见源码分析等学习资料。【Android思维脑图(技能树)】

2401_84132685的博客 1208

手把手教你在Android项目中接入Flutter,在Flutter中使用Android布局

如果想要成为架构师或想突破20~30K薪资范畴,那就不要局限在编码,业务,要会选型、扩展,提升编程思维。此外,良好的职业规划也很重要,学习的习惯很重要,但是最重要的还是要能持之以恒,任何不能坚持落实的计划都是空谈。如果你没有方向,这里给大家分享一套由阿里高级架构师编写的《Android八大模块进阶笔记》,帮大家将杂乱、零散、碎片化的知识进行体系化的整理,让大家系统而高效地掌握Android开发的各个知识点。

yihanss的博客 5516

原生安卓项目中集成Flutter模块

第一步,在与项目文件夹的同级目录下,创建一个Flutter Module,使用命令行创建 flutter create -t module flutter_module 第二步,打开安卓项目的build.gradle,使用java8编译 android { ............. compileOptions { sourceCompatibility Java...

Eridike的博客 1221

如何将flutter集成到andriod安卓?

原帖: link 本文主要解决3个问题: 集成Flutter到Android项目,可以打开Flutter的默认页面 可以跳转到Flutter的指定页面 可以将Flutter的指定组件嵌入到原生页面,并传递参数 1.集成Flutter到Android 这里,我们以Flutter Module创建一个Flutter工程(flutter),然后run起来,就可以在.android/Flutter/build/outouts/aar文件夹下面得到这个aar 这里之所以以Flutter Modu

ruiruiddd的博客 1347

Android 原生项目集成 Flutter

UI这块知识是现今使用者最多的。当年火爆一时的Android入门培训,学会这小块知识就能随便找到不错的工作了。不过很显然现在远远不够了,拒绝无休止的CV,亲自去项目实战,读源码,研究原理吧!

2401_84123077的博客 678

android调用flutter aar_在原生项目中集成Flutter

概述使用Flutter从零开始开发App是一件轻松惬意的事情,但对于一些成熟的产品来说,完全摒弃原有App的历史沉淀,全面转向Flutter是不现实的。因此使用Flutter去统一Android、iOS技术栈,把它作为已有原生App的扩展能力,通过有序推进来提升移动终端的开发效率。 目前,想要在已有的原生App里嵌入一些Flutter页面主要有两种方案。一种是将原生工程作为Flutter工程的子工...

weixin_39567870的博客 996

现有安卓项目集成flutter

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

qq_32683045的博客 568

flutter_boost Android集成与使用

转载请注明出处 王亟亟的大牛之路 之前用fluro替代Flutter自带的Navigation实现一些路由操作,但是Native页面和Flutter页面的一些交互并没有完成,昨天花了些时间集成了安卓模块的flutter_boost,这边把碰到的问题和一些经历整合一下分享给大家,方便大家快速集成。 项目相关 项目地址:https://github.com/alibaba/flutter_boost...

王亟亟的博客 9235

flutter混合开发爬坑:在已有的android项目集成FlutterFragment,flutter和安卓互调

集成flutter项目 1.受制于国内的防火墙,添加国内镜像,在android 根目录修改build.gradle buildscript { repositories { // google() // jcenter() jcenter { url "http://jcenter.bintray.com/" } jcenter { url 'http://maven.aliyun.com/nexus/content/rep...

lx6101989的博客 3255

oh-my-zsh详细安装与主题插件配置

使用Linux的小伙伴都知道默认shell是bash,但是对于喜欢折腾,喜欢酷炫的我们bash怎能够用。zsh的作为一种shell,功能更强大,但是配置复杂。后来,有大佬创建了一个名为oh-my-zsh的开源项目,使用方便,功能强大。 下面就去oh-my-zsh的配置。 ①安装zsh 想要安装oh-my-zsh,首先得安装zsh,输入命令 sudo apt-get install zsh 界面如下 ②查看是否安装成功 输入命令 zsh --version 可以查看安装zsh的版本..

惜洛-Jankin的博客 2万+

Qt+OpenGL+Cesium三件套:打造高性能3D GIS桌面应用的5个关键点

本文深入探讨了如何利用Qt、OpenGL和Cesium数据规范构建高性能桌面级3D GIS应用。文章聚焦于五个关键点:架构选型、OpenGL渲染优化、3D Tiles数据解析与调度、内存与多线程管理,以及高级特性实现,旨在帮助开发者在C++生态中打造不依赖网络、运算能力更强的重型3D地理信息客户端。

weixin_28197941的博客 380

Android项目集成Flutter

在Android开发中某些组件或者页面需要使用Flutter开发,这边文章主要介绍已有的Android项目集成Flutter开发环境。 一、Flutter开发环境配置 1、flutter插件配置 Android Studio ——>Preferences——>重启项目 2、下载flutter-sdk https://flutterchina.club/ 我使用的是Mac的系统,下载地址为: https://storage.googleapis.com/flutter_in

一杯清泉 1624

FreeSurfer预处理命令

比如将/source/kernel.tgz解压到 /source/linux-2.6.29 目录 tar zxvf /source/kernel.tgz -C /source/ linux-2.6.29 tar zxvf /home/tj/application/freesurfer/subjects/mindboggle/OASIS-TRT-20-1.tar.gz -C /home/tj/application/freesurfer/subjects (1)lh.thickness mri_surf2su

Dream19961996的博客 1507

Flutter Module 集成到 Android 项目

本文介绍了将FlutterModule集成到Android项目的两种官方方式:源码集成和AAR集成。源码集成适合开发阶段,通过Gradle直接引入Module源码,支持热重载但构建速度较慢;AAR集成适合发布阶段,将FlutterModule编译为AAR包引入,构建速度快但需重新编译。文章详细说明了两种方式的前置环境要求、项目结构准备、具体配置步骤及代码示例,包括Flutter页面打开方式和原生通信实现。最后对比了两种方式的优缺点,并提供了常见问题解决方案,如预加载引擎优化启动速度、ABI过滤减小包体积等。

梦想不只是梦与想的博客 2336

Proteus一体化安装STC15库添加

Proteus一体化安装与STC15库添加指南 本文详细介绍了Proteus 8.9 SP2专业版的一体化安装流程和STC15系列单片机库文件的添加方法。安装过程简单快捷,无需破解,稳定性好。通过将两个库文件(Lib和LIB)复制到Proteus安装目录的DATA/LIBRARY文件夹中,即可实现STC15W4K32S4芯片的仿真功能。文中还提供了新建工程和器件放置的步骤说明,特别指出STC15W4K32S4芯片可兼容仿真其他STC15系列芯片,并附带下载链接获取资源。该教程适用于电子设计初学者和开发者。

#法外狂徒张三的博客 4万+

海豚调度器(dolphinscheduler)再次使用,添加钉钉预警

1,首先我们部署是海豚调度器 1.3.8版本,由于页面只有邮件预警,所以在了解源码的同时,需要添加钉钉预警 2,说明,这一块是同事搞的,不是我搞的,新版本的dolphinscheduler已经有了钉钉模块,只是新版本还没有发布 3,我们现在只是添加简单的钉钉预警,任务成功或者失败会发送邮件+钉钉 4,具体操作 找到最新的源码devhttps://github1s.com/apache/dolphinscheduler/blob/dev/dolphinscheduler-alert/src/ma...

qq_31866793的博客 3083

2024年安卓最新Flutter混合开发(二):iOS项目集成Flutter模块详细指南,Android模块化面向接口编程

面试成功其实都是必然发生的事情,因为在此之前我做足了充分的准备工作,不单单是纯粹的刷题,更多的还会去刷一些Android核心架构进阶知识点,不仅有学习文档,视频+笔记提高学习效率,还能稳固你的知识,形成良好的系统的知识体系。这里,笔者分享一份从架构哲学的层面来剖析的视频及资料分享给大家梳理了多年的架构经验,筹备近6个月最新录制的,相信这份视频能给你带来不一样的启发、收获。

2401_84544914的博客 1361

Starlink地面终端天线对星(一)对星流程,星历下载,信标信号

starlink卫星终端对星采用机械伺服+相控阵电子扫描的混合模式,兼顾快速盲扫和高精度跟踪;对星流程分三步:冷启动与盲捕获 → 建立初始链路并下载星历 → 进入正常通信模式;

chen2jiang3的博客 2723

Flutter:Android/iOS集成Flutter模块

Flutter:Android/iOS集成Flutter模块

a526001650a的专栏 2154

OpenHarmony之Histreamer引擎深度解析:pipeline_core架构如何全面取代GStreamer,一统音视频播放与录制

Histreamer是OpenHarmony多媒体框架的核心媒体引擎,采用架构设计。一个轻量级的媒体引擎组件,提供播放、录制等场景的媒体数据流水线处理。1.播放场景分为如下几个节点:数据源读取、解封装、解码、输出;2.录制场景分为如下几个节点:数据源读取、编码、封装、输出。该引擎从OH5.0开始取代了原有的媒体引擎gstreamer(部分文档还保留较老架构的讲解),提供统一的音视频播放、录制、元数据解析等能力。

m0_67505153的博客 332

【调优】OpenClaw调优之模型(tokens)篇

OpenClaw用户常遇四大痛点:规则被无视、API账单暴涨、低效模型选择、记忆丢失。通过/context list命令可解析上下文组成,包括工作区配置、引导参数限制、系统提示词等关键信息。重点需关注Token消耗来源,如核心配置文件、技能工具说明等,避免静默截断。建议精简非必要内容,优化记忆机制,平衡功能与成本。该分析帮助用户减少无效操作,合理控制API支出。

海兰 990

flutter调用Android工程,简述Flutter集成到Android原生项目

开发集成环境[✓] Flutter (Channel stable, v1.12.13+hotfix.9, on Mac OS X 10.14.6 18G103, locale zh-Hans-CN)接触使用Flutter也有段时间了,利用假期来梳理下在Flutter在使用层面的一些混编知识点,其实整理起来会发现原生与Flutter的混编和原生与RN的混编相似度很大,其实所有的跨平台框架谈到和原生...

weixin_39947908的博客 494

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Android 集成 Flutter | 与交互

这篇文章将以如何在 Android 项目中集成 Flutter 和 如何在两者之间进行交互为主要内容。

345丶 2658

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Android studio如何集成flutter

通过以上步骤,就可以在 Android Studio 中成功集成 Flutter 开发环境,并进行 Flutter 项目的创建、运行以及后续的开发调试等工作了。),下载对应操作系统版本的安装包(Mac 系统选择 Mac 版本),下载完成后按照安装向导提示逐步进行安装,安装过程中可能需要同意相关许可协议等常规操作。如果还未安装 Android Studio,需先进行安装。访问 Android Studio 官方网站(

challenge51all的专栏 1548

flutter 调用原生安卓插件_Flutter 插件(调用原生控件--Android,集成Android SDK)

以AndroidTextureView(查看海康监控视频)为例(Android Studio版本4.0.1,flutter版本51.0.1,Dart版本193.7543):1、首先是生成一个插件:flutter create --org com.example.test --template=plugin cctv_plugin在Android studio中右键点击项目根目录,选择flutte...

weixin_30324103的博客 1968

Android以aar形式集成Flutter module

由于公司项目是内网开发,故本文的集成形式是以本地打aar包直接引入到现有的Android项目中,这种方式其他开发人员不需要搭建Flutter的环境也可以集成开发。 我的flutter版本是2.0.3???? 一、创建Flutter module 首先要在Android Studio中安装Flutter和Dart的plugin,接着我们选择File -> New -> New Flutter Project -> Flutter Module 初始化创建的Module是一个可

_陈泡泡的博客 895
上一篇: Android APP 奔溃 ,如何在开发者选项观察错误日志
下一篇: Flutter基础知识
黄毛火烧雪下
黄毛火烧雪下 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄14年 7714粉丝 439原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄毛火烧雪下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值