You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HealthConnect 开启ProGuard的release模式权限对话框失效崩溃问题

问题现象

应用在启用ProGuard的release模式下运行时崩溃,权限对话框无法正常工作,崩溃日志如下:

Fatal Exception: java.lang.IllegalArgumentException: Unknown data type name h0
   at android.os.Parcel.createExceptionOrNull(Parcel.java:2429)
   at android.os.Parcel.createException(Parcel.java:2409)
   at android.os.Parcel.readException(Parcel.java:2392)
   at android.os.Parcel.readException(Parcel.java:2334)
   at androidx.health.platform.client.service.IHealthDataService$Stub$Proxy.getGrantedPermissions(IHealthDataService.java:414)
   at androidx.health.platform.client.impl.ServiceBackedHealthDataClient.getGrantedPermissions$lambda-1(ServiceBackedHealthDataClient.kt:93)
   at androidx.health.platform.client.impl.ServiceBackedHealthDataClient.$r8$lambda$hhWerw-hyBNCC_kPGtX4mZNDQdM(ServiceBackedHealthDataClient.kt)
   at androidx.health.platform.client.impl.ServiceBackedHealthDataClient$$InternalSyntheticLambda$0$605e77fbbfc877805d8dd88d131a334eb9370ed10712fd7118bc908c2d0b7ca2$0.execute(ServiceBackedHealthDataClient.java:6)
   at androidx.health.platform.client.impl.ipc.Client$3.execute(Client.java:279)
   at androidx.health.platform.client.impl.ipc.internal.ServiceConnection.execute(ServiceConnection.java:243)
   at androidx.health.platform.client.impl.ipc.internal.ServiceConnection.enqueue(ServiceConnection.java:200)
   at androidx.health.platform.client.impl.ipc.internal.ConnectionManager.handleMessage(ConnectionManager.java:123)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loopOnce(Looper.java:201)
   at android.os.Looper.loop(Looper.java:288)
   at android.os.HandlerThread.run(HandlerThread.java:67)
结论

必须为Health Connect API添加对应ProGuard规则。
该崩溃的根本原因是ProGuard/R8默认混淆了Health Connect SDK中用于跨进程IPC通信的序列化类,日志中的h0就是被混淆后的类名,Health Connect服务端解析跨进程传递的权限数据时找不到对应类型,直接抛出非法参数异常。

修复步骤
  • 打开项目对应业务模块下的proguard-rules.pro混淆配置文件
  • 在文件中追加如下规则,避免Health Connect SDK用于IPC通信的类被混淆:
# 保留Health Connect SDK所有类不被混淆,避免跨进程序列化失败
-keep class androidx.health.** { *; }
-keepclassmembers class androidx.health.** { *; }
  • 清理构建缓存后重新执行release构建,安装新包即可验证效果:崩溃问题会消失,权限对话框可正常弹出。

补充说明:1.0.0-alpha01及更高版本的Health Connect SDK已经自带consumer混淆规则,正常引入不需要手动配置。如果高版本仍出现该问题,检查是否有自定义全局混淆规则覆盖了SDK自带规则,手动添加上述规则即可强制修复。


内容的提问来源于stack exchange,提问作者B'havdip Dhameliya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 12:18:23