【Flutter 专题】59 图解 Android Native 获取 Flutter 资源文件
小菜前段时间研究了 Android Native 与 Flutter 之间的交互;若两端均需要相同资源文件,若不能共享则势必会增加整体包大小;今天小菜研究一下如何通过 Android Native 获取 Flutter 中资源文件;
官网对于 assets 介绍很简洁,使用过程代码量也很少,虽简洁但依然值得研究;小菜以 Android 为主工程,Flutter 作为 Module 进行测试;
FlutterView
小菜学习 Android 与 Flutter 交互时会用到 FlutterView 作为桥接控件;而对于资源文件的获取也同样适用;其核心方法是 getLookupKeyForAsset;
源码分析
逐层分析源码,通过 getLookupKeyForAsset 方法我们可以获取资源文件的路径,根目录是固定的 flutter_assets 而非 Module 名;
案例测试
小菜通过 getLookupKeyForAsset 获取文件路径,以 images/ic_launcher.png 图片为例,借助 assetManager.open 转为流信息转为 Bitmap 进行展示;
小菜测试可以用如下方式获取资源文件路径;
PluginRegistry.Registrar
另一种常用的方式是以插件方式,Flutter 在使用 AndroidView 方式嵌入 Native View 与 Android 进行交互时;核心方法同样是 lookupKeyForAsset 获取资源路径,之后便是用原生方法解析 assets 资源文件;
小菜测试时主要注意两点:
获取 PluginRegistry.Registrar,不能直接 new 对象,需要注册自定义 Native View;
在获取文件路径后尝试了 AssetFileDescriptor 方式解析数据流,完全可以用于 assetManager.open 方式解析;
注意事项
无论是 FlutterView 还是 PluginRegistry.Registrar 方式均需 lookupKeyForAsset 获取 Flutter 端资源文件路径,且获取类型与原生 assets 中一致;小菜测试获取一个 json 文件进行解析;
小菜还未成功尝试 Flutter 获取 Native 的资源文件,依旧是从零探索中;如有错误请多多指导!
来源: 阿策小和尚
版权声明: 本文为 InfoQ 作者【阿策小和尚】的原创文章。
原文链接:【http://xie.infoq.cn/article/42dadb31b5a6bdfd8d15ccac4】。文章转载请联系作者。
评论