Android如何在原生App中嵌入Flutter

作者:我是绿色大米啊 时间:2022-03-11 17:06:06 

本文参考文档Add Flutter to existing apps。

首先有一个可以运行的原生项目

第一步:新建Flutter module

Terminal进入到项目根目录,执行flutter create -t module ‘module名字'例如:flutter create -t module flutter-native

执行完毕,就会发现项目目录下生成了一个module

Android如何在原生App中嵌入Flutter

第二步:同步Flutter module依赖

进入到新生成的Flutter module目录下的.android目录下,命令是cd .android/,然后执行gradlew flutter:assembleDebug,mac下./gradlew flutter:assembleDebug

这过程根据网络情况,可能有点长。

结束之后在.android/Flutter/build/outputs/aar/目录下会生成flutter-debug.aar

Android如何在原生App中嵌入Flutter

第三步:设置JDK版本

在app的build.gradle文件中加入:

compileOptions { sourceCompatibility 1.8 targetCompatibility 1.8 }

Android如何在原生App中嵌入Flutter

第四步:依赖Flutter module

settings.gradle中加入


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

注意:最后一个参数最好写全路径!

在app/build.gradle中


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

到此准备过程结束,写代码测试一下,我使用的是Fragment方式。当然也有View的方式。

MainActivity.kt ↓


class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
 super.onCreate(savedInstanceState)
 supportRequestWindowFeature(Window.FEATURE_NO_TITLE)
 setContentView(R.layout.activity_main)
 val tx = supportFragmentManager.beginTransaction()
 tx.replace(R.id.content, Flutter.createFragment("route"))
 tx.commit()
}
}

activity_main.xml ↓


<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<FrameLayout
 android:id="@+id/content"
 android:layout_width="match_parent"
 android:layout_height="match_parent"></FrameLayout>

</android.support.constraint.ConstraintLayout>

Android如何在原生App中嵌入Flutter

来源:https://juejin.cn/post/6844903848536981511

标签:Android,app,Flutter
0
投稿

猜你喜欢

  • C#实现合并多张图片为GIF动态图

    2022-12-13 04:16:35
  • Java多线程之多种锁和阻塞队列

    2023-09-26 10:31:55
  • SpringMVC实现文件上传与下载

    2021-11-02 11:53:38
  • Idea自动生成Entity实现过程详解

    2022-06-03 12:18:24
  • Java 设计模式中的策略模式详情

    2023-08-06 03:45:11
  • Spring Boot Debug调试过程图解

    2023-12-13 10:27:33
  • Android开发实现的计时器功能示例

    2023-09-04 07:33:33
  • C#操作RabbitMQ的完整实例

    2022-05-05 19:41:05
  • java 中链表的定义与使用方法

    2023-03-07 07:34:13
  • C#实现简单的字符串加密

    2022-12-28 17:09:29
  • Android基于OpenGL在GLSurfaceView上绘制三角形及使用投影和相机视图方法示例

    2023-06-08 03:59:42
  • Android获取手机文件夹及文件列表的方法

    2022-04-22 22:22:32
  • 浅谈Java编程之if-else的优化技巧总结

    2023-06-02 23:28:12
  • java入门概念个人理解之package与import浅析

    2021-07-09 10:18:55
  • mybatis中批量插入的两种方式(高效插入)

    2023-09-16 22:21:07
  • SpringBoot中使用 RabbitMQ的教程详解

    2023-10-22 01:02:42
  • Android Studio实现简易计算器设计

    2022-08-22 18:41:55
  • springboot2.3 整合mybatis-plus 高级功能及用法详解

    2023-02-23 23:31:55
  • C++ 风靡一时的连连看游戏的实现流程详解

    2022-10-08 13:39:12
  • 深入学习java位运算的基础知识

    2021-06-01 07:10:40
  • asp之家 软件编程 m.aspxhome.com