使用Build Tools 31集成华为HMS AppService在Android 12上出现崩溃问题
问题复现条件
项目引入依赖如下:
"com.huawei.hms:appservice:6.1.0.301"
使用Build Tools 31构建、targetSdk >=31时,在Android 12及以上系统运行会触发如下崩溃:
java.lang.IllegalArgumentException: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent. Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles. at android.app.PendingIntent.checkFlags(PendingIntent.java:375) at android.app.PendingIntent.getActivityAsUser(PendingIntent.java:458) at android.app.PendingIntent.getActivity(PendingIntent.java:444) at android.app.PendingIntent.getActivity(PendingIntent.java:408) at com.huawei.hms.api.b.getErrPendingIntent(HuaweiApiAvailabilityImpl.java:10) at com.huawei.hms.common.internal.BaseHmsClient.resolution(BaseHmsClient.java:3) at com.huawei.hms.common.internal.BaseHmsClient.checkAvailabilityAndConnect(BaseHmsClient.java:34) at com.huawei.hms.common.internal.BaseHmsClient.connect(BaseHmsClient.java:1) at com.huawei.hms.common.internal.HuaweiApiManager$ConnectionManager.connect(HuaweiApiManager.java:21) at com.huawei.hms.common.internal.HuaweiApiManager$ConnectionManager.sendRequest(HuaweiApiManager.java:24) at com.huawei.hms.common.internal.HuaweiApiManager.connectAndSendRequest(HuaweiApiManager.java:8) at com.huawei.hms.common.internal.HuaweiApiManager.handleMessage(HuaweiApiManager.java:7) 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)
问题根因
你使用的6.1.0.301版本AppService SDK未适配Android 12系统的PendingIntent规则:Android 12(API 31)及以上系统强制要求所有PendingIntent创建时必须显式指定FLAG_IMMUTABLE或FLAG_MUTABLE标记,旧版本SDK未添加对应标记就会触发上述IllegalArgumentException异常。
解决方案
- 方案1:升级AppService SDK到适配版本(推荐)
华为AppService SDK从6.3.0.302版本开始已经完成Android 12适配,修复了该PendingIntent问题,直接替换依赖即可:
"com.huawei.hms:appservice:6.3.0.302"
你也可以选择更高的官方稳定版本,均已包含该修复。
- 方案2:临时兼容方案(无法升级SDK时使用)
如果项目存在兼容性约束暂时无法升级AppService SDK,可以通过强制引入适配后的华为基础SDK覆盖公共依赖的方式修复问题,添加如下依赖即可:
"com.huawei.hms:base:6.3.0.301"
该版本的base SDK已经修复了PendingIntent适配逻辑,上层AppService SDK调用相关能力时会复用修复后的底层逻辑,不会再触发崩溃。
内容的提问来源于stack exchange,提问作者lazexe
相关产品推荐
相关产品推荐

