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

唉,来吐槽一下 gradle。。

  •  
  •   James369 · 2020-12-15 16:08:34 +08:00 · 15361 次点击
    这是一个创建于 1441 天前的主题,其中的信息可能已经有所发展或是发生改变。
    每次开一个新工程,都在下载安装(因为依赖 gradle 的版本不同),占用磁盘空间不说,还浪费时间。
    什么版本都要下,从 2.x 到 6.x,占用了 2G 多的空间。

    搞不懂这么频繁使用的构建工具,难道不具备向下兼容吗。。
    隔壁 xcode 用起来真是舒服多了。。
    65 条回复    2020-12-27 00:39:08 +08:00
    FreeEx
        1
    FreeEx  
       2020-12-15 16:13:03 +08:00   ❤️ 2
    已经切回 maven 了,gradle 的有点不足以让我来跳这个坑。
    FreeEx
        2
    FreeEx  
       2020-12-15 16:13:24 +08:00
    错别字:优点。
    chendy
        3
    chendy  
       2020-12-15 16:14:12 +08:00   ❤️ 1
    2G 放在 gradle 这边真的不多…
    HongJay
        4
    HongJay  
       2020-12-15 16:15:36 +08:00
    才 2g ?那你要谢谢谷歌了
    GM
        5
    GM  
       2020-12-15 16:16:38 +08:00   ❤️ 1
    xcode 真的舒服吗。。。。。。。。
    halou12
        6
    halou12  
       2020-12-15 16:16:49 +08:00
    byte10
        7
    byte10  
       2020-12-15 16:21:16 +08:00
    安卓的 是比较坑。。没有一个安卓项目能安心的 启动的
    darling19961030
        8
    darling19961030  
       2020-12-15 16:22:39 +08:00   ❤️ 1
    算特性吧,为了保持一致
    Melodyer
        9
    Melodyer  
       2020-12-15 16:24:21 +08:00   ❤️ 2
    所以我每次 clone 一个 Android 项目下来时,都是先手动修改 gradle 版本,然后再用 Android Studio 打开,要不然得等他下载旧版本的 gradle 很久,浪费时间也浪费磁盘空间。
    Kasumi20
        10
    Kasumi20  
       2020-12-15 16:29:50 +08:00
    哈哈哈,是这样的
    Vegetable
        11
    Vegetable  
       2020-12-15 16:30:16 +08:00   ❤️ 2
    打开陌生安卓项目之前,我都是双手合十状态。
    manami
        12
    manami  
       2020-12-15 16:30:57 +08:00
    说实话 web 开发用不惯 gradle,还是喜欢 maven,但是看 android 开发他们好像用的很香
    cheng6563
        13
    cheng6563  
       2020-12-15 16:31:32 +08:00 via Android
    不如说是版本更新太快了
    murmur
        14
    murmur  
       2020-12-15 16:37:15 +08:00
    xcode 是省心,新版本 xcode 直接不让用旧版操作系统打开,安卓 studio 也没说新手机不让用旧版 ide 调试吧

    啥兼容性不做是省心
    murmur
        15
    murmur  
       2020-12-15 16:44:11 +08:00   ❤️ 3
    顺便 xcode 多大来着,android studio 多大,只看库不看本体还行

    要不是我折腾过 ios 项目,整过抠卡的依赖我还真信了 xcode 方便
    lwlizhe
        16
    lwlizhe  
       2020-12-15 16:57:48 +08:00
    没办法,你要想 android 各个系统版本占比是多少

    然后再对比下隔壁 ios 的系统占比

    碎片化这个问题谷歌也很头疼,但是还真没太好的办法,向下兼容不得不做,而且还要做不少
    gam2046
        17
    gam2046  
       2020-12-15 17:00:30 +08:00   ❤️ 1
    你可以选择不使用 gradle wrapper,就没这个苦恼了。

    不过我自己觉得这问题是不大的,wrapper 的目的是保证环境的一致性。况且几个 G 对于现在开发人员的电脑来说其实并不算什么。Android 可能对于 gradle 版本会敏感一些,如果是普通 Java 项目,其实 gradle 版本影响不大,主要是 Android build tools 的版本升级太快了
    Mithril
        18
    Mithril  
       2020-12-15 17:02:01 +08:00   ❤️ 2
    别问,问就是你网不行。
    bkmi
        19
    bkmi  
       2020-12-15 17:07:10 +08:00 via Android
    gradle 在国内有 cdn 了,但是依然还是慢,不知道为啥

    另外如果一个 gradle wrapper 版本正在运行,就算同版本它还是会重新下载
    yazinnnn
        20
    yazinnnn  
       2020-12-15 17:09:49 +08:00
    借楼一问

    gradle wrapper 里下载的文件,是根据啥保存的?根据 wrapper 文件夹的 hash 值?

    比如,在~/.gradle/wrapper/dists/gradle-6.7.1-all 下面,有两个文件夹
    2moa8rlfac5eqlcfgk98k0deb
    7iy34phwxf6lzs24y8cbh0cph

    一个是 gradle-wrapper.properties 默认下载地址
    另一个是 gradle-wrapper.properties 修改了 distributionUrl 的下载地址
    hantsy
        21
    hantsy  
       2020-12-15 17:12:42 +08:00
    不吐了,没意思。

    我不怎么用,下载的 Dist 就超过 10G 了。
    hantsy
        22
    hantsy  
       2020-12-15 17:16:13 +08:00
    @Melodyer 用 Wrapper 这种方式,很大程度就是因为它的版本兼容性太差,maven 2 到 3 多少年了,基本上没有什么兼容性问题,一样可以编译运行。

    Gradle 的配置语法,每个大版本都是有改动,如果隔两三大个版本,根本就不能运行。
    Mithril
        23
    Mithril  
       2020-12-15 17:18:02 +08:00
    @bkmi 那个 CDN 很莫名其妙。你拿浏览器下的很快,但是 Gradle Wrapper 就极其的慢。
    让人不禁觉得是不是给自己的 wrapper 做了负优化。
    lwlizhe
        24
    lwlizhe  
       2020-12-15 17:22:39 +08:00
    @lwlizhe 才发现楼主想问为啥没有向下兼容……其实 gradle 是有的,基本跨度不大没啥问题

    反正我是经常拉下来项目第一件事就是手动改 gradle-wrapper.properties 中的 distributionUrl,以及 build.gradle 中的各个配置版本,然后再同步、编译……

    这样改向下兼容好像没遇到过问题,向上有时候就不行,比如说现在有些最新的项目就要 android studio 4.0,gradle 6 以上,然而我这还在用 android studio3.5.2 gradle gradle-5.4.1-all
    stdout
        25
    stdout  
       2020-12-15 17:29:18 +08:00
    gradle 管理复杂工程还是很牛逼,缺点就是慢。有时候还要 FQ
    misaka19000
        26
    misaka19000  
       2020-12-15 17:31:39 +08:00
    maven 大法好
    acmore
        27
    acmore  
       2020-12-15 17:38:35 +08:00   ❤️ 2
    国内使用 Gradle 要做的第一件事就是在 build.gradle 里加上如下内容。这是一切教程的大前提,不然就会永远挣扎在痛苦的深渊中。

    tasks.withType(Wrapper) {
    enabled = false
    }
    hantsy
        28
    hantsy  
       2020-12-15 17:39:07 +08:00
    Gradle 用一个长期运行的进程,来实现增量更新,对象动态缓存,原则上性能应该有很大提升,实际体验没那么好,开一个 Gradle,背后消耗的内存比一个 IDE 还多。一般项目依赖我们可以从 Maven 中心下载,但 Gradle 内置的 Plugins 并没有发布 Maven repository,慢得坑爹啊。
    xloger
        29
    xloger  
       2020-12-15 17:40:59 +08:00
    看了眼我的 .gradle 文件夹,8.17G 了。
    我的血泪经验就是一个项目集成 okhttp 后,混淆开启后会 Crash,错误是 `lateinit property * has not been initialized`(我自然是能确保我那块正确初始化了)。当时各种排查查了两天,最后发现是 kotlin + gradle + 混淆的某些奇怪 bug,更新 gradle 版本从 6.1.1 到 6.5 解决了。
    如果我没下过新版的一直用旧版,可能下辈子都找不到真正原因...
    hantsy
        30
    hantsy  
       2020-12-15 17:41:56 +08:00
    下一个版本 Maven 4.0 (原计划的 3.7 取消) 也可能会带一个类似的 Wrapper,动态更新机制。
    longaiwp
        31
    longaiwp  
       2020-12-15 17:45:13 +08:00   ❤️ 1
    Gradle 明显好用,但是确实配置上太多坑了,尤其是各种版本。当然 AS 还有 Gradle 插件和 Gradle 版本两种东西,搞得人头都大了,它还不跟着插件版本下载,喜欢直接下最新,然后无法使用。
    CrazyBoyFeng
        32
    CrazyBoyFeng  
       2020-12-15 18:11:54 +08:00   ❤️ 1
    gradle 用的仓库都还是 maven 的,为啥不直接用 maven ?说 maven 繁琐不如说是 gradle 太善变,或者构建脚本里写了太多魔法代码,以至于跟别人协作项目都要先调教 gradle 。何况我自己的体验 gradle 的编译打包还比 maven 慢。
    写简单的项目用 gradle 并不经济,它会花大量的内存和时间来进行缓存和 diff 比较。甚至如楼上所说,gradle 资源开销能够一度比 ide 都高。这在大项目上的小改动也许会省时间,但是小项目这反而是一种累赘和冗余。
    而即便写大项目,往往因为配置过于复杂,同时配置又过于灵活,变得难以维护。轻易不敢修改构建脚本,说不定哪个混淆插件、哪个发布插件的代码配置稍微修改一下就会出现无法预知甚至无法排查的故障。
    maven 的死板以前都被人看作缺点,不过我个人觉得,对于大项目,这可能是个优点。不能随心所欲地写魔法代码,而必须用固定的框架,能减少很多问题。
    chihiro2014
        33
    chihiro2014  
       2020-12-15 18:20:16 +08:00
    没有规矩不成方圆
    CoderGeek
        34
    CoderGeek  
       2020-12-15 18:23:23 +08:00
    java 的用过一周 放弃了 很恼火
    NexTooo
        35
    NexTooo  
       2020-12-15 18:29:44 +08:00   ❤️ 1
    第一次打开本地新项目,能一次过的时候,我都会觉得今天我运气不错
    hongch
        36
    hongch  
       2020-12-15 19:57:08 +08:00
    如果是自定义 gradle 插件,各个版本之间的不同确实令人恼火,但如果只是拉个 jar 包,改改 gradle version 就可以了,也不麻烦
    sagaxu
        37
    sagaxu  
       2020-12-15 20:28:47 +08:00 via Android   ❤️ 1
    gradle 不符合国情,中国人硬盘小,10G 8G 空间宝贵。网也不好,恨不得所有东西都离线使用。
    hantsy
        38
    hantsy  
       2020-12-15 20:30:16 +08:00
    @sagaxu 哈哈
    fromzero
        39
    fromzero  
       2020-12-15 20:32:30 +08:00
    可以使用 offline 模式啊,跑本地的 gradle 。或者你可以把工程里的 gradle 版本改成你自己的
    Lemeng
        40
    Lemeng  
       2020-12-15 20:33:08 +08:00
    2g 吗,好吧,就不多说了
    nl101531
        41
    nl101531  
       2020-12-15 20:38:54 +08:00 via iPhone
    Java 开发路过,这玩意太伤磁盘了,心疼我的小电脑
    EminemW
        42
    EminemW  
       2020-12-15 22:43:30 +08:00
    改 gradle-wrapper.properties 中的 distributionUrl,或者是手动用浏览器下载然后把压缩包放到 IDE 的下载路径下,比 IDE 下载的快
    janus77
        43
    janus77  
       2020-12-15 22:47:03 +08:00
    mavan 是尽量兼容
    xcode 是压根不兼容
    看来夹在中间做人就是活该被骂呗……
    shingkit
        44
    shingkit  
       2020-12-15 23:08:01 +08:00
    @yazinnnn 正常是只有一个的,有两个是因为你有的项目升级只改了 gradle-wrapper.properties 的版本号,没有换同目录下的 jar 包
    xupefei
        45
    xupefei  
       2020-12-16 03:50:31 +08:00 via iPhone
    考虑一下 bazel ?远程缓存加持,编译快到飞起
    sonaive
        46
    sonaive  
       2020-12-16 03:58:56 +08:00 via iPhone   ❤️ 1
    @manami 是给我们喂什么,我们就吃什么
    20015jjw
        47
    20015jjw  
       2020-12-16 05:00:31 +08:00 via Android
    人在海外
    用 mac pro
    痛点就基本没有了
    gtanyin
        48
    gtanyin  
       2020-12-16 08:51:21 +08:00
    项目拉下来就改个已有的版本号呗,也不麻烦
    yazinnnn
        49
    yazinnnn  
       2020-12-16 08:59:09 +08:00
    @shingkit
    不不不,版本号我没改的,只是改了下载路径(因为 idea 下载实在是不靠谱。。。)
    两个 properties 文件里的 distributionUrl 分别是
    http\://localhost:8080/gradle-6.7.1-all.zip
    https\://services.gradle.org/distributions/gradle-6.7.1-all.zip
    yanlaz
        50
    yanlaz  
       2020-12-16 09:35:14 +08:00
    打开陌生项目,直接把项目里的 gradle 文件夹删了,这样构建时就会用已经下好的一个版本
    Cbdy
        51
    Cbdy  
       2020-12-16 09:35:35 +08:00 via Android
    看了一下你说的槽点,明明是自己不会用怪软件嘛
    sw926
        52
    sw926  
       2020-12-16 09:46:57 +08:00
    现在看来,gradle 已经是工程的一部分了,就好像你写的代码依赖特定版本的库,项目里面的编译插件也依赖不同的 gradle 版本。如果图省事可以不用 gradle wrapper,只用系统安装的 gradle,但是各个版本的 gradle 的还是有些差异的。
    Asuka0947
        53
    Asuka0947  
       2020-12-16 10:04:39 +08:00
    修改 distributionUrl,我是本地磁盘下放一个,蛋疼的是 idea 每次新建项目都会开始下载,手动关掉,改成本地,再重新引入。
    securityCoding
        54
    securityCoding  
       2020-12-16 10:15:05 +08:00
    这玩意主要是太灵活,版本升级速度比 chrome 差点 233
    joyhub2140
        55
    joyhub2140  
       2020-12-16 11:13:46 +08:00
    我喜欢一路更新最新的 IDE,特别是 IDEA,每次更新新版本的启动界面,都让我每天对着枯燥的代码有了一种新鲜感,但一升级 idea,gradle 和 gradle 插件都提示不满足当前 idea 最低支持的 gradle 版本了。

    同样的情况,maven 却没这种事情发生,实在是太稳了。
    HuHui
        56
    HuHui  
       2020-12-16 11:39:06 +08:00
    作为一个工具软件,却一直处于类 dev 状态,确实让人没有想用的欲望。
    MagnifierSun
        57
    MagnifierSun  
       2020-12-16 11:41:50 +08:00
    为啥你一直要用最新的呢?自己手动改下 gradle 的版本就行
    liyhu
        58
    liyhu  
       2020-12-16 12:43:13 +08:00
    maven 很稳,我几次尝试 gradle,但它经常报错,后面不用了
    TomVista
        59
    TomVista  
       2020-12-16 14:13:22 +08:00
    网也是个难题,这东西不走代理,经常跑不起来
    hehe12980
        60
    hehe12980  
       2020-12-16 14:33:14 +08:00
    但是说实话 Goorvy 写的比 Javas 爽多了
    crayygy
        61
    crayygy  
       2020-12-16 15:14:38 +08:00 via Android
    之前我还想学 gradle,后来我宁可去写 C++
    beginor
        62
    beginor  
       2020-12-17 08:35:45 +08:00 via Android
    gradle 现在能用 kt 写了, 源代码用 kt, 构建工具也用 kt, 多爽!
    HolmesYe123
        63
    HolmesYe123  
       2020-12-17 13:23:12 +08:00
    你可以用你本地的 gradle 来构建,这样不用下载所有版本,一个版本走天下
    Kamiyu0087
        64
    Kamiyu0087  
       2020-12-17 15:44:04 +08:00
    要不是也做 iOS 开发可能真信了 Xcode 用起来更舒服。。。
    twoyuan
        65
    twoyuan  
       2020-12-27 00:39:08 +08:00 via Android
    一直是网络问题

    最近用 ClashX+EnhanceMode 再也没感觉到 Gradle 慢了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5967 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 02:30 · PVG 10:30 · LAX 18:30 · JFK 21:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.