安卓原生工程集成Flutter工程

1,062 阅读2分钟

一、创建安卓和Flutter工程

  1. 创建安卓原生工程(语言选择为Kotlin,工程命名为:android_demo)

  2. 创建Flutter工程(下面是采用IntelliJ IDEA创建的,语言选择为Kotlin/Swift,工程命名为:flutter_demo)

二、修改Flutter工程

  1. 在Flutter工程下,编辑android/app/build.gradle
  • 将工程改为library工程
apply plugin: 'com.android.application'

改为

apply plugin: 'com.android.library'
  • 删除android节点下defaultConfig下面的applicationId配置 最终代码(关键代码节选):
apply plugin: 'com.android.library'
...
android {
    ...
    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 28
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
...
}
  1. 在Flutter工程下,打开android/app/src/main/AndroidManifest.xml文件
  • 删除application标签里面的属性;
  • 将activity的路径修改为完整路径;
  • 删除intent-filter节点.
    最终代码如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.flutter_demo">
    <application>
        <activity
            android:name="com.example.flutter_demo.MainActivity"
            android:launchMode="singleTop"
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize">
            <meta-data
                android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
                android:value="true" />
        </activity>
    </application>
</manifest>
  1. 在Flutter工程下,修改MainActivity文件
  • 在import代码中增加:
import io.flutter.view.FlutterMain
  • 在onCreate方法下增加如下代码:
FlutterMain.startInitialization(this.applicationContext)

最终代码如下:

import android.os.Bundle
import io.flutter.app.FlutterActivity
import io.flutter.plugins.GeneratedPluginRegistrant
import io.flutter.view.FlutterMain
class MainActivity: FlutterActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    FlutterMain.startInitialization(this.applicationContext)
    super.onCreate(savedInstanceState)
    GeneratedPluginRegistrant.registerWith(this)
  }
}

三、修改安卓原生工程

  1. 打开安卓工程下settings.gradle文件,增加如下配置: (下面Flutter路径必须是相对路径,不能用绝对路径)
include ':app', ':flutter_demo'
project(':flutter_demo').projectDir = new File(settingsDir, '../flutter_demo/android/app')
  1. 在安卓工程下local.properties中,增加如下配置(可以从Flutter工程下android目录下local.properties文件中拷贝):
flutter.sdk=自己的flutterSDK路径
  1. 修改安卓工程下的build.gradle 文件:
  • 在android节点下增加如下内容:
compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
  • 在dependencies节点下增加依赖:
implementation project(“:flutter_demo”)

最终代码(关键代码节选):

android {
    ...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    implementation project(":flutter_demo")
    ...
}
  1. 在安卓原生工程中打开Flutter工程界面:
val componentName = ComponentName(this, "com.example.flutter_demo.MainActivity")
val intent = Intent().setComponent(componentName)
startActivity(intent)
  1. 同步一下安卓原生项目,运行一下.

demo源代码

gitee.com/cxyzy1/andr…