aladdinding
V2EX  ›  Android

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

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

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

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

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