flutter-有哪位大佬做过打包产物动态下发吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
programbao
V2EX    程序员

flutter-有哪位大佬做过打包产物动态下发吗?

  •  
  •   programbao 2023-07-25 10:53:13 +08:00 2574 次点击
    这是一个创建于 875 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近公司要求要尽可能的较小 apk 的体积;市场提供的简单方式都做了;但是有一个产物动态下发的 要修改 flutter sdk 源码;里面是 java 语言,没怎么接触过 java ,有大佬做过吗?提供一个 flutter3.x 的修改案例,或者 github 也行 []

    19 条回复    2023-07-26 14:18:29 +08:00
    programbao
        1
    programbao  
    OP
       2023-07-25 10:56:11 +08:00
    主要发现 libapp.solibflutter.so 占用空间比较大,还有一个百度的 sdk:libBaiduMapSDK_map_v7_5_8.so ;想上传到 oss 里面,动态下载到指定包文件;现在毫无头绪 [哭]
    NewTab12138
        2
    NewTab12138  
       2023-07-25 11:21:35 +08:00
    动态下发和 flutter 没有关系,只能通过原生的热更新框架操作,安卓原生的有微信的 tinker ,阿里的 Sophix
    programbao
        3
    programbao  
    OP
       2023-07-25 13:20:50 +08:00
    @NewTab12138 这样的吗;但是我一开始要抽离 flutter android 的一些 so 产物,安装的时候再从远程服务器拉去下来;热更新也可以做到是吗?没用过 sophix ,我去了解下
    liaopen123
        4
    liaopen123  
       2023-07-25 13:24:54 +08:00
    https://juejin.cn/post/7238627611265613882?searchId=202307251323553A64ACB1F891F84AC542 这个你看看 相当于在打包的时候 把 so 剥离出来 需要的时候 再从远端下载 货拉拉 有一个类似的方案
    iOCZ
        5
    iOCZ  
       2023-07-25 13:30:19 +08:00
    flutter 对 so 无能为力
    limiter
        6
    limiter  
       2023-07-25 13:49:54 +08:00
    没接触过 Java ?不会原生开发?那你还是趁早放弃,这不是你能搞定的事
    programbao
        7
    programbao  
    OP
       2023-07-25 13:55:06 +08:00
    @liaopen123 好的,感谢,我去看看
    programbao
        8
    programbao  
    OP
       2023-07-25 13:56:04 +08:00
    @limiter 我也没法,这是公司选项要求的,所以求助大伙们 [哭笑]
    owen800q
        9
    owen800q  
       2023-07-25 14:05:55 +08:00 via iPhone
    Flutter 引擎太低了,你公司不是大, C++大神放吧,引擎代不是普通公司可以的
    owen800q
        10
    owen800q  
       2023-07-25 14:07:26 +08:00 via iPhone
    你这种需求建议用 webview 套 h5 重写,不应该用 flutter
    Bown
        11
    Bown  
       2023-07-25 15:13:24 +08:00   2
    Flutter 1.17.x 时有做过,需要修改并自行编译 flutter/engine ,翻了下当时的笔记给个思路:
    (假如编译产物动态下发后的路径分别为 /path/to/libflutter.so, /path/to/libapp.so, /path/to/flutter_assets/)

    1. 修改 platform_view_android_jni.cc:RunBundleAndSnapshotFromLibrary ,把 jAssetManager 参数换成 jstring 用于传入资源文件路径,然后函数实现中 jAssetManager + APKAssetProvider 构造 asset_manager 换成 jstring + DirectoryAssetBundle 构造 asset_manager 。
    2. 修改 FlutterJNI.java:C++ 层 RunBundleAndSnapshotFromLibrary 映射过来的 JNI 函数 nativeRunBundleAndSnapshotFromLibrary 对应把 assetManager 参数改成 String ,并在这个函数调用处传入 /path/to/flutter_assets/。
    3. 修改 FlutterLoader.java:startInitialization 中 System.loadLibrary("flutter") 改为 System.load(“/path/to/libflutter.so”),ensureInitializationComplete 中引擎启动 shellArgs 传入的 DEFAULT_LIBRARY 和 aotSharedLibraryName 分别改成 /path/to/libflutter.so 和 /path/to/libapp.so

    修改完 1 后编译引擎得到有资源动态加载能力的 libflutter.so ,修改完 2 和 3 后编译 io/flutter/embedding 得到 aar 后引入项目跟随 apk 打包发版。使用时确保产物已动态下发,在 Flutter 引擎初始化时 3 的变更用来动态加载修改版引擎 libflutter.so 和业务逻辑 libapp.so ,1 + 2 的变更用来动态加载 flutter_assets 。

    简单看了下最新 Flutter 3.x 源码中这三个入口变化不是特别大,OP 可照这个思路尝试。
    zoharSoul
        12
    zoharSoul  
       2023-07-25 15:21:45 +08:00
    别担心, flutter sdk 语言不是 java, 我记得好像是 cpp
    programbao
        13
    programbao  
    OP
       2023-07-25 15:27:39 +08:00
    @Bown 好的,我去看看,感谢大佬
    programbao
        14
    programbao  
    OP
       2023-07-26 06:28:35 +08:00
    难搞喔
    dabbit
        15
    dabbit  
       2023-07-26 08:52:37 +08:00
    @Bown 想问一下要怎么下载.so ?是打开 app 的时候下载,下载完了再加载 flutter 吗?
    mybro
        16
    mybro  
       2023-07-26 09:35:03 +08:00
    fair
    kingzeus
        17
    kingzeus  
       2023-07-26 09:36:42 +08:00
    定制下 engine/loader 类,修改下 so 的路径就好了,注意必须是 release 模式。
    只要确保在调用之前,so 存在就好了
    Bown
        18
    Bown  
       2023-07-26 10:41:39 +08:00
    @dabbit 如果项目是纯 Flutter App ,得改造成 plugin 然后用 Add-to-app 的方式接入,这样可以控制 Flutter 引擎的初始化。App 启动时加个 Native 页面占位并在 Native 中做处理下载,下载完成后再加载本地 so 启动引擎、渲染 Flutter 业务首页。
    dabbit
        19
    dabbit  
       2023-07-26 14:18:29 +08:00
    @Bown 没想到还有改造成 plugin 这一招,感谢思路
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     949 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 19:30 PVG 03:30 LAX 11:30 JFK 14:30
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86