一、创建安卓和Flutter工程
-
创建安卓原生工程(语言选择为Kotlin,工程命名为:android_demo)
-
创建Flutter工程(下面是采用IntelliJ IDEA创建的,语言选择为Kotlin/Swift,工程命名为:flutter_demo)
- 在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"
}
...
}
- 在Flutter工程下,打开android/app/src/main/AndroidManifest.xml文件
- 删除application标签里面的属性;
- 将activity的路径修改为完整路径;
- 删除intent-filter节点.
最终代码如下:
- 在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)
}
}
三、修改安卓原生工程
- 打开安卓工程下
settings.gradle
文件,增加如下配置: (下面Flutter路径必须是相对路径,不能用绝对路径)
include ':app', ':flutter_demo'
project(':flutter_demo').projectDir = new File(settingsDir, '../flutter_demo/android/app')
- 在安卓工程下
local.properties
中,增加如下配置(可以从Flutter工程下android目录下local.properties文件中拷贝):
flutter.sdk=自己的flutterSDK路径
- 修改安卓工程下的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")
...
}
- 在安卓原生工程中打开Flutter工程界面:
val componentName = ComponentName(this, "com.example.flutter_demo.MainActivity")
val intent = Intent().setComponent(componentName)
startActivity(intent)
- 同步一下安卓原生项目,运行一下.
https://gitee.com/cxyzy1/android_with_flutter