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

Android App 编译构建知识的小调查

  •  
  •   2bab · 2021-09-14 15:55:23 +08:00 · 3797 次点击
    这是一个创建于 927 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不久前写了篇文章《 Google I/O 21 Android Gradle Plugin 更新总结》,今天被 Google 的 “Android 开发者” 转载了。不过今天收到了一些反馈是:能不能也写写 Gradle 和 AGP 基础的文章。确实我接触过的绝大多数 Android 开发者都对 Android 构建方面的知识有种敬畏感,Gradle + Android Gradle Plugin ( AGP )的组合复杂度不低,而互联网上能找到的系统性资料稀少(英文都不多,中文就更少啦),大家有时候想学也难以下手,比如看看下面这些底层工具技术以及架构应用:

    底层技术:Gradle 、AGP 、Annotation Processor ( AP )、AAPT 、D8&R8 、ByteCode modification 、Dex modification 、Kotlin Compiler 、ZIP&APK&AAR&AAB 、IDE Plugin 、etc.

    架构应用:依赖注入、组件化、插件化、多渠道包、SDK 按需接入、白牌应用、多维度测试(单元、集成、功能测试)、安全防护(混淆、加壳、native 加密...),Jetpack Compose 、CICD 以及更多其他的自动化流程;

    编译构建的知识不仅是为了加快构建速度,还包含了自动化、架构优化的诸多方面,甚至与运行时的合作联动。也因此,我一直在思考对于这类文章的广度和深度应该怎么样去调整——啊,想破脑袋不如找广大的开发者们投个票好啦。AB 才疏学浅,下方的选项仅基于个人的理解来编写,有不足之处欢迎私信我提建议~

    1. “仅基础使用”(初级):我能读懂、修改 build.gradle(.kts),对 Gradle 、AGP 有基础的认知,例如了解 Gradle 的任务机制,但碰到非 App 源码的编译错误有点不知所措;
    2. “实现高效自动化、工程化”(中级):我对工程化、自动化有一定的认知、追求,可以通过构建脚本拆分、自定义 Task 来实现日常事务的优化,例如使用 buildSrc 模块抽取并统一管理依赖、使用自定义 Task 组合 CICD 的流程,运用一些最佳实践来提高编译构建效率;
    3. “编译构建增强”(高级):我可以通过查阅 Gradle 文档、Debug AGP 、编译期的 Profiler 日志,来自定义 Annotation Processor 、Gradle Plugin 等解决一个项目碰到实际问题,抽象成一套可复用的工具;
    4. “对编译构建有较为全面的理解”(资深):我了解编译构建的主要环节实现,常见架构应用的原理,实践过多个编译构建增强工具,对项目的基础架构梳理得井井有条;
    5. “深度参与”(垂直领域专家):我了解 Android App 编译构建的前沿发展,积极参与社区 Discussion 、Proposal 、PR 、Review,灵活运用、修改各类工具,对于不同类型的问题、需求能给出优解、多解。

    由于 V2 没有投票功能,还麻烦大家扫个码或者用 wx 点这个链接投~

    9 条回复    2021-09-16 16:26:08 +08:00
    2bab
        1
    2bab  
    OP
       2021-09-14 15:59:01 +08:00
    不方便的话也可以在这里留言讨论~
    AoEiuV020
        2
    AoEiuV020  
       2021-09-14 16:03:18 +08:00   ❤️ 1
    1.5 吧,感觉工作中没有更复杂的需求要深入 agp 的,个人除了最基本的使用,还可以自己写一些预处理,排查一些 gradle 配置导致的问题,但也就这样了,
    zhouquanbest
        3
    zhouquanbest  
       2021-09-14 20:18:13 +08:00   ❤️ 1
    借地发广告:
    快手招 Android 构建方向专家,现在股价已经在触底反弹时期了,抄底好时机。
    北京、上海、杭州、深圳都有 base
    工作方向为深入 Gradle 和 AGP,针对性修改其实现机制来满足快手编译性能和研发需求。最好对 R8 有比较充足的理解

    对构建方向有兴趣的小伙伴也招!位置不多,薪资丰厚。

    [email protected] 内推奖金都归你
    2bab
        4
    2bab  
    OP
       2021-09-14 20:55:50 +08:00
    @zhouquanbest 哈哈哈哈哈碰到熟人了,广告都打了,帮我填个问卷吧!
    imtianx
        5
    imtianx  
       2021-09-14 21:10:19 +08:00
    @zhouquanbest 之前面过没过,多久后可以继续面试哇
    imtianx
        6
    imtianx  
       2021-09-14 21:13:52 +08:00   ❤️ 1
    编译构建相关的知识确实很少很少,解决起来效率还不是那么快。不过现在好用了很多了。
    winterbells
        7
    winterbells  
       2021-09-14 21:40:41 +08:00   ❤️ 1
    不知道自己属于什么位置,花点时间能抄个像模像样的


    之前把公司项目都改成 kts 了,各种报错。
    最后还是靠 GitHub 救了自己,直接搜关键词 + 后缀名 kts

    这篇文章中午看到了。我以为公众号的文章都是自己投稿的。
    penguinWWY
        8
    penguinWWY  
       2021-09-15 01:41:50 +08:00   ❤️ 1
    逻辑上属于 3.5 ?
    从罗列的技术看
    gradle 比较熟悉,看过源码,提过 pr
    kotlin 也比较熟,自己的项目基本都是用 kotlin 代替 java,看过 kotlinc 和 kotlin-native 的部分源代码
    做过 Android 加固,所以字节码、d8 啥的也都看过,自己写过 dex2class 工具
    编译构建属于本职工作,Android 的编译过程和构建算是比较简单的了。。。

    唯一的问题是,我不做 Android,解决的实际问题比较少,一般都是加固、反编译时候遇到的
    zhouquanbest
        9
    zhouquanbest  
       2021-09-16 16:26:08 +08:00
    @imtianx 不是一个部门无 CD 同一个部门 3 个月 CD
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2745 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 12:25 · PVG 20:25 · LAX 05:25 · JFK 08:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.