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

使用sget-object修改Smali方法返回True致应用崩溃求助

问题原因与解决方案

崩溃的核心原因是你引用的Lcom/abcjean/skull/User;->TRUE:Ljava/lang/String;静态字段不存在,虚拟机找不到该字段会直接抛出异常导致应用崩溃。要实现让getHasDrawn()方法返回字符串"True",有两种可靠的实现方式:

方式1:直接返回字符串字面量

不需要依赖类中的静态字段,直接在方法内构造并返回目标字符串,修改后的smali代码如下:

.method public final getHasDrawn()Ljava/lang/String;
    .registers 2

    # 加载字符串"True"到v0寄存器
    const-string v0, "True"

    return-object v0
.end method

这种方式最稳妥,无需依赖类中是否存在特定静态字段,直接满足需求。

方式2:确认静态字段存在后再引用

如果一定要使用sget-object指令,必须先确认Lcom/abcjean/skull/User类中确实存在名为TRUE的String类型静态字段(字段定义需类似.field public static final TRUE:Ljava/lang/String;,且字段值为"True")。若类中无该字段,要么自行添加该静态字段,要么改用方式1实现。

注意:原方法返回类型为String,你要返回的是字符串"True"(并非布尔值true),需确保调用该方法的代码预期的返回类型与修改后的一致,避免类型不匹配问题。

内容的提问来源于stack exchange,提问作者user516076

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 17:12:01