V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
aladdinding
V2EX  ›  Android

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

  •  
  •   aladdinding · Feb 7, 2025 · 6616 views
    This topic created in 453 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   ·   1008 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 84ms · UTC 18:58 · PVG 02:58 · LAX 11:58 · JFK 14:58
    ♥ Do have faith in what you're doing.