一、Flutter中使用Android Studio打开原生文件

flutter与原生ios交互 flutter与安卓原生交互_android

 选中Android目录--右键--选中flutter---Open for Editing in Android Studio

问题1:flutter不能点击时,打开mainactivity类

flutter与原生ios交互 flutter与安卓原生交互_交互_02

 点击失败,需要配置Android API版本

问题2:还是不行,在Android项目下创建一个xxx_android.iml文件,xxx 代表文件名,虽然可以指定为任意符合命名规范的字符,但一般会把 Flutter 项目的名字作为文件名

参考:

<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
  <component name="FacetManager">
    <facet type="android" name="Android">
      <configuration>
        <option name="ALLOW_USER_CONFIGURATION" value="false" />
        <option name="GEN_FOLDER_RELATIVE_PATH_APT" value="/gen" />
        <option name="GEN_FOLDER_RELATIVE_PATH_AIDL" value="/gen" />
        <option name="MANIFEST_FILE_RELATIVE_PATH" value="/app/src/main/AndroidManifest.xml" />
        <option name="RES_FOLDER_RELATIVE_PATH" value="/app/src/main/res" />
        <option name="ASSETS_FOLDER_RELATIVE_PATH" value="/app/src/main/assets" />
        <option name="LIBS_FOLDER_RELATIVE_PATH" value="/app/src/main/libs" />
        <option name="PROGUARD_LOGS_FOLDER_RELATIVE_PATH" value="/app/src/main/proguard_logs" />
      </configuration>
    </facet>
  </component>
  <component name="NewModuleRootManager" inherit-compiler-output="true">
    <exclude-output />
    <content url="file://$MODULE_DIR$">
      <sourceFolder url="file://$MODULE_DIR$/app/src/main/java" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/gen" isTestSource="false" generated="true" />
    </content>
    <orderEntry type="jdk" jdkName="Android API 30 Platform" jdkType="Android SDK" />
    <orderEntry type="sourceFolder" forTests="false" />
    <orderEntry type="library" name="Flutter for Android" level="project" />
  </component>
</module>
二、Flutter 与原生交互的三种方式

原生与Flutter数据交互,主要就是构建好通道机制 

Flutter 与原生交互使用Platform Channel。Flutter定义了三种不同类型的Channel,它们分别是: 1.BasicMessageChannel:用于传递字符串和半结构化的信息,可持续通信,收到消息后可以回复此次消息。场景:消息互发(双向有返回值,可持续通信)  2.MethodChannel:用于传递方法调用。场景:native与flutter的方法调用(双向有返回值,一次性通信) 3.EventChannel: 用于事件型的通信,仅支持 native 到 Flutter 的单向传递。场景:通常用于状态端监听,比如网络变化、传感器数据、电量更新或声音改变(仅支持数据单向传递,无返回值)

三种Channel之间互相独立,各有用途,但它们在设计上却非常相近。每种Channel均有三个重要成员变量: name:  String类型,代表Channel的名字,也是其唯一标识符。 messager:BinaryMessenger类型,代表消息信使,是消息的发送与接收的工具。 codec: MessageCodec类型或MethodCodec类型,代表消息的编解码器。

flutter插件基础之调用EventChannel的简单使用(三) - 简书三、flutter页中嵌入Android控件---AndroidView

使用MethodChannel方式

四、将flutter项目集成到原生项目

iOS通常有3种方式:

通过 CocoaPods 引入 Flutter SDK

通过 framework 的形式引入

将 Flutter 应用和插件嵌入 Xcode

而 Android 有2种方式:

  1. 通过 AAR 引入
  2. 通过 submodule 源码引入

将 Flutter 集成到现有应用 - Flutter 中文文档 - Flutter 中文开发者网站 - Flutter

Flutter与iOS原生混合开发

Flutter混合开发架构之Channel