寄存器的类型为 Long(High Half)但预期为 Long(Low Half)
register has type Long (High Half) but expected Long (Low Half)
我正在尝试解决在 Forward/Rewind 远程按钮按下事件中调用的 Media Player seekTo() 方法的问题,但出现此错误:
使用以下编辑的 smali 尝试将 long 参数转换为 int:
.method private static synthetic a(JLandroid/media/MediaPlayer;)V
.locals 1
long-to-int v0, p1
.line 317
invoke-virtual {p2, v0}, Landroid/media/MediaPlayer;->seekTo(I)V
return-void
.end method
我该如何修复这个错误,或者有没有其他方法让它起作用?
这是原始代码(但当我按前进或后退时它只是 stops/pauses 视频):
long-to-int p1, p0
.line 317
invoke-virtual {p2, p1}, Landroid/media/MediaPlayer;->seekTo(I)V
我的临时修复是这样的:
.method private static synthetic a(JLandroid/media/MediaPlayer;)V
.locals 3
#get current position
invoke-virtual {p2}, Landroid/media/MediaPlayer;->getCurrentPosition()I
move-result v0
#add some ms to current position register
const/16 v1, 0x6978
add-int v2,v0,v1
add-int v2,v2,v1
add-int v2,v2,v1
add-int v2,v2,v1
add-int v2,v2,v1
#seek to calculated position
.line 317
invoke-virtual {p2, v2}, Landroid/media/MediaPlayer;->seekTo(I)V
return-void
.end method
但即使我按倒带它也只寻找前进(因为我只在当前位置添加时间)。
我无法 find/create 为 Rewind 事件自定义方法,源代码非常大且混淆。
跟踪错误链和方法调用链并没有把我带到任何地方。
由于这是一个静态方法,因此没有隐式 "this" 参数,参数寄存器从 p0
开始。所以第一个长参数是p0
,p1
,MediaPlayer
参数是p2
.
对于 long-to-int
指令(以及大多数使用长值的指令),您可以通过传递宽寄存器对中的第一个寄存器来指定要处理的宽值。在这种情况下,即 p0
,而不是 p1
。
错误是指您传递的是宽寄存器对的上半部分,而不是下半部分。
所以,long-to-int v0, p0
可能就是你想要的。
我正在尝试解决在 Forward/Rewind 远程按钮按下事件中调用的 Media Player seekTo() 方法的问题,但出现此错误:
使用以下编辑的 smali 尝试将 long 参数转换为 int:
.method private static synthetic a(JLandroid/media/MediaPlayer;)V
.locals 1
long-to-int v0, p1
.line 317
invoke-virtual {p2, v0}, Landroid/media/MediaPlayer;->seekTo(I)V
return-void
.end method
我该如何修复这个错误,或者有没有其他方法让它起作用?
这是原始代码(但当我按前进或后退时它只是 stops/pauses 视频):
long-to-int p1, p0
.line 317
invoke-virtual {p2, p1}, Landroid/media/MediaPlayer;->seekTo(I)V
我的临时修复是这样的:
.method private static synthetic a(JLandroid/media/MediaPlayer;)V
.locals 3
#get current position
invoke-virtual {p2}, Landroid/media/MediaPlayer;->getCurrentPosition()I
move-result v0
#add some ms to current position register
const/16 v1, 0x6978
add-int v2,v0,v1
add-int v2,v2,v1
add-int v2,v2,v1
add-int v2,v2,v1
add-int v2,v2,v1
#seek to calculated position
.line 317
invoke-virtual {p2, v2}, Landroid/media/MediaPlayer;->seekTo(I)V
return-void
.end method
但即使我按倒带它也只寻找前进(因为我只在当前位置添加时间)。
我无法 find/create 为 Rewind 事件自定义方法,源代码非常大且混淆。
跟踪错误链和方法调用链并没有把我带到任何地方。
由于这是一个静态方法,因此没有隐式 "this" 参数,参数寄存器从 p0
开始。所以第一个长参数是p0
,p1
,MediaPlayer
参数是p2
.
对于 long-to-int
指令(以及大多数使用长值的指令),您可以通过传递宽寄存器对中的第一个寄存器来指定要处理的宽值。在这种情况下,即 p0
,而不是 p1
。
错误是指您传递的是宽寄存器对的上半部分,而不是下半部分。
所以,long-to-int v0, p0
可能就是你想要的。