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

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

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

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

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

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

    28 条回复    2025-02-08 18:31:19 +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  
       23 小时 36 分钟前
    如果应用需要接入两个不同 go 项目程序编译的 so 文件,是不是会存在两个额外的 go runtime ?
    GeekGao
        16
    GeekGao  
       21 小时 54 分钟前
    我欣然接受 100M 以内的包,因为我是千兆网 LOL
    hanxiV2EX
        17
    hanxiV2EX  
       15 小时 40 分钟前 via Android
    用 lua runtime ,很小
    GuangXiN
        18
    GuangXiN  
       15 小时 28 分钟前 via Android
    习惯了 Go 编译出来十几 MB 的文件,那天 deno compile 了一下直接 150MB 起跳。
    bruce0
        19
    bruce0  
       14 小时 48 分钟前
    go 编译的二进制文件就是大, 我们现在编译的二进制, 不加 -s -w 是 100M, 加了 70M 左右
    TrigVon
        20
    TrigVon  
       14 小时 48 分钟前
    再用 upx 压缩下
    xssshell
        21
    xssshell  
       14 小时 32 分钟前
    用 strip 去除一下符号信息和调试信息
    sir283
        22
    sir283  
       14 小时 20 分钟前 via Android
    用安卓的原生 Java 开发啊,一个 apk 就几 KB ,加上 jni 的 arm64 only ,体积也不会太大的。
    murmurkerman
        23
    murmurkerman  
       13 小时 29 分钟前 via iPhone
    不用焦虑安装包大小,该要的代码得加上。毕竟是个草台班子。
    aladdinding
        24
    aladdinding  
    OP
       10 小时 8 分钟前
    @iyear 看了下 runtime 大概 1mb ,然后用了 net 包 ,占 1mb ,crypto 占了 1mb
    flyqie
        25
    flyqie  
       7 小时 45 分钟前
    有点好奇,为什么要用 go 做 android 。。

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

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