
加了 -ldflags="-s -w" 这样的参数
func Hello() { fmt.Println("hello world") } 一个 hello world 出来都要 2MB 多,更别说要写些业务代码了
/div> 1 warlock 291 天前 你引入了 fmt 包 |
2 bagel 291 天前 一是用了 fmt ,static link 进去了一大堆东西,二是 go 有 runtime 。2MB 都嫌大那只能试试 Rust 或者 C |
3 yplam 291 天前 via Android 运行时的最低开销,后续业务代码不会增加得那么恐怖,简单 APP 打包出来估计二十 MB 吧 |
4 aladdinding OP 目前打包出来是 6MB 多 |
5 sardina 291 天前 正常 我用 go 编译的 so 用 zip 压缩了还有 14m |
6 iyear 291 天前 这里 2MB 主要体积都在 runtime 上了,其实你再往上添很多代码也不会加太多体积的。可以用 https://github.com/Zxilly/go-size-analyzer 分析下体积 |
7 iyear 291 天前 而且安卓现在的包个顶个的大,这个感觉都不算啥占用了…… |
| img src="https://cdn.v2ex.com/gravatar/4676b54daa0f44b885474248e64b6972?s=48&d=retro" class="avatar" border="0" align="default" alt="gam2046" data-uid="148771" /> | 8 gam2046 291 天前 对于空间如此敏感的话,只有用 C/C++了,可以引用系统动态库。体积骤减。 |
9 lveye 291 天前 有个可执行文件压缩工具 upx ,可以试试 |
10 lysShub 291 天前 2MB 还大啊?现在没见过哪个 app 低于 50MB 的 |
13 w568w 291 天前 我再补充一点:不像其他编译语言,go 设计的时候就没有关注二进制体积,也没有考虑性能优化,甚至都没有给用户任何能微调这些偏好的编译选项。它唯一保证的就是静态链接或者说 standalone executable 。比如就算某次更新后编译体积暴涨,go team 也不会觉得这是 bug 。 如果体积和性能是你的主要焦点,还是换其他语言比较好。 |
14 lysShub 291 天前 非要打包在一起、8m 也不多,没人关心几十 m 的大小;不要纠结于这种问题 |
&bsp; 15 lisongeee 291 天前 如果应用需要接入两个不同 go 项目程序编译的 so 文件,是不是会存在两个额外的 go runtime ? |
16 R4rvZ6agNVWr56V0 291 天前 我欣然接受 100M 以内的包,因为我是千兆网 LOL |
17 hanxiV2EX 291 天前 via Android 用 lua runtime ,很小 |
18 GuangXiN 291 天前 via Android 习惯了 Go 编译出来十几 MB 的文件,那天 deno compile 了一下直接 150MB 起跳。 |
19 bruce0 291 天前 go 编译的二进制文件就是大, 我们现在编译的二进制, 不加 -s -w 是 100M, 加了 70M 左右 |
20 TrigVon 291 天前 再用 upx 压缩下 |
21 xssshell 290 天前 用 strip 去除一下符号信息和调试信息 |
22 sir283 290 天前 via Android 用安卓的原生 Java 开发啊,一个 apk 就几 KB ,加上 jni 的 arm64 only ,体积也不会太大的。 |
23 murmurkerman 290 天前 via iPhone 不用焦虑安装包大小,该要的代码得加上。毕竟是个草台班子。 |
24 aladdinding OP @iyear 看了下 runtime 大概 1mb ,然后用了 net 包 ,占 1mb ,crypto 占了 1mb |
25 flyqie 290 天前 有点好奇,为什么要用 go 做 android 。。 是某些组件不方便移植吗? 感觉貌似 go 在 android 这块用的似乎不是很多? |
26 debuggeeker 290 天前 直接用默认的 as 工具开发不好吗,就是 c++那套( ndk ) |
28 aladdinding OP @flyqie 有些网络方面的包 go 写方便一些 |
29 debugman66 290 天前 换个编译器:tinygo |
30 nicevar 289 天前 用 go 来写 so 库不是什么好的选择,c/c++就是最优方案,你要说网络方面的,java 一点不比 go 差 |
31 jim9606 289 天前 这些带重型 runtime 的语言你比较 hello world 肯定吃亏。 想轻量要么用系统带的 runtime ,例如 java ,或者直接写 C ,或者用系统 webview 跑,反正安装后下载的都不算进体积里。 |
32 snowlyg 288 天前 大很正常,go 本来就不是用来写 android 的。 |