一、问题发现
Run跑出的apk居然在模拟器上不能安装(报错),但是通过assemble打出的apk可以安装。备注:都是debug包
二、问题排查
2.1、怀疑签名不一致
使用apksigner工具,对两个apk分别执行下面命令,得出的结果是一致的,看来不是签名问题
cd /path/to/android-sdk/build-tools/<版本号>/
# 查看签名信息
./apksigner verify --print-certs /path/to/your_app.apk
2.2、Run的配置有问题
1.点击Run旁边的下拉按钮,点击Edit Configurations
2. 在 Edit Configurations 中点击 **+**
3. 选择 **Android App**
4. 设置:
- Name: `launcher-devDebug`
- Module: `xxx.Project.launcher`
- 在 Before launch 中添加 `assembleDevDebug` 任务
再通过Run产品的apk可以正常安装的模拟器上了!再看一下默认的配置中Before launch里面的是Gradle-aware Make,应该就是这个有问题
三、总结
Gradle-aware Make 是为了提高开发效率的优化机制,但在复杂项目中(特别是有多渠道、自定义任务、复杂依赖的项目)可能会导致构建不一致的问题。
最佳实践:
- 开发时可以使用 Gradle-aware Make 提高速度
- 测试和发布时使用完整的 Gradle 构建确保一致性
- 遇到奇怪问题时,先尝试完整的 Gradle 构建
这就是为什么你的 "直接 Run" 和 "gradle assemble" 会产生不同结果的根本原因。