V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
aladdinding
V2EX  ›  Android

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

  •  
  •   aladdinding · 1 天前 · 2191 次点击

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

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

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

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

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

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

    感觉貌似 go 在 android 这块用的似乎不是很多?
    debuggeeker
        26
    debuggeeker  
       17 小时 16 分钟前
    直接用默认的 as 工具开发不好吗,就是 c++那套( ndk )
    mogging
        27
    mogging  
       15 小时 20 分钟前
    @bagel 确实 go 有 runtime 这反而是他的精华,大部分场景可以不依赖 libc ,这点磁盘空间不算事
    aladdinding
        28
    aladdinding  
    OP
       14 小时 45 分钟前
    @flyqie 有些网络方面的包 go 写方便一些
    debugman66
        29
    debugman66  
       2 小时 48 分钟前
    换个编译器:tinygo
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2250 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 01:16 · PVG 09:16 · LAX 17:16 · JFK 20:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.