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

6 天前
 aladdinding

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

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

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

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

如果体积和性能是你的主要焦点,还是换其他语言比较好。
lysShub
5 天前
非要打包在一起、8m 也不多,没人关心几十 m 的大小;不要纠结于这种问题
lisongeee
5 天前
如果应用需要接入两个不同 go 项目程序编译的 so 文件,是不是会存在两个额外的 go runtime ?
GeekGao
5 天前
我欣然接受 100M 以内的包,因为我是千兆网 LOL
hanxiV2EX
5 天前
用 lua runtime ,很小
GuangXiN
5 天前
习惯了 Go 编译出来十几 MB 的文件,那天 deno compile 了一下直接 150MB 起跳。
bruce0
5 天前
go 编译的二进制文件就是大, 我们现在编译的二进制, 不加 -s -w 是 100M, 加了 70M 左右
TrigVon
5 天前
再用 upx 压缩下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/1109584

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX