官方连接参考
目前大部分项目都是已经有原生的了,而后集成flutter做为子模块开发,趟了一些坑,记录一下java
android { //... defaultConfig { ndk { // Filter for architectures supported by Flutter. abiFilters 'armeabi-v7a', 'arm64-v8a' } } }
compileOptions { sourceCompatibility 1.8 targetCompatibility 1.8 }
flutter create -t module --no-androidx myflutter
建立modle 的时候注意是在原项目内,仍是和原项目同一级目录, 若是是同原项目平级, settings.gradle的设置以下android
include ':app' // assumed existing content setBinding(new Binding([gradle: this])) // new evaluate(new File( // new settingsDir.parentFile, // new 'myflutter/.android/include_flutter.groovy' // new ))
若是是在原项目内部 ,一个是parentFile 一个是path ,别弄混了web
include ':app' // assumed existing content setBinding(new Binding([gradle: this])) // new evaluate(new File( // new settingsDir.path, // new 'my_flutter/.android/include_flutter.groovy' // new ))
app 的gradle 中的配置 始终是以下 注意项目名称 并非你想的刚才建立module指定的名称,为啥是这样,你能够参考.android/include_flutter.groovy文件就知道了缓存
implementation project(':flutter')
flutter 提供了几种交互的方式,原生打开flutter提供的Activity的方法是 , 但这里你会观察到黑屏后才打开,这是由于flutter初始化渲染引擎须要时间,那怎么办呢,bash
myButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { startActivity( FlutterActivity.createDefaultIntent(context) ); } });
flutter 建议咱们再application 中初始化并缓存起来,这样就不会有黑屏了。架构
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); // Instantiate a FlutterEngine. flutterEngine = new FlutterEngine(this); // Start executing Dart code to pre-warm the FlutterEngine. flutterEngine.getDartExecutor().executeDartEntrypoint( DartEntrypoint.createDefault() ); // Cache the FlutterEngine to be used by FlutterActivity. FlutterEngineCache .getInstance() .put("my_engine_id", flutterEngine); } }
调动的时候经过id 去查找缓存的渲染引擎app
myButton.addOnClickListener(new OnClickListener() { @Override public void onClick(View v) { startActivity( FlutterActivity .withCachedEngine("my_engine_id") .build(context) ); } });