技术文章
Improving App Performance with Baseline Profiles:https://android-developers.googleblog.com/2022/01/improving-app-performance-with-baseline.html
Google 发布的一个新的库,帮助 App 开发者主动生成 Baseline Profile ,以优化 App 的启动速度。之前这个文件是 Google 在 Play Cloud 生成,然后下发给用户的,所以存在不准确的现象。现在利用这个工具,开发者本地就可以生成和调试。简单来说就是尽量减少启动阶段的 jit,对应的代码逻辑可以看这篇文章:https://source.android.google.cn/devices/tech/dalvik/jit-compiler?hl=zh-cn
Android Architecture Pattern : https://medium.com/team-pratilipi/android-architecture-pattern-82aa0cf7e236
介绍了目前 Android App 架构,包括 Single Activity Architecture、View State Architecture、Clean Architecture in Android、Flow of data、Modularisation In Android 等
【线上故障】通过系统日志分析和定位 : https://mp.weixin.qq.com/s?__biz=Mzk0MzI4OTI1Ng==&mid=2247487678&idx=1&sn=2d8017af87b906ab9fa8f6387ded0a45
本文分享另外一种更为棘手的线上问题解决方案-如何在没有 coredump 文件的情况下,定位程序崩溃原因
向工程腐化开炮 | proguard治理 : https://xie.infoq.cn/article/8f418027b1033043b7a7d5e91
工程腐化是app迭代过程中,一个非常棘手的问题,涉及到广泛而细碎的具体细节,对研发效能&体验、工程&产物质量、稳定性、包大小、性能,都有相对“隐蔽”而间接的影响。一般不会造成不可承受的障碍,却时常蹦出来导致“阵痛”,有点像蛀牙或智齿,到了一定程度不拔不行,但不同的是,工程的腐化很难通过一次性“拔除”来根治,任何一次“拔除”之后,需要有效的可持续治理方案,形成常态化的防腐体系。
工程腐化拆解来看,是组成app的代码工程中,工程结构本身,以及各类“元素”(manifest、代码、资源、so、配置)的腐化。优酷架构团队近年来,持续在进行思考、实践与治理,并沉淀了一些技术、工具、方案。现逐一分类汇总,辅以相关领域知识讲解,整理成为《向工程腐化开炮》系列技术文章,分享给大家。希望更多同学,一起加入到与工程腐化的这场持久战中。
本文为系列文章首篇,将聚焦于java代码proguard,这一细分领域。对工程腐化,直接开炮!
Jetpack DragAndDrop 库——拖放操作如此轻松! : https://mp.weixin.qq.com/s?__biz=Mzk0NDIwMTExNw==&mid=2247508535&idx=1&sn=62e83062e97649a85c52a59620a22af9
我们将为您介绍目前处于 Alpha 阶段的 Jetpack DragAndDrop 库,帮助您更轻松地在应用中处理拖放数据。拖放是最基本的手势操作,用户可以点击并按住图片、文本或其他数据元素,然后将其拖动至另一个应用 (或者同一个应用的其他位置) 并松手,即可将数据放置到新的位置上。手势通常在触摸屏上表现为长按,在使用鼠标时则为点击并拖动。
High performance with idiomatic Kotlin
本文包括以下细节:(I)为什么高性能在我们构建软件产品时是必不可少的,(II)性能问题最常见的原因概述,(III)如何衡量性能,以及(IV)Kotlin如何帮助我们通过以习惯的方式编写可维护的、安全的、有表现力的Kotlin代码来构建优质产品。
What’s new in Android 12
Android 12 的新内容,不过话说 Android 13 都出来了.......
抖音 Android 性能优化系列:启动优化之理论和工具篇 : http://mp.weixin.qq.com/s?__biz=MzI1MzYzMjE0MQ==&mid=2247491335&idx=1&sn=e3eabd9253ab2f83925af974db3f3072
启动性能是 APP 使用体验的门面,启动过程耗时较长很可能导致用户使用 APP 的兴趣骤减,抖音通过对启动性能做劣化的 AB 实验也验证了其对于业务指标有影响显著。抖音拥有数亿的用户,启动耗时几百毫秒的增长就可能带来成千上万用户的留存缩减,因此,启动性能的优化成为了抖音 Android 基础技术团队在体验优化方向上的重中之重。
本文基于过往对抖音 Android 客户端做启动性能优化的实战经验总结提炼出普适性的方法论,并将该过程中沉淀的工具加以分享,希望能给大家带来一些新的思考。
eBPF是什么?为什么对可观测性很重要 : http://mp.weixin.qq.com/s?__biz=MzAwMDUwNDgxOA==&mid=2652681492&idx=1&sn=008c3ed95cf1c5985700d52c47f68c42
Extended Berkeley Packet Filter(eBPF)是一种内核技术(从 Linux 4.x 开始),它允许程序在无需更改内核源代码,或添加额外模块的情况下运行。你可以将其视为 Linux 内核中的轻量级沙箱虚拟机(VM),程序员可以在其中运行 BPF 字节码,从而利用特定的内核资源。
使用 eBPF 消除了更改内核源代码的需要,并简化了软件利用现有层的能力。因此,它是一项强大的技术,有可能从根本上改变网络、可观察性和安全性等服务的交付方式。
下面详细介绍一下它是什么,它是如何工作的,以及何时考虑实施它。
android-inline-hook : https://github.com/bytedance/android-inline-hook/blob/main/README.zh-CN.md
支持 Android 4.1 - 12 (API level 16 - 31)。
支持 armeabi-v7a 和 arm64-v8a。
支持针对函数整体的 hook,不支持对函数中间位置的 hook。
支持通过“函数地址”或“库名 + 函数名”的方式指定 hook 位置。
自动完成“新加载动态库”的 hook(仅限“库名 + 函数名”方式),hook 完成后调用可选的回调函数。
可对同一个 hook 点并发执行多个 hook 和 unhook,彼此互不干扰(仅限 shared 模式)。
自动避免代理函数之间可能形成的递归调用和环形调用(仅限 shared 模式)。
代理函数中支持以正常的方式回溯调用栈。
集成符号地址查找功能。
使用 MIT 许可证授权。
shadowhook 字节跳动新开源的一个 hook 库,是一个针对 Android app 的 inline hook 库。其特性如下
【解惑】App处于前台,Activity就不会被回收了? : https://juejin.cn/post/7063068797304832030
系统内存不足时,直接在内核层查杀(回收)进程,并不会考虑回收哪个Activity;
进程内存不足时,如果此进程 Activity Task数 >= 3 且 使用内存超过3/4,会对 不可见 Task进行回收,每次回收 1个 Task,回收时机为每次gc
现象:App 打开多个 Activity,然后手机晾一边,过一段时间后(屏幕常亮),点击回退,之前的 Activity 空白,然后重新加载了。App 在前台,不在栈顶的 Activity 却被干掉,但进程还健在
结论
JankStats Goes Alpha : https://medium.com/androiddevelopers/jankstats-goes-alpha-8aff942255d5
捕获每帧性能信息
可以运行在用户设备上
在应用程序出现性能问题时启用检测和报告发生的情况
恋猫de小郭翻译版本:https://mp.weixin.qq.com/s/w8a1zWYgmmwrajLhEdGqhA
JankStats:「第一个专门用于检测和报告应用在用户设备上的性能问题而构建的 AndroidX 库。」,JankStats 是一个相对较轻的库,主要有三个目标:
Jetpack Compose 1.1 is now stable! :https://android-developers.googleblog.com/2022/02/jetpack-compose-11-now-stable.html
都 1.1 版本了......
经验分享 && 推荐阅读
2022 年计划 : https://paradisehell.org/2022/02/06/plan-of-2022/
拆掉知识的墙 : https://mp.weixin.qq.com/s/G2ib7f87dCsRyEejaYk-6Q
5000字详解性能需求 : http://mp.weixin.qq.com/s?__biz=MzIxNDQ3NDI5OQ==&mid=2247486068&idx=1&sn=934b4db38a852bf5cde0cee972e59885
如何更好地工作 -#6 : https://geekplux.zhubai.love/posts/2102460687766016000
如何在某一领域成为世界顶尖 -#5 : https://geekplux.zhubai.love/posts/2097303049985957888
Android 手机的自适应高刷,为什么没能讨好用户? : http://mp.weixin.qq.com/s?__biz=MjgzMTAwODI0MA==&mid=2652073883&idx=1&sn=1a654053c02ac036071c2d5b585e6f9d
flomo 的 2021 和 2022 : https://mp.weixin.qq.com/s/6_LWweMCRdzUqbiq-2p-Tw
产品沉思录精选:如何管理需求优先级 | RICE方法 : https://mp.weixin.qq.com/s/IkIpPoFi1cIRaT2z5uQtHA
反向面试:你有什么问题要问面试官的? : https://github.com/yifeikong/reverse-interview-zh
开发 Weekly
Android Weekly-504 : https://androidweekly.net/issues/issue-504
Kotlin Weekly #289 : https://mailchi.mp/kotlinweekly/kotlin-weekly-289
Podcast
Episode 182: Large screens are a big deal : https://adbackstage.libsyn.com/episode-182-large-screens-are-a-big-deal
书籍推荐
软技能 2 : 软件开发者职业生涯指南
工具推荐
Dev on Windows with WSL : 在 Windows 上用 WSL 优雅开发
定时打鸡血
![a367e54fd20e27139c1f0216026d9f10.png](https://i-blog.csdnimg.cn/blog_migrate/0a03c8283d200a9d95e28d44bb7c268d.png)