返回

从入门到进阶:Flutter AAR 集成实战指南

Android

前言

Flutter 是一种跨平台框架,使开发人员能够使用单一代码库构建适用于 iOS 和 Android 的应用程序。然而,在某些情况下,将 Flutter 项目集成到现有原生 Android 应用程序中可能是必要的。通过将 Flutter 项目打包成 Android 存档 (AAR),可以实现这种集成。

将 Flutter 项目打包成 AAR

  1. 修改 Flutter 项目的 build.gradle 文件:

    • application 更改为 library

      android {
          compileSdkVersion 33
          defaultConfig {
              minSdkVersion 21
              targetSdkVersion 33
          }
          buildTypes {
              release {
                  minifyEnabled true
                  proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
              }
          }
      }
      
  2. 删除 AndroidManifest.xml 文件:

    • Flutter 项目中的 AndroidManifest.xml 文件包含用于启动 Flutter 应用程序的配置。打包成 AAR 时,此文件不需要。
  3. 重新构建 Flutter 项目:

    • 运行 flutter build aar 命令重新构建 Flutter 项目。

在原生 Android 项目中集成 AAR

  1. 将 AAR 文件添加到原生 Android 项目的依赖项:

    • 在原生 Android 项目的 build.gradle 文件中,添加以下依赖项:

      implementation files('path/to/flutter.aar')
      
  2. 创建 FlutterView:

    • 在原生 Android 活动的布局文件中,创建 FlutterView:

      <androidx.flutter.embedding.android.FlutterView
          android:id="@+id/flutter_view"
          android:layout_width="match_parent"
          android:layout_height="match_parent"/>
      
  3. 配置 FlutterEngine:

    • 在原生 Android 活动中,配置 FlutterEngine:

      override fun onCreate(savedInstanceState: Bundle?) {
          super.onCreate(savedInstanceState)
          setContentView(R.layout.activity_main)
      
          // 创建 FlutterEngine
          val flutterEngine = FlutterEngine(this)
      
          // 将 FlutterView 与 FlutterEngine 关联
          val flutterView = findViewById<FlutterView>(R.id.flutter_view)
          flutterView.attachToFlutterEngine(flutterEngine)
      }
      
  4. 启动 Flutter Activity:

    • 如果 Flutter 项目需要特定页面或路由,则需要启动 Flutter Activity:

      val intent = FlutterActivity.createDefaultIntent(this)
      intent.putExtra("route", "specific_route_name")
      startActivity(intent)
      

常见问题解答

  1. Manifest合并错误:

    • 确保 Flutter 项目的 build.gradle 文件中没有 AndroidManifest.xml 文件。
  2. 缺少符号:

    • 确保已将所需的符号添加到原生 Android 项目的 proguard 规则中。
  3. 权限错误:

    • 确保已在原生 Android 项目的清单文件中授予所有必需的权限。
  4. 生命周期事件未传递:

    • 确保已正确配置 FlutterView 的生命周期回调。

结论

通过遵循本指南,您可以将 Flutter 项目成功打包为 AAR 并将其集成到原生 Android 应用程序中。这种方法使您能够利用 Flutter 的跨平台优势,同时与现有的原生 Android 代码库保持兼容性。通过在原生 Android 应用程序中集成 Flutter 功能,您可以增强应用程序的功能并提供更好的用户体验。