多模块多变体App宏基准测试启动崩溃及DROP_SHADER_CACHE报错
Android宏基准测试DROP_SHADER_CACHE报错及App启动崩溃解决
问题核心分析
基准测试抛出的DROP_SHADER_CACHE broadcast was not received报错只是表象,根源是目标App在测试过程中启动崩溃,导致ProfileInstaller无法正常工作并发送广播。App崩溃的具体原因:
ClassNotFoundException: com.game.soulmate.MyApplication:应用入口类找不到,大概率是构建变体配置错误、包名不匹配或打包过程丢失类文件。- 附带的
com.facebook.react.ReactApplication缺失:React Native核心依赖未正确引入到测试变体中。
分步解决方案
一、修复App启动崩溃
1. 校验构建变体与Manifest配置
- 确认基准测试任务
connectedGpBenchmarkAndroidTest对应的目标App变体(如gpBenchmark)的AndroidManifest.xml中,application标签的android:name属性准确指向com.game.soulmate.MyApplication,且该类存在于对应变体的源码目录中。 - 检查多模块项目中,
MyApplication所在模块是否被目标变体正确依赖(在模块的build.gradle的dependencies中确认)。
2. 补全React Native依赖
- 确保测试构建变体(如
gpBenchmark)中已引入React Native核心依赖,避免仅在主变体中添加:dependencies { implementation "com.facebook.react:react-native:${reactNativeVersion}" // 其他必要的RN依赖,如react-native-safe-area-context等 } - 若启用混淆,在ProGuard/R8规则中保留相关类:
-keep public class com.game.soulmate.MyApplication -keep public class com.facebook.react.ReactApplication -keep class com.facebook.react.** { *; }
3. 检查Dex配置
- 若开启多Dex,确保目标变体的
build.gradle中设置multiDexEnabled true,且MyApplication继承自MultiDexApplication,或在attachBaseContext方法中调用:@Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } - 清理并重新构建目标变体:
./gradlew clean assembleGpBenchmark
二、确认ProfileInstaller配置
App能正常启动后,验证ProfileInstaller的配置:
- 确保目标App的所有相关变体都添加了依赖,而非仅主变体:
dependencies { implementation "androidx.profileinstaller:profileinstaller:1.3.1" } - 检查基准测试模块的依赖版本与目标App一致,避免版本冲突。
三、重新运行基准测试
执行以下命令重新运行测试,确认报错消失:
./gradlew :macrobenchmark:connectedGpBenchmarkAndroidTest
内容的提问来源于stack exchange,提问作者Code-Warrior
相关产品推荐
相关产品推荐

