Flutter Native混合开发(二)——混合开发

Flutter Native混合开发(二)——混合开发

这一章节的主要目的是使Flutter和Android Native可以混合编程,并且可以互相独立开发,Nactive开发者不需要安装Flutter SDK也可以继续开发Native程序。

1、推荐官方文档

《Add Flutter to existing app》

2、创建Flutter Module

将Flutter作为模块添加入安卓工程,需要Flutter项目为Flutter Module而不是Flutter Application。如果需要将Flutter Application作为模块添加,需要使用命令:

cd some/path/
flutter create -t module --org com.example.my_flutter

3、打包生成AAR

使用AS菜单栏Build目录下的Flutter->Build AAR或者命令:

cd some/path/my_flutter
flutter build aar

生成成功后会提示下图使用指示,按照指示完成Native项目设置:
Flutter Native混合开发(二)——混合开发_第1张图片

4、Native项目设置

由于Flutter基于Java 1.8及以上运行,须在App/Build.grade中添加兼容:

android {
    //...
    compileOptions {
        sourceCompatibility 1.8
        targetCompatibility 1.8
    }
}

按照指示,将AAR设置为Maven本地仓库。建议Maven URL使用相对路径,也可设置为网络仓库,使用网络地址。

5、添加Flutter开发的UI界面

使用FlutterActivity的build方法新建Intent跳转:

myButton.addOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        startActivity(
        FlutterActivity
            .withNewEngine()
            .initialRoute("/my_route")
            .build(currentActivity)
        );
    }
});

6、优化页面加载速度

将Flutter Engine(一个C++实现的SDK 包括Skia引擎、Dart运行时、文字排版引擎等)预先生成而且使其生命周期贯穿整个程序,当切换flutter页面时使用预先生成的引擎而不是新建,将会剩下大部分启动时间。这种效果在release情况下较为明显。

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        flutterEngine = new FlutterEngine(this);
        flutterEngine.getDartExecutor().executeDartEntrypoint(DartEntrypoint.createDefault()
        );

        // Cache the FlutterEngine to be used by FlutterActivity.
        FlutterEngineCache
        .getInstance()
        .put("my_engine_id", flutterEngine);
    }
}

myButton.addOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        startActivity(
        FlutterActivity
            .withCachedEngine("my_engine_id")
            .build(currentActivity)
        );
    }
});

你可能感兴趣的:(Flutter Native混合开发(二)——混合开发)