go 编译 andriod .so 文件体积太大怎么解决呢 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
aladdinding
V2EX    Android

go 编译 andriod .so 文件体积太大怎么解决呢

  •  
  •   aladdinding 291 天前 5439 次点击
    这是一个创建于 291 天前的主题,其中的信息可能已经有所发展或是发生改变。

    加了 -ldflags="-s -w" 这样的参数

    func Hello() { fmt.Println("hello world") } 

    一个 hello world 出来都要 2MB 多,更别说要写些业务代码了

    /div>
    32 条回复    2025-02-10 10:08:55 +08:00
    warlock
        1
    warlock  
       291 天前
    你引入了 fmt 包
    bagel
        2
    bagel  
       291 天前
    一是用了 fmt ,static link 进去了一大堆东西,二是 go 有 runtime 。2MB 都嫌大那只能试试 Rust 或者 C
    yplam
        3
    yplam  
       291 天前 via Android
    运行时的最低开销,后续业务代码不会增加得那么恐怖,简单 APP 打包出来估计二十 MB 吧
    aladdinding
        4
    aladdinding  
    OP
       291 天前
    目前打包出来是 6MB 多
    sardina
        5
    sardina  
       291 天前
    正常 我用 go 编译的 so 用 zip 压缩了还有 14m
    iyear
        6
    iyear  
       291 天前   2
    这里 2MB 主要体积都在 runtime 上了,其实你再往上添很多代码也不会加太多体积的。可以用 https://github.com/Zxilly/go-size-analyzer 分析下体积
    iyear
        7
    iyear  
       291 天前
    而且安卓现在的包个顶个的大,这个感觉都不算啥占用了……
    img src="https://cdn.v2ex.com/gravatar/4676b54daa0f44b885474248e64b6972?s=48&d=retro" class="avatar" border="0" align="default" alt="gam2046" data-uid="148771" />
        8
    gam2046  
       291 天前   1
    对于空间如此敏感的话,只有用 C/C++了,可以引用系统动态库。体积骤减。
    lveye
        9
    lveye  
       291 天前   1
    有个可执行文件压缩工具 upx ,可以试试
    lysShub
        10
    lysShub  
       291 天前
    2MB 还大啊?现在没见过哪个 app 低于 50MB 的
    jeesk
        11
    jeesk  
       291 天前 via Android
    @lysShub 兼容 x86 ,32 位,armv7 就成 8m 了。 体积还是用纯 cpp 或者 c 好点来控制吧
    zoharSoul
        12
    zoharSoul  
       291 天前
    @warlock #1
    @bagel #2
    有什么办法解决这个 fmt 的问题吗? 求问大佬
    w568w
        13
    w568w  
       291 天前   1
    我再补充一点:不像其他编译语言,go 设计的时候就没有关注二进制体积,也没有考虑性能优化,甚至都没有给用户任何能微调这些偏好的编译选项。它唯一保证的就是静态链接或者说 standalone executable 。比如就算某次更新后编译体积暴涨,go team 也不会觉得这是 bug 。

    如果体积和性能是你的主要焦点,还是换其他语言比较好。
    lysShub
        14
    lysShub  
       291 天前
    非要打包在一起、8m 也不多,没人关心几十 m 的大小;不要纠结于这种问题
    lisongeee
      &bsp; 15
    lisongeee  
       291 天前
    如果应用需要接入两个不同 go 项目程序编译的 so 文件,是不是会存在两个额外的 go runtime ?
    R4rvZ6agNVWr56V0
        16
    R4rvZ6agNVWr56V0  
       291 天前
    我欣然接受 100M 以内的包,因为我是千兆网 LOL
    hanxiV2EX
        17
    hanxiV2EX  
       291 天前 via Android
    用 lua runtime ,很小
    GuangXiN
        18
    GuangXiN  
       291 天前 via Android
    习惯了 Go 编译出来十几 MB 的文件,那天 deno compile 了一下直接 150MB 起跳。
    bruce0
        19
    bruce0  
       291 天前
    go 编译的二进制文件就是大, 我们现在编译的二进制, 不加 -s -w 是 100M, 加了 70M 左右
    TrigVon
        20
    TrigVon  
       291 天前
    再用 upx 压缩下
    xssshell
        21
    xssshell  
       290 天前
    用 strip 去除一下符号信息和调试信息
    sir283
        22
    sir283  
       290 天前 via Android
    用安卓的原生 Java 开发啊,一个 apk 就几 KB ,加上 jni 的 arm64 only ,体积也不会太大的。
    murmurkerman
        23
    murmurkerman  
       290 天前 via iPhone
    不用焦虑安装包大小,该要的代码得加上。毕竟是个草台班子。
    aladdinding
        24
    aladdinding  
    OP
       290 天前
    @iyear 看了下 runtime 大概 1mb ,然后用了 net 包 ,占 1mb ,crypto 占了 1mb
    flyqie
        25
    flyqie  
       290 天前
    有点好奇,为什么要用 go 做 android 。。

    是某些组件不方便移植吗?

    感觉貌似 go 在 android 这块用的似乎不是很多?
    debuggeeker
        26
    debuggeeker  
       290 天前
    直接用默认的 as 工具开发不好吗,就是 c++那套( ndk )
    mogging
        27
    mogging  
       290 天前
    @bagel 确实 go 有 runtime 这反而是他的精华,大部分场景可以不依赖 libc ,这点磁盘空间不算事
    aladdinding
        28
    aladdinding  
    OP
       290 天前
    @flyqie 有些网络方面的包 go 写方便一些
    debugman66
        29
    debugman66  
       290 天前
    换个编译器:tinygo
    nicevar
        30
    nicevar  
       289 天前
    用 go 来写 so 库不是什么好的选择,c/c++就是最优方案,你要说网络方面的,java 一点不比 go 差
    jim9606
        31
    jim9606  
       289 天前
    这些带重型 runtime 的语言你比较 hello world 肯定吃亏。
    想轻量要么用系统带的 runtime ,例如 java ,或者直接写 C ,或者用系统 webview 跑,反正安装后下载的都不算进体积里。
    snowlyg
        32
    snowlyg  
       288 天前
    大很正常,go 本来就不是用来写 android 的。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4197 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 01:00 PVG 09:00 LAX 17:00 JFK 20:00
    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