一般我们在自定义修改apk时,难免会对smali代码进行增减删改,再回编的时候可能会遇到如下错误:
Invalid register: vx. Must be between v0 and v15, inclusive.
shakaApktool的中文提示为:
无效寄存器: v20. 必须在 v0 到 v15(含) 之间
其中vx>15,导致回编译错误。
错误原因可能有以下几种情况:
1.引用了不存在的方法参数。
参数个数很容易识别,但是一定要注意传入的方法参数是从p0,还是从p1开始的。根据smali规则,static方法参数从p0开始计数。
所以如果我们引用了不存在的参数,在回编时就会报RT错误。比如一个传入4个参数的static方法,我们修改时却引用到了p4,就会报错。
实例:http://www.52pojie.cn/thread-421963-1-1.html