在现有项目中导入Flutter
参考:Google官方文档 Add-Flutter-to-existing-apps
- Android项目引入flutter module
- 在项目根目录通过命令行执行
flutter create -t module my_flutter
- 进入my_flutter文件夹
$ cd .android/
$ gradlew flutter:assembleDebug
- 在app下的build.gradle添加如下配置
compileOptions {
  sourceCompatibility 1.8
  targetCompatibility 1.8
}
- 在setting.gradle里配置
//根目录
include ':app'                                     // assumed existing content
setBinding(new Binding([gradle: this]))                                 // new
evaluate(new File(                                                      // new
  settingsDir,                                               // new
  'my_flutter/.android/include_flutter.groovy'                          // new
))                                                                      // new
//同级目录
include ':app'                                     // assumed existing content
setBinding(new Binding([gradle: this]))                                 // new
evaluate(new File(                                                      // new
  settingsDir.parentFile,                                               // new
  'my_flutter/.android/include_flutter.groovy'                          // new
))                                                                      // new
- 在app下的build.gradle文件添加依赖项目。
 ps:此处必须是flutter,因为项目引入的是在.\flutter_module.android下的Flutter库
implementation project(':flutter')
- 在原生使用flutter
 private void createFlutterView() {
        View flutterView = Flutter.createView(MainActivity.this,getLifecycle(),"rount1");
        FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        addContentView(flutterView, layout);
    }
flutter_boost的使用
- 在flutter的项目pubspec.yaml中添加依赖
flutter_boost: ^0.0.415
- Flutter代码集成
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
    ///register page widget builders,the key is pageName
    FlutterBoost.singleton.registerPageBuilders({
      'sample://firstPage': (pageName, params, _) => FirstRouteWidget(),
      'sample://secondPage': (pageName, params, _) => SecondRouteWidget(),
    });
    ///query current top page and load it
    FlutterBoost.handleOnStartPage();
  }
  @override
  Widget build(BuildContext context) => MaterialApp(
      title: 'Flutter Boost example',
      builder: FlutterBoost.init(), ///init container manager
      home: Container());
}
- Android代码集成
在Application的onCreate初始化
引入flutter_boost
    implementation project(path: ':flutter_boost')
public class MyApplication extends FlutterApplication {
    @Override
    public void onCreate() {
        super.onCreate();
        FlutterBoostPlugin.init(new IPlatform() {
            @Override
            public Application getApplication() {
                return MyApplication.this;
            }
            /**
             * get the main activity, this activity should always at the bottom of task stack.
             */
            @Override
            public Activity getMainActivity() {
                return MainActivity.sRef.get();
            }
            @Override
            public boolean isDebug() {
                return false;
            }
            /**
             * start a new activity from flutter page, you may need a activity router.
             */
            @Override
            public boolean startActivity(Context context, String url, int requestCode) {
                return PageRouter.openPageByUrl(context,url,requestCode);
            }
            @Override
            public Map getSettings() {
                return null;
            }
        });
    }
踩坑
//flutter只提供v7a的so,所以只能配置
ndk {
            abiFilters "armeabi-v7a"
        }
引入报错Must be able to initialize the VM.
尝试在flutter的执行gradle编译 gradlew assemble










