Patchrom回编译错误解决方法
1.
插桩回编译显示错误 Invalid register: v19. Must be between v0 and v15, inclusive.
在插入的代码上一行加入以下代码
move/from16 v16, v0
move/from16 v0, v16
move-object/from16 v1, p1
再对插入的代码进行调整
例子:
要插入的代码:
invoke-static {p1, v11}, Landroid/view/ViewConfigurationHelper;->getOverScrollDistance(Landroid/content/Context;I)I
move-result v11
回编译显示错误 Invalid register: v19. Must be between v0 and v15, inclusive.
修改后;
move/from16 v16, v0
move/from16 v0, v16
move-object/from16 v1, p1
invoke-static {v1, v0}, Landroid/view/ViewConfigurationHelper;->getOverScrollDistance(Landroid/content/Context;I)I
move-result v16
2.
插桩回编译显示错误 There is already a label with that name.
Exception in thread “main” brut.androlib.AndrolibException: Could not smali file
要对插入和没插入的代码进行对比调整,
例子:
要插入的代码:
.end local v0 # "_arg0":I
.end local v1 # "_arg1":I
:sswitch_12
const-string v4, "com.android.internal.statusbar.IStatusBar"
invoke-virtual {p2, v4}, Landroid/os/Parcel;->enforceInterface(Ljava/lang/String;)V
invoke-virtual {p2}, Landroid/os/Parcel;->readInt()I
move-result v0
.restart local v0 # "_arg0":I
invoke-virtual {p2}, Landroid/os/Parcel;->readString()Ljava/lang/String;
move-result-object v1
.local v1, "_arg1":Ljava/lang/String;
invoke-virtual {p2}, Landroid/os/Parcel;->readInt()I
move-result v4
if-eqz v4, :cond_6
sget-object v4, Landroid/os/Bundle;->CREATOR:Landroid/os/Parcelable$Creator;
invoke-interface {v4, p2}, Landroid/os/Parcelable$Creator;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
move-result-object v2
check-cast v2, Landroid/os/Bundle;
.local v2, "_arg2":Landroid/os/Bundle;
:goto_7
invoke-virtual {p0, v0, v1, v2}, Lcom/android/internal/statusbar/IStatusBar$Stub;->setStatus(ILjava/lang/String;Landroid/os/Bundle;)V
goto/16 :goto_0
.end local v2 # "_arg2":Landroid/os/Bundle;
:cond_6
const/4 v2, 0x0
.restart local v2 # "_arg2":Landroid/os/Bundle;
goto :goto_7
修改后的代码:
.end local v0 # "_arg0":I
.end local v1 # "_arg1":I
:sswitch_stk #对比原厂的代码发现要修改的地方,修改后回编译
const-string v4, "com.android.internal.statusbar.IStatusBar"
invoke-virtual {p2, v4}, Landroid/os/Parcel;->enforceInterface(Ljava/lang/String;)V
invoke-virtual {p2}, Landroid/os/Parcel;->readInt()I
move-result v0
.restart local v0 # "_arg0":I
invoke-virtual {p2}, Landroid/os/Parcel;->readString()Ljava/lang/String;
move-result-object v1
.local v1, "_arg1":Ljava/lang/String;
invoke-virtual {p2}, Landroid/os/Parcel;->readInt()I
move-result v4
if-eqz v4, :cond_6
sget-object v4, Landroid/os/Bundle;->CREATOR:Landroid/os/Parcelable$Creator;
invoke-interface {v4, p2}, Landroid/os/Parcelable$Creator;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
move-result-object v2
check-cast v2, Landroid/os/Bundle;
.local v2, "_arg2":Landroid/os/Bundle;
:goto_stk #仍然出现[错误行数的上一行,4] There is already a label with that name.修改此处后回编译
invoke-virtual {p0, v0, v1, v2}, Lcom/android/internal/statusbar/IStatusBar$Stub;->setStatus(ILjava/lang/String;Landroid/os/Bundle;)V
goto/16 :goto_0
.end local v2 # "_arg2":Landroid/os/Bundle;
:cond_stk #仍然出现[错误行数的上一行,4] There is already a label with that name.修改此处后回编译
const/4 v2, 0x0
.restart local v2 # "_arg2":Landroid/os/Bundle;
goto :goto_7