Android Smali:所有寄存器参数必须适合4位错误

Android Smali:所有寄存器参数必须适合4位错误,android,smali,Android,Smali,当我使用smali为我的mod文件编制索引时,我遇到了以下错误: patch\android\view\Choreographer.smali[1392,4]所有寄存器参数必须 装入4位 我找到第1392行,发现: invoke-direct {p0, p1, p2, p3}, Landroid/view/Choreographer;->MyFunc(JI)V invoke-static {}, Ljava/lang/System;->nanoTime()J (line 1392

当我使用smali为我的mod文件编制索引时,我遇到了以下错误:

patch\android\view\Choreographer.smali[1392,4]所有寄存器参数必须 装入4位

我找到第1392行,发现:

invoke-direct {p0, p1, p2, p3}, Landroid/view/Choreographer;->MyFunc(JI)V 
invoke-static {}, Ljava/lang/System;->nanoTime()J  (line 1392)

move-result-wide v11
有人知道我该怎么修吗?我读过这篇文章,但没用,因为这行
没有使用任何寄存器。

问题在第一行

invoke-direct {p0, p1, p2, p3}, Landroid/view/Choreographer;->MyFunc(JI)V 
您只能使用寄存器v0-v15,因为数字寄存器索引必须在4位以内。该方法显然有大量寄存器,因此至少p3映射到高于v15的寄存器

幸运的是,寄存器是连续的,因此修复很简单

invoke-direct/range {p0 .. p3}, Landroid/view/Choreographer;->MyFunc(JI)V 

/range变量接受一个连续的寄存器范围,最多可以寻址v65535。

如果您不清楚p*寄存器如何映射到v*寄存器,您可以在Thank you JesusFreke上找到更多信息,您确实说过该方法有16个以上的寄存器(22)。现在我已经用你提供的方法解决了这个问题。非常感谢!调用静态/范围的地址范围是什么?我正在尝试使用静态方法和寄存器>v15@alchemist-文档是您的朋友:。“参数字数(8位)”和“第一个参数寄存器(16位)”@JesusFreke感谢您的回复。但看起来这对我也不管用。我没有收到“使用寄存器v0-v15”的错误,但是apk构建在手机上崩溃,错误是:编译时验证失败。请帮忙。