go 编译 andriod .so 文件体积太大怎么解决呢 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
aladdinding

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

  •  
  •   aladdinding Feb 7, 2025 6582 views
    This topic created in 446 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

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