在Android原生项目中 创建 Flutter模块

这篇具有很好参考价值的文章主要介绍了在Android原生项目中 创建 Flutter模块。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

应用场景:在已有的Android原生项目中,引入Flutter模块,摸索了两天,终于给整出来了;

如果是新项目,最好直接创建Flutter项目,然后在Fluter的 android / ios目录中,写原生代码;

本文除了讲解 Android原生如何创建Flutter模块外,还会演示在使用 Gradle 高版本低版本 时可能出现的问题;

官方指导文档:将 Flutter module 集成到 Android 项目 - Flutter 中文文档 - Flutter 中文开发者网站 - Flutter

1、Gradle高版本

基础配置版本:

1、Flutter版本 :3.13.2

2、Flutter内嵌android的Gradle版本:gradle-7.5-all.zip

3、Flutter内嵌android的Gradle插件版本:7.3.0

4、Android原生项目Gradle版本:gradle-8.0-bin.zip

5、Android原生项目Gradle 插件版本:8.1.1

6、Android Studio 版本:2022.3.1

7、原生项目由 Android Studio 2022.3.1 创建

1.1 在原生项目中, 创建Flutter模块

注意:Project type 要选 Module

Ps:低版本的Android Studio,New Module 里面直接可以添加 Flutter Module,而且关连的配置代码自动生成,但高版本却没有这个 Flutter Module,比如 Android Studio 2021.4.2.2 就有,我使用的高版本 Android Studio 2022.3.1 就没有,是真的坑爹!!!

至此,先将谷歌负责这块的产品经理拉出去枪毙10分钟,再继续观看本文档。

在Android原生项目中 创建 Flutter模块,Flutter + Android 混合开发,android,flutter

在Android原生项目中 创建 Flutter模块,Flutter + Android 混合开发,android,flutter

在Android原生项目中 创建 Flutter模块,Flutter + Android 混合开发,android,flutter

在Android原生项目中 创建 Flutter模块,Flutter + Android 混合开发,android,flutter

1.2 修改settings.gradle

将Android原生项目根目录下的 settings.gradle 里的代码,修改为低版本的方式

// 高版本 方式(默认生成的)
//pluginManagement {
//    repositories {
//        google()
//        mavenCentral()
//        gradlePluginPortal()
//    }
//}
//dependencyResolutionManagement {
//    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
//    repositories {
//        google()
//        mavenCentral()
//    }
//}

// 低版本 方式
rootProject.name = "AndroidInsertFlutter"
include ':app'
setBinding(new Binding([gradle: this]))
evaluate(new File(
        settingsDir,
        'flutter_module/.android/include_flutter.groovy'
))

1.3 修改build.gradle

将Android原生项目根目录下的 build.gradle 里的代码,修改为低版本的方式

// 高版本 方式(默认生成的)
// Top-level build file where you can add configuration options common to all sub-projects/modules.
//plugins {
//    id 'com.android.application' version '8.1.1' apply false
//    id 'org.jetbrains.kotlin.android' version '1.9.0' apply false
//}

// 低版本 方式
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    ext.kotlin_version = "1.9.0"
    repositories {
        maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
        maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
        maven { url 'https://maven.aliyun.com/nexus/content/repositories/google' }
        maven { url 'https://maven.aliyun.com/nexus/content/repositories/gradle-plugin' }
        google()
        mavenCentral()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:8.1.1"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
        maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
        maven { url 'https://maven.aliyun.com/nexus/content/repositories/google' }
        maven { url 'https://maven.aliyun.com/nexus/content/repositories/gradle-plugin' }
        google()
        mavenCentral()
        jcenter() // Warning: this repository is going to shut down soon
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

1.4 导入flutter模块

project 就写 flutter不要写成 flutter_module,做完这4步,Sync gradle;

dependencies {

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

1.5 会出现的异常

为什么要将 settings.gradlebuild.gradle 里的代码改为低版本方式,因为flutter内嵌android项目的gradle版本,有极大概率会低于原生项目的gradle版本,我使用的Flutter版本是 3.13.2,已经算很新了,实际开发中很少用到最新版本,目前最新的beat版本也才3.19.0,如果不修改为低版本代码方式,可能会出现以下异常:

异常一

PluginApplicationException

网上的解决方案:是将 RepositoriesMode.FAIL_ON_PROJECT_REPOS 改为 RepositoriesMode.PREFER_PROJECT,然并卵,直接引发第二个异常。

在Android原生项目中 创建 Flutter模块,Flutter + Android 混合开发,android,flutter

异常二

依赖下载失败

在Android原生项目中 创建 Flutter模块,Flutter + Android 混合开发,android,flutter

异常三

  • BundleAar 可能是原生项目中的Gradle 和 Flutter内嵌android的Gradle,发生版本冲突,目前找到的解决方案,都是降低原生项目Gradle版本
  • 这个是编译异常,直接忽略,不影响运行

在Android原生项目中 创建 Flutter模块,Flutter + Android 混合开发,android,flutter

1.6 在原生项目中,启动Flutter页面

MainActivity 改为 FlutterActivity

在Android原生项目中 创建 Flutter模块,Flutter + Android 混合开发,android,flutter

1.7 源码地址

GitHub - LanSeLianMa/AndroidInsertFlutter: Gradle高版本情况下,Android原生项目引入Flutter模块的简单案例

2、Gradle低版本

基础配置版本:

1、Flutter版本 :3.13.2

2、Flutter内嵌android的Gradle版本:gradle-7.5-all.zip

3、Flutter内嵌android的Gradle插件版本:7.3.0

4、Android原生项目Gradle版本:gradle-6.7.1-bin.zip

5、Android原生项目Gradle 插件版本:4.2.2

6、Android Studio 版本:2021.4.2.2

7、原生项目由 Android Studio 2021.4.2.2 创建 

1.1 运行检查原生项目

创建完原生项目后,先运行一下,因为可能一些版本差异导致出现异常;

1.1.1 解决异常

在Android原生项目中 创建 Flutter模块,Flutter + Android 混合开发,android,flutter

在Android原生项目中 创建 Flutter模块,Flutter + Android 混合开发,android,flutter

1.1.2 警告

每个Android Studio版本,都有一个最小最大Gradle版本的限制,我尝试将Android原生的Gradle版本,改成和Flutter内嵌android的Gradle版本一致。结果它提示我升级Android Studio;

这些警告的意思是,想让我升级Gradle版本,直接忽略,不影响运行

在Android原生项目中 创建 Flutter模块,Flutter + Android 混合开发,android,flutter

1.2 在原生项目中, 创建Flutter模块

在Android原生项目中 创建 Flutter模块,Flutter + Android 混合开发,android,flutter

在Project Location 处只需要进入Android原生项目根目录下即可,它会自动生成 flutter项目的目录,默认项目名为 flutter_module;

正确路径:xxx/xxx/Android原生项目根目录

错误路径:xxx/xxx/Android原生项目根目录/flutter_module

在Android原生项目中 创建 Flutter模块,Flutter + Android 混合开发,android,flutter

1.3 自动生成关联代码

这待遇怎么到了高版本Android Studio就没了呢???

来人,再把相关产品经理拉出去枪毙10分钟!!!

在Android原生项目中 创建 Flutter模块,Flutter + Android 混合开发,android,flutter

在Android原生项目中 创建 Flutter模块,Flutter + Android 混合开发,android,flutter

 注意:创建完成后,先独立运行一下Flutter项目,检查是否正常,比如可能需要设置Flutter SDK;

在Android原生项目中 创建 Flutter模块,Flutter + Android 混合开发,android,flutter

1.4 在原生项目中, 启动Flutter页面

MainActivity 改为 FlutterActivity

在Android原生项目中 创建 Flutter模块,Flutter + Android 混合开发,android,flutter

1.5 源码地址 

GitHub - LanSeLianMa/AndroidAddFlutter: Gradle低版本情况下,Android原生项目引入Flutter模块的简单案例

总结

  • 目前Flutter对高版本Gradle并不是百分百同步,无法保证在所有高版本Gralde中都能正常使用。
  • 所以最稳妥的Android原生混合Flutter开发方案是:
    • 如果是新项目,最好直接创建Flutter项目,然后在Fluter的 android / ios目录中,写原生代码;
    • 如果是已有Android原生项目引入Flutter,注意一下原生项目的Gradle版本,如果不能降低,那就尝试使用高版本的Flutter,因为Flutter版本越高,它内嵌android的Gradle版本就越高;
  • 最后说一句题外话,如果是Flutter项目引入已有的Android原生项目,我是直接将原生项目代码复制到Flutter内嵌的android中,如果有更好的方式欢迎留言学习。

不同Android Studio 版本下载

各版本Android Studio仓库地址:Android Studio download archives  |  Android Developers

Ps:免安装版本,就是下载下来就能用,不会覆盖你当前电脑上原有的Android Studio,这样一台电脑上,就有多个不同版本的Android Studio,可以切换使用。

Android Studio 2021.4.2.2 免安装版本 --- Window版本

https://redirector.gvt1.com/edgedl/android/studio/ide-zips/4.2.2.0/android-studio-ide-202.7486908-windows.zip

Android Studio 2021.4.2.2 免安装版本 --- Mac版本

https://redirector.gvt1.com/edgedl/android/studio/ide-zips/4.2.2.0/android-studio-ide-202.7486908-mac.zip

在Android原生项目中 创建 Flutter模块,Flutter + Android 混合开发,android,flutter文章来源地址https://www.toymoban.com/news/detail-805552.html

到了这里,关于在Android原生项目中 创建 Flutter模块的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity Android Studio 混合开发实践(Unity工程导入Android项目进行开发)

    最近接到一个任务是将一个unity开发的游戏接入到现有的Android项目里,然后在现有的App实现点击一个按钮打开游戏,并且在游戏内提供一个可以退出到App的按钮。 整体需求是很明确的,难点主要有两个: 我们公司是做应用开发的,没有任何游戏开发的技能储备。 在游戏中需

    2024年02月11日
    浏览(43)
  • Android java项目添加kotlin混合开发环境配置

    Android Studio java代码中添加kotlin混合开发 1.项目的build.gradle中添加kotlin-gradle-plugin buildscript {     repositories {         google()         jcenter()              }     dependencies {         classpath \\\'com.android.tools.build:gradle:7.3.1\\\'         classpath \\\"org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.20\\\"

    2023年04月19日
    浏览(36)
  • Flutter在Android Studio上创建项目与构建模式

    一、安装插件     1、前提条件,安装配置好Android Studio环境     2、安装Flutter和Dart插件          Linux或者Windows平台: 1)、打开 File    Settings。 2)、在左侧列表中,选择 \\\" Plugins \\\" 右侧上方面板选中  \\\"Marketplace\\\" 在搜索框中输入“flutter”,选择Flutter插件,点击“Install”安

    2024年02月04日
    浏览(36)
  • Android Studio更新新版本后无法创建flutter项目

    最新更新了AndroidStudio版本,发现无法创建flutter项目。 dart和flutter插件确认都已安装,该有的环境配置都已配置。 最后与同事的插件作比较发现是Android APK Support这个插件没勾选。 勾选后,点击右下角的apply,重启AndroidStudio。 然后去点击File--New--New Flutter Project。

    2024年02月09日
    浏览(36)
  • Android Studio中配置Flutter插件,创建小项目“hello world”

    打开官网https://flutter.io/setup-windows/下载 Flutter sdk 并解压到一目录 Android studio 中安装 Flutter 插件, File - Settins - Plugins - 查找到 Flutter - install ,在安装 Flutter 插件时会自动提示下载 Dart 插件,只要同意即可,重启 as 后再次查看会显示如图所示效果: 图中标红代表 Dart 插件安装

    2024年02月04日
    浏览(42)
  • 【flutter和android原生的异步】

    java android 中,是多线程的 1.flutter中不要以为异步就是多线程  2.flutter的线程隔离理论? UI 线程 : 在 Flutter 中,UI 线程负责处理用户界面的构建和渲染。所有与用户界面相关的操作,例如布局计算、绘制和处理用户输入等,都在 UI 线程中执行。 UI 线程是单线程的,也称为主

    2024年04月15日
    浏览(33)
  • Flutter 与原生交互(Android,iOS)

    本质上 Flutter 和 原生通信是通过 Channel 来完成的:Flutter中消息的传递是完全异步的; 消息使用 Channel(平台通道) 在客户端(UI) 和主机(p平台) Flutter 与 native端交互三种方式 1.BasicMessageChannel (用于传递字符串和半结构化信息,持续通信使用,例如dart端将服务器的数据陆续传入到

    2024年02月17日
    浏览(37)
  • Flutter 页面嵌入 Android原生 View

    文章主要讲解Flutter页面如何使用Android原生View,但用到了Flutter 和 Android原生 相互通信知识,建议先看完这篇讲解 通信的文章 Flutter 与 Android原生 相互通信:BasicMessageChannel、MethodChannel、EventChannel-CSDN博客 数据观察监听,Flutter使用ValueNotifier,Android原生使用LiveData,在实体数据

    2024年01月21日
    浏览(26)
  • Flutter:Android/iOS集成Flutter模块

    一、Android工程集成Flutter模块工程: 1.使用命令创建Flutter模块工程lib_flutter(与Android工程属于同级目录): 2.更新Android工程配置: (1)将Android工程Support V4/V7包替换为AndroidX包,右键点击工程,在弹出菜单中选择 Refactor   Migrate to AndroidX...,然后在左下角弹出的框中,点击Do Refac

    2024年02月06日
    浏览(33)
  • Flutter 调用原生(Android)方法以及数据传输

    flutter是一个UI框架,有许多方法和功能只能靠原生自己来调用,但是我们怎么通过flutter去间接调用呢?官方给出了两种方法 在平台通道之间进行消息传递: 注:消息和响应以异步的形式进行传递,以确保用户界面能够保持响应。 flutter端: 然后找到android工程,打开MainActi

    2024年02月10日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包