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

Android 开发现在心智负担如何

  •  
  •   silvernoo · 41 天前 · 6404 次点击
    这是一个创建于 41 天前的主题,其中的信息可能已经有所发展或是发生改变。
    写了几年 flutter ,又回到了安卓,感觉一夜回到解放前。又让我想起曾经被 gradle ,android studio ,kotlin 还有何种插件依赖和兼容性的四重拷打中。仿佛深夜的四重奏,指加班。因为打包工具造成产出下降很难向上解释。最近又在从 support 包迁移 androidx ,排查了 100 个打包错误后放弃。

    gradle 配置不向下兼容,报错模糊不清,不敢碰升级,gradle 报错广泛解决方案就是 clean cache 和 invalidate caches and restart 引出了另一个屑 android studio 。还有 gradle 那莫名其妙的全量构建

    kotlin 没什么太大问题,本身可以提高编码体验,比 java 舒服多了,可目前现状基本上一个项目 java kotlin 都用,代码可读性是小问题,比如 kt 插件要升级吧就要吧 androidx agp gradle 全都升级,哪一个都是令人畏惧的存在。进而回到 gradle 升级的问题。

    大家说一下你们现在是怎么舒适的写原生代码的。
    48 条回复    2025-04-28 20:39:58 +08:00
    superedlimited
        1
    superedlimited  
       41 天前 via iPhone
    2025 年了怎么还没迁移到 androidx…🫨
    magicls
        2
    magicls  
       41 天前
    这年头还有没迁移到 androidx 的项目?你快跑吧。。。
    Helsing
        3
    Helsing  
       41 天前 via iPhone   ❤️ 1
    gradle 还是个黑盒一样,不过好在现在有 AI ,一般问 AI 可以解决问题
    timelessg
        4
    timelessg  
       41 天前 via Android
    对于新项目,compose +Android 对比 switfui +Xcode 体验好巨多,iOS 正在被 Android 反超,当然我说的是 Android 不是安卓
    jeepc
        5
    jeepc  
       41 天前   ❤️ 1
    让 ai 辅助迁移
    silvernoo
        6
    silvernoo  
    OP
       41 天前
    @Helsing #3
    @jeepc #5 ai 确实可以缓解很多不适感,请问 cursor 可以吗。我还用 ai 工具改项目结构
    Romic
        7
    Romic  
       41 天前   ❤️ 1
    让我吐槽一下我们安卓开发。
    本人:java
    IOS:已上架
    Android:后面来的,一直说接口有问题,文档都看不明白。这都无所谓 talk 一下就 ok 。
    特喵的他直接调用生成的接口怼他没上线的功能,做测试。还犟嘴。 还不觉得自己错了,是不是所有安卓同学都是这样?
    Romic
        8
    Romic  
       41 天前
    调用生产环境的接口
    a0000
        9
    a0000  
       41 天前 via Android
    @Romic 肯定不是
    kuanat
        10
    kuanat  
       41 天前   ❤️ 10
    AndroidX 只是个支持库,楼主描述的问题核心是 gradle 这种构建系统复杂,与使用什么样的支持库没有关系。我不是专业的 Android 开发,只是经常做一些逆向或者开发个人用的工具,经验不一定靠谱,以下我说的仅供参考。

    简单说,一劳永逸解决心智负担的方法就是学明白构建原理以及构建工具的使用方法。

    我认为这个问题本质上就和 git 图形化插件一样,你对 git 越熟悉,用图形化插件就越不容易出错。假如对 git 理解不到位,用图形化插件就容易爆炸,最终很可能还是要回到命令行去排错。

    构建本身就是个非常复杂的过程,可能很多专业开发写了很多年 Android 都没有尝试过手动构建,因为 IDE 隐藏了构建工具( gradle )的细节,构建工具又隐藏了构建过程的细节。当底层构建过程出错的时候,经过两层抽象之后暴露给开发者的信息就非常有限,容易让人摸不着头脑。

    我们就用手动模拟 gradle 工作流程的方式,从最简单的开始一步一步说。首先要 Java 编译,所以要配置 jdk ,同时要配置依赖,这里依赖的来源可以是线上仓库,可以是本地引入等等。假如引入的依赖有 C 之类的原生库,就要引入 ndk 做交叉编译。这里就不深究了,假设直接用 CMake 构建工具完成了。

    以上只是编译出各个组件,离完整的应用包还有距离。这里字节码要打包成 dex ,资源文件要用特定工具压缩,最终还要把各个模块再打包成 apk ,还要处理签名等等。

    如果只看核心的构建过程并不是很复杂,构建 variants 、测试和缓存等等一系列功能不影响理解这个过程。因为 gradle 的配置本身是个 DSL ,如果你不理解 DSL 背后所代表的实际工作过程,想要通过修改 DSL 代码来排错 debug 就不现实。

    在理解 gradle 的原理和 IDE 的使用方法的基础上,手动排错 debug 就不是特别难的事情。当然这个事情不绝对,有些项目时间跨度很长,而某些支持依赖没有语义化版本,对应的 gradle 配置可能无法向后兼容,甚至出现版本一换循环依赖解析失败的问题,这时候就要手工重构替换掉特定依赖了。
    john6lq
        11
    john6lq  
       40 天前 via iPhone
    刚入行可以理解,工作几年的话,这些问题我觉得抱怨之外,百分百可以自己解决。另外 Flutter 问题也不少。
    Doubt can only be removed by actions.
    silvernoo
        12
    silvernoo  
    OP
       40 天前
    @john6lq #11 理论上来说我的问题可以用 killall java 加到 post script 里解决,但每次要构建十多分钟,宝子你还年轻以后的坑慢慢踩
    bunnyblueair
        13
    bunnyblueair  
       40 天前 via Android
    Gradle 内部接口经常修改,非常恶心
    anivie
        14
    anivie  
       40 天前
    现在 flutter 开发已经不用 as 了吗
    lipyoung
        15
    lipyoung  
       40 天前 via Android
    请问为啥回安卓了啊? Flutter 凉凉吗?
    HojiOShi
        16
    HojiOShi  
       40 天前
    反正只要是碰到 Gradle 的,如果没有现成能用的插件,谷歌自家的 Gemini 也是无能为力的。
    iflint
        17
    iflint  
       40 天前
    Android 是这样的,从 as 里面创建一个 demo 跑起来也得耗点功夫
    nnegier
        18
    nnegier  
       40 天前 via Android
    现在搞 Android 可真一点不享受,你从 flutter 回来,编译这一块你应该就受不了,时间长
    malimalimali
        19
    malimalimali  
       40 天前
    有啥心智负担?
    不就是时不时 Gradle 接口变更 、 仓库跑路 、 作者删库、 墙
    lpf0309
        20
    lpf0309  
       40 天前
    确实挺扯淡的,跑个 demo 都费劲,android stduio 建议升级 gradle ,然后升级了好多程序又不能用。把 gradle 降级后不行,也没提醒,试了半天才知道,对应的插件也要降级
    Vindroid
        21
    Vindroid  
       40 天前
    老项目不升级能用就行,新项目全用新的,最主要的是要保持网络畅通
    dnL
        22
    dnL  
       40 天前
    @Romic 可让你逮着机会,对着 Android 开发开一波地图炮了
    Lockroach
        23
    Lockroach  
       40 天前
    感觉安卓开发的工具链配置都挺麻烦的,而且时不时 as 就提示你升级 agp
    Nuttertoo1s
        24
    Nuttertoo1s  
       40 天前
    我们现在的项目也还在用着 support ,升不了一点,一大堆兼容问题和适配问题
    xinyu391
        25
    xinyu391  
       40 天前
    gradle 就是一坨屎,一个好好的项目几个月没打开,然后一打开,就飞出翔 了。
    lqbk
        26
    lqbk  
       40 天前
    做过 iOS 然后 转 flutter 被 gradle 折磨过哈哈 这样一看 iOS 的 cocoapod 也没那么屎了
    capric
        27
    capric  
       40 天前
    @kuanat gradle.bat, gradle.sh 就是命令行啊,我们在 devops 都是 k8s 上构建 android app ,没有 gui 界面
    janus77
        28
    janus77  
       40 天前
    理论上呢,jetpack 前和 jetpack 后是两个时代,前者就是碎片化严重,后者还比较稳定
    但是呢,你得要有一个脚手架之类的东西才行,这样就不需要折腾了,但是也不能随意升级三方库
    jeepc
        29
    jeepc  
       40 天前
    @silvernoo #6 cursor 可以,就得能把整个项目加载到上下文的 ai 工具。不过不要指望它能完全搞定。
    lidayl
        30
    lidayl  
       40 天前
    写了一年的 Harmony 现在又开始 Android 第一时间是迁移到 compose ...
    limiter
        31
    limiter  
       40 天前
    老项目先重构再升级,组件化拆分,每个模块都很小的话升级起来就没那么困难了
    justtokankan
        32
    justtokankan  
       40 天前
    继续写 Flutter 啊 ? 为啥有切回到安卓?
    jmliang
        33
    jmliang  
       40 天前
    习惯了 Flutter ,现在哪怕只写一端的 App 也用 Flutter 了
    zcmi
        34
    zcmi  
       39 天前
    flutter 有什么问题吗?正想学 flutter 呢
    Belmode
        35
    Belmode  
       39 天前
    @kuanat #10 可以看出来,你是对软件工程有一定学习和深入研究的。并且,对工作中的学习思维和方法论都深入总结过。
    HangoX
        36
    HangoX  
       39 天前
    Gradle 的问题的确不友好,主要是用的是 Groovy 做 dsl ,看起来是好看,但是没有认真学过 groovy 其实很不友好,特别是对 Java 语言开发者来说。个人建议可以改为 kotlin 的 kts ,这样看起来会简单点,但是也有问题,以前基于 Groovy 写的脚本粘贴过来不能用。
    如果想写好 android ,Gradle 构建是绕不过去,这个东西复杂到可以比拼 android 开发。
    cccn
        37
    cccn  
       39 天前
    写过一段时间的 flutter ,除了 dart 语法太多嵌套外,开发体验挺好的,反正比直接开发原生安卓舒服很多。
    > 个人觉得嵌套也没啥,可能是吐槽的人多了吧,所以单独拿出来说一下。另外平时写多了 jsx ,都有拆解组件的习惯,并没有什么影响
    charlie21
        38
    charlie21  
       39 天前
    flutter 怎么入门
    Romic
        39
    Romic  
       39 天前
    @dnL 哈哈哈,以前都是做 web 开发。
    yongchuan
        40
    yongchuan  
       39 天前
    @kuanat 一看就是大佬 , 现在我的项目就是使用 buildSrc 以及 kotlin DSL 来封装构建过程 , 自写了约定插件来管控 , 再把插件推到 maven 一条龙 , 现在只能说在遇到报错升级什么都是小问题 , 其实跑别人项目多半都是 jdk , agp , Android studio 版本不匹配问题
    levelworm
        41
    levelworm  
       39 天前 via Android
    @kuanat #10
    请问大佬是做哪块逆向的?听君一席话。
    lait
        42
    lait  
       39 天前 via Android
    公司老项目,各种古老的插件,升级个 agp 版本问题超多,所以博客里写了好几篇 APG gradle Kotlin jdk 等版本相互兼容的内容,就是找重叠点,大家都好用的那个点。费老劲了🤦‍♂️
    headwindx
        43
    headwindx  
       39 天前 via iPhone
    @silvernoo 知足吧,有的项目,全量编译得 40 多分钟。就当开眼了
    hwb
        44
    hwb  
       39 天前
    @Romic 一棍子打死?
    aisles1
        45
    aisles1  
       39 天前
    @hwb #44 他都直接 AOE 所有人了,就顺从他吧
    cocomanber
        46
    cocomanber  
       38 天前
    公司里我主写 iOS ,也写过几个 flutter 项目,现在转而写安卓,“被 gradle ,android studio ,kotlin 还有何种插件依赖和兼容性的四重拷打中” ... 感同身受,这些玩意真是安卓入门的必躺坑,一头雾水中
    apples01
        47
    apples01  
       38 天前
    @Romic #7 你一棒子打死了一个行业的从业人员。明显他个人性格问题
    Romic
        48
    Romic  
       38 天前
    @apples01 有道理。 但是公司就一个安卓。IOS 就很棒。 没有对比就没有伤害。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5610 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 06:37 · PVG 14:37 · LAX 23:37 · JFK 02:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.