外观
构建与质量门禁
Gradle、Lint、增量 MR 门禁与持续交付。
本领域共 53 条问答。先读与你当前场景相关的主题,再用全文搜索查找具体问题。
构建系统与 Gradle 配置
- build.gradle (Project) 和 build.gradle (Module) 的区别是什么?
- 如何在 Gradle 中定义自定义构建任务(Task)?
- 什么是 Gradle 插件?Android Gradle Plugin (AGP) 的主要职责是什么?
- 如何在 Gradle 中定义 debug、release 和 staging 三种构建变体?
- 如何为不同渠道(如华为、小米、应用宝)生成不同的包名和资源?
- 什么是 FlavorDimensions?如何解决多个维度的组合冲突?
- R8 相比 ProGuard 在性能和功能上有哪些改进?
- 如何防止某些类或方法被 R8 移除或混淆?
- 混淆后如何生成 mapping.txt 文件用于崩溃堆栈还原?
- APK 和 AAB(Android App Bundle)的主要区别是什么?
- 什么是 zipalign?为什么在签名前必须执行 zipalign?
- 如何使用 jarsigner 和 apksigner 对 APK 进行签名?两者有何区别?
- 如何启用 Gradle 的 Daemon、Parallel 和 Configuration-on-Demand 优化?
- 什么是 Gradle 任务缓存?如何配置本地和远程缓存?
- 如何分析 Gradle 构建耗时并定位慢任务?
打包与分发策略
- 为什么 Google 推荐使用 AAB 而非 APK 进行发布?
- 如何在 Google Play Console 中配置分发规则(如语言、设备筛选)?
- 什么是 App Signing by Google Play?它如何提高安全性?
- 如何在 Android Studio 中为每个渠道生成独立的 APK?
- 什么是友盟、神策等统计 SDK 的渠道标识(channel)注入方式?
- 如何在打包时自动替换 manifest 中的 meta-data 字段?
- 什么是 Android 热修复(HotFix)?Tinker 和 AndFix 的原理有何不同?
- 为什么 Google Play 不允许未经审核的热更新?
- 如何通过 Firebase Remote Config 实现非代码层面的功能开关?
- 如何实现应用内自动检查更新并下载新版本?
- 什么是灰度发布?如何通过用户分组实现小范围测试?
- 如何在升级失败时实现回滚机制?
- 为什么不能将 keystore 文件提交到 Git 仓库?
- 如何在 CI/CD 流水线中安全地存储和使用签名密钥?
- 如果丢失了应用签名密钥,会对应用产生什么影响?如何避免?