集成PayMob SDK启动PayActivity时触发Resources$NotFoundException崩溃
崩溃根因
该崩溃由PayMob SDK的兜底资源引用逻辑缺陷引发:
SDK内置PayActivity在onCreate生命周期中会读取启动Intent的theme_color参数作为主题色,当该参数未传入时,会执行兜底逻辑读取colorPrimaryDark颜色资源。但这里SDK直接引用了自身编译时生成的R类资源ID,和宿主App合并资源后的实际资源ID映射不匹配,或是宿主App未定义colorPrimaryDark颜色项时,就会抛出资源找不到的异常直接崩溃。
崩溃日志里的核心报错对应SDK内的问题代码:this.themeColor = intent.getIntExtra("theme_color", this.getApplicationContext().getResources().getColor(color.colorPrimaryDark));
修复方案
- 启动PayActivity时主动传入
theme_color参数,彻底绕开SDK存在缺陷的兜底逻辑,参考实现:
Intent payIntent = new Intent(currentActivity, PayActivity.class); // 传入你项目自身的主题深色值即可 payIntent.putExtra("theme_color", ContextCompat.getColor(currentActivity, R.color.colorPrimaryDark)); // 按PayMob文档要求传入其余支付必填参数后启动页面 startActivity(payIntent);
- 检查项目
res/values/colors.xml配置,确保存在名为colorPrimaryDark的颜色定义,不要随意移除Android主题要求的默认颜色项。 - 如果构建时开启了资源压缩、资源混淆,将PayMob SDK的相关资源加入白名单,避免构建过程中误删SDK依赖资源、打乱资源ID映射关系。
内容的提问来源于stack exchange,提问作者Shady Mohamed
相关产品推荐
相关产品推荐

