4747f77ce889

FlutterApplication

进入 FlutterMain.startInitialization(this);

4747f77ce889

FlutterMain片段

进入initConfig(applicationContext);

4747f77ce889

FlutterMain片段

4747f77ce889

FlutterMain片段

4747f77ce889

flutter编译产物

app怎么依赖assets目录下的这些东西呢?

进入initAot(applicationContext);

读取assets文件

4747f77ce889

FlutterMain片段

存放的位置

进入initResources(applicationContext);

private static void initResources(Context applicationContext) {

Context context = applicationContext;

(new ResourceCleaner(applicationContext)).start();

Bundle metaData = null;

try {

metaData = context.getPackageManager().getApplicationInfo(context.getPackageName(), 128).metaData;

} catch (NameNotFoundException var4) {

Log.e("FlutterMain", "Unable to read application info", var4);

}

if (metaData != null && metaData.getBoolean("DynamicPatching")) {

sResourceUpdater = new ResourceUpdater(applicationContext);

if (sResourceUpdater.getDownloadMode() == DownloadMode.ON_RESTART || sResourceUpdater.getDownloadMode() == DownloadMode.ON_RESUME) {

sResourceUpdater.startUpdateDownloadOnce();

if (sResourceUpdater.getInstallMode() == InstallMode.IMMEDIATE) {

sResourceUpdater.waitForDownloadCompletion();

}

}

}

sResourceExtractor = new ResourceExtractor(applicationContext);

sResourceExtractor.addResource(fromFlutterAssets(sFlx)).addResource(fromFlutterAssets(sAotVmSnapshotData)).addResource(fromFlutterAssets(sAotVmSnapshotInstr)).addResource(fromFlutterAssets(sAotIsolateSnapshotData)).addResource(fromFlutterAssets(sAotIsolateSnapshotInstr)).addResource(fromFlutterAssets("kernel_blob.bin"));

if (sIsPrecompiledAsSharedLibrary) {

sResourceExtractor.addResource(sAotSharedLibraryPath);

} else {

sResourceExtractor.addResource(sAotVmSnapshotData).addResource(sAotVmSnapshotInstr).addResource(sAotIsolateSnapshotData).addResource(sAotIsolateSnapshotInstr);

}

sResourceExtractor.start();

}

FlutterActivity与FlutterActivityDelegate

4747f77ce889

FlutterActivity片段

4747f77ce889

FlutterActivity片段

4747f77ce889

FlutterActivityDelegate的onCreate()

ensureInitializationComplete是把flutter相关的初始化进来然后使用FlutterView进行行加载显示

4747f77ce889

找到flutter_assets下的flutter产物

每一个FlutterView中包了一个FlutterNativeView然后最终就是FlutterView->runFromBundle调用FlutterNativeView->runFromBundle最后渲染到界面上

4747f77ce889

来自闲鱼

app module

4747f77ce889

这三个不用copy,app依赖my_flutter module就可以

4747f77ce889

复制这个到app module 对应目录实现手动热更新

依赖完成就可以通过startActivity成功的进入到FlutterActivity

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐