精华0
阅读权限15
最后登录2026-2-9
在线时间0 小时
累计签到:1 天 连续签到:1 天
星碎
名望- 0 点
星币- 5 枚
星辰- 0 颗
好评- 0 点
|
注册登录后全站资源免费查看下载
您需要 登录 才可以下载或查看,没有账号?立即注册
×
一、修改模块:TankHelp类的pay方法
修改目标
跳过真实支付 SDK 调用,直接触发 “支付成功” 的核心逻辑(setSignature(1))。
原问题
原pay方法会调用支付 SDK 发起真实支付,无法直接触发发放逻辑。
修改后的 Smali 代码:
- .method private static pay(IILjava/lang/String;IIILjava/lang/String;)I
- .registers 8 # 适配7个参数寄存器+1个本地寄存器,避免负数寄存器冲突
- # 1. 触发native层“支付成功”标识(核心)
- const/4 v0, 0x1
- invoke-static {v0}, Lorg/cocos2dx/cpp/TankHelp;->setSignature(I)V
- # 2. 重置“支付中”标记,避免重复购买无响应
- const/4 v0, 0x0
- sput-boolean v0, Lorg/cocos2dx/cpp/TankHelp;->mPaying:Z
- # 3. 返回支付成功码(与原逻辑一致)
- const/4 p0, 0x1
- return p0
- .end method
复制代码 修改说明
- 移除了原支付 SDK 调用逻辑,直接调用setSignature(1)(native 层识别 “支付成功” 的核心接口);
- 调整.registers数量为 8,适配方法的 7 个参数,避免寄存器溢出 / 负数寄存器错误。
二、修改模块:TankHelp类的getGivePropWithLuoDing方法
修改目标
让 native 层跳过 “服务端验证订单” 的等待逻辑,避免加载卡顿。
原问题
原方法返回类型为void且无返回值,native 层会拿到随机非 0 值,触发服务端验证等待。
修改后的 Smali 代码:
- .method public static getGivePropWithLuoDing()I # 修正返回类型为int(I)
- .registers 1
- # 强制返回0,让native层跳过服务端验证
- const/4 v0, 0x0
- return v0
- .end method
复制代码 修改说明
- 将返回类型从V(void)改为I(int),匹配 native 层的类型期望;
- 强制返回0,使 native 层的createWaitingPayDlg跳过 “服务端验证等待” 分支。
三、整体验证效果
修改后执行流程:
- 点击 “购买”→ 调用TankHelp.pay;
- pay方法直接触发setSignature(1),模拟支付成功;
- getGivePropWithLuoDing返回0,native 层跳过服务端验证等待;
- 直接执行物品发放逻辑,界面显示 “获得亓宝” 提示,无加载卡顿。
四、补充说明
若需适配不同商品档位(如 “一箱亓宝” 对应 1200+1000 亓宝),仅需在pay方法中补充 “根据商品 ID 匹配亓宝数” 的逻辑(通过param_0获取商品 ID,调用对应的发放函数),无需额外修改其他代码。
|
|