Flutter1.12android端升级适配

Flutter1.12官方做了很多修改,有一些是break change.
少儿词典中,通过将flutter工程添加到现有android工程的形式来使用Flutter.\

version < 1.12时,少儿词典Flutter工程的封装如下:

1、Flutter页面的构建。
直接构建FlutterView,然后将flutterview添加到布局文件中
import io.flutter.facade
 val flutterView = Flutter.createView(
        activity,
        lifecycle ?: activity.lifecycle,
        pageInfo.toString()
    )
    viewgroup.addview(flutterView)
2、Flutter工程的编译打包。

1、编译构建flutter工程:./gradlew assembleRelease
2、解压构建出来的apk及aar.(apk是自己的项目生成的,aar是第三方插件生成的)
3、将解压出来的各个文件,分类规整到一个新的aar中。
4、将整合的aar复制到少儿词典android项目中,并作为依赖。

version1.12升级需要做的适配工作

1、Flutter页面的构建。

包io.flutter.facade不再暴露,所以api Flutter.createView()已失效。flutter官方已经不再建议使用flutter view来构建试图,建议通过FlutterFragment或者FlutterActivity的形式来构建Flutter页面,少儿词典选择了FlutterFragment的形式来构建Flutter页面。

val newFragment = FlutterFragment.withNewEngine().initialRoute(pageInfo.toString())
        .build<FlutterFragment>()
var methodChannel:MethodChannel? = null
activity.supportFragmentManager.registerFragmentLifecycleCallbacks(object :
        FragmentManager.FragmentLifecycleCallbacks(){
        override fun onFragmentAttached(fm: FragmentManager, attachedFragment: Fragment, context: Context) {
            super.onFragmentAttached(fm, attachedFragment, context)
            if(attachedFragment is FlutterFragment){
                 methodChannel = MethodChannel(attachedFragment.flutterEngine?.dartExecutor, METHOD_CHANNEL_NAME).also {
                    it.setMethodCallHandler { methodCall, result ->
                        YLog.d(TAG, methodCall.toString()+result.toString())
                        when (methodCall.method) {
                            "popFlutter" -> {
                                activity.finish()
                                result.success("messageReturnToFlutter")
                            }
                            ………………一些method
                        }
                    }

                }
            }
        }

    },false)
构建flutterview的同时,还需要构建对应的MethodChannel,用于Flutter调用原生的接口,构建MethodChanne对象,一个必要参数是BinaryMessenger,而只有flutterengine中才有一个实现了BinaryMessenger接口的变量,而flutterengine必须是FlutterFragment attach到Activity后才会初始化,这就是要将使用FlutterFragment的Activity通过参数传进来,并注册registerFragmentLifecycleCallbacks的原因。
2、Flutter工程的编译打包。

1.12以后,flutter工程作为依赖被打包到主工程中就简单很多了,flutter官方提供了打包命令

flutter build aar //用于构建出aar,并添加到原生android工程
flutter build apk //直接构建一个flutter apk

当打包完成后,flutter工程的gradle脚本会自动生成一个aar,这个aar集成了所有的项目代码以及第三方插件的代码,并发布到本地的一个maven仓库。我们需要做的是,在主工程中添加这个本地maven仓库依赖即可。

1、譬如少儿词典的flutter工程构建脚本如下:
function mkDirNotExist() {
	if [[ ! -d $1 ]]; then
		mkdir -p $1
	fi
}
flutter clean
flutter build aar
base_path=$PWD
repoPath=$PWD"/build/host/outputs/repo/"
dest="../kid-dict-android/flutter_repo/"
rm -fr $dest
mkDirNotExist $dest
cp -fr $repoPath $dest #将打包出来的repo目录拷贝到少儿词典android工程的flutter_repo目录
echo "build aar成功,已拷贝至 $dest "
2、将flutter_repo目录添加到少儿词典android工程的gradle repositories中
allprojects {
    repositories {
        google()
        jcenter()
        maven {
            url "$rootProject.projectDir/flutter_repo"
        }
       …………
    }
}

参考资料链接:https://flutter.dev/docs/development/add-to-app/android/project-setup

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值