安卓原生工程集成Flutter工程
2019-10-11 本文已影响0人
蓝不蓝编程
一、创建安卓和Flutter工程
-
创建安卓原生工程(语言选择为Kotlin,工程命名为:android_demo)
-
创建Flutter工程(下面是采用IntelliJ IDEA创建的,语言选择为Kotlin/Swift,工程命名为:flutter_demo)
二、修改Flutter工程
- 在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节点.
最终代码如下:
<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>
- 在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)
-
同步一下安卓原生项目,运行一下.