Android Flutter
原生App中嵌入Flutter (集成)
第一步:新建Flutter module
Terminal进入到项目根目录,执行flutter create -t module ‘module名字’
例如:flutter create -t module flutter-native
执行完毕,就会发现项目目录下生成了一个module
第二步:同步Flutter module依赖
进入到新生成的Flutter module目录下的.android目录下,命令是cd .android/,然后执行gradlew flutter:assembleDebug,mac下./gradlew flutter:assembleDebug
这过程根据网络情况,可能有点长。
结束之后在.android/Flutter/build/outputs/aar/目录下会生成flutter-debug.aar
第三步:设置JDK版本
在app的build.gradle文件中加入:
android {
......
compileOptions {
sourceCompatibility 1.8
targetCompatibility 1.8
}
}
第四步:依赖Flutter module
在settings.gradle中加入
include ':app'
setBinding(new Binding([gradle: this]))
evaluate(new File(
settingsDir.parentFile,
//注意!flutter_module要改成你的module名
'Test/flutter_native/.android/include_flutter.groovy'
))
安卓原生项目跳转至Flutter页面
第一步,在AndroidManifest.xml加入FlutterActivity
<activity
android:name="io.flutter.embedding.android.FlutterActivity"
android:theme="@style/AppTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize"
/>
第二步,点击跳转
button.setOnClickListener {
startActivity(
FlutterActivity
.withNewEngine()
.build(this)
)
}
但是会发现,跳转的速度不理想,可以将页面存起来,速度就会快很多。
创建一个Application
Java
public class MyApp extends Application {
FlutterEngine flutterEngine;
@Override
public void onCreate() {
super.onCreate();
flutterEngine = new FlutterEngine(this);
flutterEngine
.getDartExecutor()
.executeDartEntrypoint(DartExecutor.DartEntrypoint.createDefault());
FlutterEngineCache
.getInstance()
.put("my_engine_id", flutterEngine);
}
@Override
public void onTerminate() {
flutterEngine.destroy();
super.onTerminate();
}
}
Kotlin
class MyApp : Application(){
lateinit var flutterEngine : FlutterEngine
override fun onCreate() {
super.onCreate()
flutterEngine = FlutterEngine(this)
// 可设置初始路由
// flutterEngine.getNavigationChannel().setInitialRoute("your/route/here");
flutterEngine.dartExecutor.executeDartEntrypoint(DartExecutor.DartEntrypoint.createDefault())
FlutterEngineCache
.getInstance()
.put("my_engine_id", flutterEngine)
}
// 释放flutter引擎
override fun onTerminate() {
flutterEngine.destroy()
super.onTerminate()
}
}
清单文件
<application
android:name=".MyApp"
</application>
修改跳转Flutter页面的代码
button.setOnClickListener {
startActivity(
FlutterActivity
.withCachedEngine("my_engine_id")
.build(this)
)
}