安全是一个“成本”问题。完美的安全不存在,关键是把攻击成本提到足够高。今天就来聊几个工程上能落地的安全加固点。 一、HTTPS 与证书固定 HTTPS 防中间人,但如果设备被装了伪造证书,还是可能被监听。证书固定(Pinning)可以解决这个问题。 val certificatePinner = C
用户最怕 App 耗电。后台偷偷跑、GPS 一直定位、网络频繁唤醒,都是电量杀手。电量优化的本质,是减少不必要的系统唤醒。 一、Doze 和 App Standby Android 6.0 引入的 Doze 模式: 屏幕关闭且设备静止一段时间后进入 Doze 期间网络、闹钟、Job 被推迟到窗口期集
网络请求是 App 耗电和流量的主要来源之一。同样的接口,优化前后可能差几倍。今天聊一些工程上立竿见影的做法。 一、连接复用:HTTP/2 和连接池 val client = OkHttpClient.Builder() .protocols(listOf(Protocol.HTTP_2,
包体积直接影响下载转化率和更新率。每多 1MB,都可能让一部分用户放弃下载。包体积优化不是一次性工作,是持续监控的过程。 一、APK / AAB 里都有什么 用 Android Studio 的 APK Analyzer 打开一个 APK,通常会看到: classes.dex:编译后的字节码 res
Navigation 组件出来好几年了,但很多项目还是手写 Fragment 管理。不是它不好用,而是多栈、跨模块、深层链接这些场景容易踩坑。 一、Navigation 解决了什么问题 Fragment 跳转代码散落在 Activity 里 返回栈管理容易出 Bug 深层链接和参数传递写起来乱 多
很多 Android 项目测试少,不是因为不想写,而是不知道测什么、怎么测。测试金字塔可以帮你决定投入比例。 一、测试金字塔三层 /\ / \ UI 测试(少、慢、贵) /____\ / \ 集成测试(中) /________\ /
项目越大,构建越慢,耦合越重。模块化的目的不是炫技,是为了让团队能并行开发、独立测试、快速构建。 一、模块化的三种粒度
Android 设备形态越来越杂:折叠屏、平板、挖孔屏、刘海屏、药丸屏。只做一套固定布局已经不够了,响应式 UI 是高级工程师的必修课。 一、WindowInsets:处理好系统栏 ViewCompat.setOnApplyWindowInsetsListener(root) { view, ins
Android 后台限制越来越严。Doze、App Standby、后台启动限制,让 AlarmManager 和 Service 不再是首选。复杂后台任务,现在基本交给 WorkManager。 一、WorkManager 能解决什么问题
本地数据库是 App 的标配。Room 让 SQLite 写起来像操作对象,但用久了会发现:同样的 Room,有人快有人慢,差别就在索引和查询设计。 一、为什么 Room 查询会慢 Room 本质还是 SQLite。慢通常不是 Room 的问题,是 SQL 的问题: 没建索引,全表扫描 一次性查太多