AndroidStudio直接Run产生的apk和gradle assemble产生的apk居然不一样

120 阅读1分钟

一、问题发现

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

微信图片_20250729105635_25.png

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" 会产生不同结果的根本原因。