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

android 开发只能用 gradle 吗?

  •  
  •   CrazyBoyFeng · 2021-02-27 03:13:33 +08:00 · 8521 次点击
    这是一个创建于 1125 天前的主题,其中的信息可能已经有所发展或是发生改变。

    个人总结 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,不知道现在还能不能用?

    34 条回复    2021-03-03 20:41:36 +08:00
    fatelight
        1
    fatelight  
       2021-02-27 04:12:42 +08:00   ❤️ 1
    gradle 慢是你的网络问题==
    CrazyBoyFeng
        2
    CrazyBoyFeng  
    OP
       2021-02-27 04:44:01 +08:00
    @fatelight 第 3 条,同一个项目用 maven 和 gradle 对比得出的结论。没个参照对象怎么敢说慢呢?

    另外,“网络不行”、“配置不行”这类吐槽其实挺无用的。我是觉得它不好用,又不是用不了必须换网加配置。说着轻巧,难道不要成本吗,而且能带来增益多少可难说。
    lionseun
        3
    lionseun  
       2021-02-27 10:29:04 +08:00 via Android
    maven 扩展性不如 gradle,ps:关闭 gradle Damon 不是正常操作吗
    winterbells
        4
    winterbells  
       2021-02-27 11:01:38 +08:00   ❤️ 1
    lz 是来找认同的,不是要你们解释反驳
    CrazyBoyFeng
        5
    CrazyBoyFeng  
    OP
       2021-02-27 11:06:49 +08:00 via Android
    @winterbells 我是来找替代解决方案的。我不需要寻求认同。
    HongJay
        6
    HongJay  
       2021-02-27 11:42:52 +08:00
    网络不行就是不行啊。。。只能说明你不懂啥叫谷歌
    pursuer
        7
    pursuer  
       2021-02-27 11:55:09 +08:00
    github 上可以找到 android-maven-plugin,不过我没用过。
    hantsy
        8
    hantsy  
       2021-02-27 12:05:50 +08:00   ❤️ 4
    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
        9
    CrazyBoyFeng  
    OP
       2021-02-27 12:39:32 +08:00 via Android
    @pursuer @hantsy 感谢分享,我也搜到了这个 plugin,不过它似乎是弃坑状态,三年未更新。我现在正尝试在 idea 上运行它。
    darktiny
        10
    darktiny  
       2021-02-27 12:40:08 +08:00   ❤️ 1
    愿意折腾,就 Buck 吧
    Team
        12
    Team  
       2021-02-27 13:09:12 +08:00   ❤️ 2
    在这个网站上讨论一些比较严肃的问题,要注意经常屏蔽

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

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

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

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

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

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

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

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

    我刚做开发的时候,天天想着给哪些低端机做适配,想方设法去改善性能。然而几年之后低端机一样还是没有人用了。
    a719031256
        21
    a719031256  
       2021-02-27 19:20:43 +08:00
    @fatelight 国内 gradle 下载都慢,我试过公司的专线网络也慢,家里的百兆光纤也慢,以前尝试过自己弄个安卓 app 来弄,结果卡在 gradle 上了,还有一个就是 gradle 的版本问题,好像小版本不同的 gradle 兼容性也有问题,我网上下的 app 源码原本想改改来用,结果就比源码版本高两个小版本号就报错,感觉 gradle 就是谷歌强推出来的,并不好用但强制你用
    janus77
        22
    janus77  
       2021-02-27 19:36:33 +08:00
    1 日常开发不需要做兼容,你项目制定版本号就行了
    2 同上,如果你的版本号不变动,自然在清理的时候也就不费力
    3 网络问题,maven 一样很多人换 aliyun 镜像
    4 新系统这方面确实欠缺,主要靠经验累积和自己搜索解决。开发久了就好了
    5 java 写久了不灵活也是罪?脚本语言不灵活凭啥被用于脚本啊
    6 占用大这个也是新系统一直以来的缺陷,我没法回答
    fatelight
        23
    fatelight  
       2021-02-27 19:48:01 +08:00
    @a719031256 我都挂代理,走中转专线
    coolesting
        24
    coolesting  
       2021-02-27 22:29:03 +08:00 via Android
    除了吃内存之外,没感觉不太好的地方。
    否则也不会有 kill gradle 的插件出现。
    Jirajine
        25
    Jirajine  
       2021-02-27 22:30:26 +08:00 via Android
    不要用 gradlew,构建脚本用 kts,基本还可以。
    CrazyBoyFeng
        26
    CrazyBoyFeng  
    OP
       2021-02-27 23:01:18 +08:00
    我试了一下 bazel,目前感觉良好。idea 里的插件也好用。google 自己做的工具也不错啊,为什么不推广呢?
    我会尝试用久一点再分享我的体验。
    不过,需要用到第三方 gradle 插件的项目,目前还是只能使用(指定版本的) gradle 。
    systemcall
        27
    systemcall  
       2021-02-28 00:28:01 +08:00 via Android
    感觉 gradle 确实很垃圾,可以和 keil 礦 ision 并列的那种
    一个浪费硬盘而且占的是家目录、需要强大的梯子、电脑配置要求高,一个浪费生命还时不时崩溃
    怀念以前拿 vb6.0 写程序的日子,那个时候就没这么多破事,用 vs 写安卓也没这么多破事,起码安装的时候会告诉你会吃掉多少磁盘空间、方便卸载掉
    HangoX
        28
    HangoX  
       2021-02-28 12:48:39 +08:00   ❤️ 1
    楼主说的 5 个问题对于熟悉 gradle 的人都不是问题。第 6 个是楼主自己勾选了编辑即构建,idea 可以关闭,我重来不开那个。deamon 不是这样的意思,deamon 是下次构建的时候可以重新使用虚拟机和内存达到更快的目的,不喜欢关闭即可
    楼主没有对比相同项目下 maven 和 gradle 的构建时间对比,gradle 是比 maven 快很多的,官方就有对比 https://gradle.org/gradle-vs-maven-performance/ ,毕竟那么多缓存摆在那里,想不快都难。磁盘占用问题,这个东西加磁盘就能加速的事情为什么不干
    hantsy
        29
    hantsy  
       2021-02-28 14:24:08 +08:00
    @newee 海外当然不会有问题。 在国内你用 Gradlew 编译一下,下一个 Dist 几 K 到十几 K,而且经常断。项目依赖可以借 Maven Mirror 。这东西还有它的插件系统连 Mirror 都没有,必须从官方下载。

    国内的 5G,如果在开发过程的检验也就是 2G 速度而已。
    chenjiajia9411
        30
    chenjiajia9411  
       2021-03-01 14:26:58 +08:00
    不用 Gradle 完全可以啊,自己下好配好依赖之后用 build-tools 自己编译就行了。
    Anonywp
        31
    Anonywp  
       2021-03-01 15:38:38 +08:00
    yike47
        32
    yike47  
       2021-03-01 20:38:17 +08:00
    俺就没有感同身受了。公司配置 32G 运存+固态。自己的是 Mac 高配。 从来都是一把梭,秒开..........
    imzcg2
        33
    imzcg2  
       2021-03-03 11:47:48 +08:00
    as 绑定 gradle,换个好电脑和代理就好了把
    systemcall
        34
    systemcall  
       2021-03-03 20:41:36 +08:00
    你可以换成 Harmony Studio,之后等待自主研发的分布式 5G 可形式化验证的国产软件取代 gradle
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4713 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 10:01 · PVG 18:01 · LAX 03:01 · JFK 06:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.