使用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
相关产品推荐
相关产品推荐

