美文网首页Flutter圈子
Flutter安卓Java层初始化源码分析

Flutter安卓Java层初始化源码分析

作者: 超丶赛亚叼 | 来源:发表于2018-09-13 13:18 被阅读261次

    初始化

    FlutterMain.startInitialization()

    • 初始化assets路径,这里可以通过metadata自定义产物路径。
    • 如果vm_snapshot_data、vm_snapshot_instr、isolate_snapshot_data、isolate_snapshot_instr这四个文件在asset根目录下,则为AOT方式运行,否则为JIT方式运行。
    • 异步把所有assets文件复制到app_flutter目录下,这里使用的是AsyncTask。
    • 复制之前会检查时间戳,检查的维度是APP的version_code和上次更新时间,如果不相等才重新复制assets。

    Activity启动

    FlutterMain.ensureInitializationComplete()

    • sResourceExtractor.waitForCompletion()等待初始化时复制assets文件的AsyncTask任务结束
    • 构建参数,主要是将产物路径添加到参数中,也会从Activity的Intent中解析一部分参数。
    • 设置各种路径,包含缓存,存储,产物路径等。
    • 该方法每次启动只调用一次。

    创建FlutterView以及FlutterNativeView

    • 初始化各种channel
    • 调用FlutterNativeView的nativeAttach,在native层会对应到AndroidShellHolder,返回该对象指针,这里会创建Engine和Shell。

    FlutterView.runFromBundle()

    调用native方法nativeRunBundleAndSnapshotFromLibrary,可以传入下面4个参数,它们与native参数对应如下:

    • bundlePath 即assetsPath -> jbundlepath
    • entrypoint -> jEntrypoint
    • libraryPath -> jLibraryUrl
    • snapshotOverride -> jdefaultPath

    除此之外还会传入AssetManager。
    进行参数设置后,最终会调到engine中的PrepareAndLaunchIsolate,最后调用dart_isolate.cc中的Run方法启动,如果传入了libraryPath则调用RunFromLibrary,到此之后dart VM就运行起来了,于是App愉快地进入了dart的世界。

    相关文章

      网友评论

      本文标题:Flutter安卓Java层初始化源码分析

      本文链接:https://www.haomeiwen.com/subject/jdswgftx.html