android 开发只能用 gradle 吗?

2021-02-27 03:13:33 +08:00
 CrazyBoyFeng

个人总结 gradle 缺点:

  1. api 未稳定,不同版本不兼容。
  2. 下载软件包用 hash 作目录,难以分辨,难以清理。不同版本的 gradle 竟然各自重复维护相同版本的软件包。
  3. 同样是从那三个仓库下软件包,为什么 gradle 就比 maven 慢这么多(来自 java 后端项目开发时的体验对比)?
  4. 出错提示太简陋,无法定位错误原因。
  5. 脚本编写没有约束,也就是太灵活,不利于协作。
  6. 耗内存,甚至超过 idea 占用的内存。这个是 gradle 特性决定的。为了节省构建时间,gradle 会在敲代码期间一直在后台对待构建内容进行缓存。所以能在构建时快于 maven (但我的实际体验感觉也没快多少)。maven 平时是不运行的。而且我不知道为啥 gradle 要另起个进程,而不是像 maven 那样内置在 idea 里通过 api 调用。难道是因为 gradle 是 groovy 写的所以没法内置到 idea 里?要知道两个 jvm 进程可不同于两个 native 进程,相当于跑在两个虚拟机里,需要两倍的虚拟层和运行时的资源开销。而如果把守护进程关掉,那么在构建时,gradle 会巨慢无比。

旧版只能用 groovy 写脚本也算个缺点,这个语言太灵活。本身 gradle 对脚本编写没有约束就很灵活了,这样一来一个构建脚本在项目复杂之后都很有可能变得难以阅读。

很久以前 idea 还能用 maven,不知道现在还能不能用?

9163 次点击
所在节点    Android
34 条回复
fatelight
2021-02-27 04:12:42 +08:00
gradle 慢是你的网络问题==
CrazyBoyFeng
2021-02-27 04:44:01 +08:00
@fatelight 第 3 条,同一个项目用 maven 和 gradle 对比得出的结论。没个参照对象怎么敢说慢呢?

另外,“网络不行”、“配置不行”这类吐槽其实挺无用的。我是觉得它不好用,又不是用不了必须换网加配置。说着轻巧,难道不要成本吗,而且能带来增益多少可难说。
lionseun
2021-02-27 10:29:04 +08:00
maven 扩展性不如 gradle,ps:关闭 gradle Damon 不是正常操作吗
winterbells
2021-02-27 11:01:38 +08:00
lz 是来找认同的,不是要你们解释反驳
CrazyBoyFeng
2021-02-27 11:06:49 +08:00
@winterbells 我是来找替代解决方案的。我不需要寻求认同。
HongJay
2021-02-27 11:42:52 +08:00
网络不行就是不行啊。。。只能说明你不懂啥叫谷歌
pursuer
2021-02-27 11:55:09 +08:00
github 上可以找到 android-maven-plugin,不过我没用过。
hantsy
2021-02-27 12:05:50 +08:00
Maven 也有第三方维护的 Plugin (不止一个)。

https://www.vogella.com/tutorials/AndroidBuildMaven/article.html

Google 可以比较喜欢自定义的,相对比较灵活,之前很多项目如 Gwt 等用的是 Ant,现在主要 Gradle 。

国内的 Gradle 体验比 Maven 真的差太多,特别 Gradle 配置的兼容性坑爹(一年一次的大版本升级,对前面版本没法兼容,而 Maven 3 现在还可以运行十几前的 Maven 2 程序),Puglin 的名称时常改动,很多一两年内的 Plugin,在新 Gradle 版本要么找不到,要么不能运行。

Gradle Wrapper 下载 Dist 和 Gradle 的 Plugin 不支持 Maven Repo 那样 Mirror 配置, 不能从 Maven Repo 更新这是最扯蛋,国内速度慢得要命。Gradle 特别依赖的 Jcenter 国内我这里是不能访问的,本身也是龟速,而且 Jcenter 马上要关闭了,到时又是一堆 Gradle 项目 Breaking 。

即使从 Maven Repos (不管远程还是本地)下载了依赖,Gradle 自己又建立一套本地依赖库,而且 Folder 名全部用 Sha 命名。

如果用 Gradlew 来 Build 项目,它会尝试下载一个 Dist 到个人目录下(如果不存在),几个版本下来,这样硬盘很多就被掉几十 G 。

Gradle 运行过程中,Gradle Damon 一直跑后台,太吃内存了。另外在个人目录,Gradle 为配合 Damon,生成堆积如山的 Cache 文件。

我很少用 Gradle,个人目录下 Gradle 乱七八糟的文件多达 40G 。这比 5 年来下载的 Maven Deps 还多一倍。如果我是日常用 Gradle,5 年下来估计 500G 硬盘都是不够用的。
CrazyBoyFeng
2021-02-27 12:39:32 +08:00
@pursuer @hantsy 感谢分享,我也搜到了这个 plugin,不过它似乎是弃坑状态,三年未更新。我现在正尝试在 idea 上运行它。
darktiny
2021-02-27 12:40:08 +08:00
愿意折腾,就 Buck 吧
hantsy
2021-02-27 12:43:32 +08:00
Team
2021-02-27 13:09:12 +08:00
在这个网站上讨论一些比较严肃的问题,要注意经常屏蔽

有很大一部分人的回答,每次就几个字儿最多不超过一句话

而且讨论的问题往往也不是什么严肃的问题

所以他们的回答出现在这里基本上就是没用的,甚至还有害
fatelight
2021-02-27 15:49:37 +08:00
@CrazyBoyFeng 我试过,完全清理本地缓存的话,maven 和 gradle 速度下载速度没啥差距。gradle 比 maven 墙的厉害,你不代理可能下载都能出错。所以我说慢,可能是你网络问题。自己抓包看看下载包的速度就知道了。或者项目配置 gradle 镜像源或者贵司自己有专门同步的库
fatelight
2021-02-27 15:50:20 +08:00
@Team 对有害,请 block 我,你的非常有用
zhanlanhuizhang
2021-02-27 15:56:52 +08:00
可以使用 maven
参考项目: https://github.com/zxing/zxing
还可以使用:bazel 。
CrazyBoyFeng
2021-02-27 16:09:30 +08:00
@darktiny 感谢分享。简单了解了一下 buck,挺好的东西,已经出现好几年了,我竟不知道。
我试用了一下 buck,是比 gradle 要快,内存消耗也不多,不会卡住 idea 。不过我只是测试一下首次全量构建,没有连续使用,不知道增量的效果怎么样。害怕 daemon 随着 repo 长大会不会像 gradle 那样反客为主。不过全量构建这么快,如果不是巨大的应用,感觉平常应该不开 daemon 也可以。
脚本格式是 python 语法,不过 buck 本身是 java 写的,运行在 jvm 上。python 语法简单易读,懂的人也多。
CrazyBoyFeng
2021-02-27 16:43:23 +08:00
@zhanlanhuizhang 感谢分享。阅读 pom.xml 得知,zxing 正是使用了楼上所说的 android-maven-plugin 。不过 zxing 也是三年没更新了,我都怀疑它是 eclipse 写的遗留代码,那个目录结构也像 eclipse 。eclipse 上现在没有官方 android 支持了,kotlin 支持也不好。用第三方插件怕踩坑。
bazel 感觉跟 buck 很像。而且 idea 插件还在更新。buck 的 idea 插件两年没动了。
elonmask
2021-02-27 17:20:35 +08:00
放弃安卓吧,搞 AI 去
GM
2021-02-27 17:25:11 +08:00
身处墙外,装了 10000000Mbps 宽带,用着 128G 内存+9900K+10T SSD 的开发机的某些人说:
我这没问题,你网络不好不要怪 gradle 不行!你机器烂不要怪 gradle 卡!你投资生产工具的钱都不愿意花,还做什么码农?

说完一转身,云淡风轻,不带走一丝云彩,深藏功与名。

留下台下那群拿着平均线工资、用着雇主给的垃圾开发机的码畜们一脸懵逼。
newee
2021-02-27 19:16:23 +08:00
实际上只是因为网络的问题,使用的时候会出现半天下不动的情况。在海外其实不会有这种情况,几十 M,1 分钟不要就下载完了。

所以在这种网络下能正常使用,也是开发的基本操作。

另外 gradle 还是有一定优势的,只是当前的应用场景没用到这些优势,体会不到。才会简单的把这个当成一个导包工具。其实还是有一些优点的,要是没啥优点,还不早就被淘汰了。

当然很多东西,有一些优劣,比如说火狐浏览器比 chrome 更占内存,android studio 比 vs code 更占内存。但是挡不住大势,大势是什么。现在可能用着 4 核 4 线程的电脑,16G 内存。但是总有一天要升级 10 核,64G 内存,是不是?

我刚做开发的时候,天天想着给哪些低端机做适配,想方设法去改善性能。然而几年之后低端机一样还是没有人用了。

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

https://www.v2ex.com/t/756661

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

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

© 2021 V2EX