今天在反编译研究个apk的时候在回编译的时候提示如下错误:
一: All register args must fit in 4 bits
提示出错的行数的代码是:
<pre name="code" class="java"> invoke-virtual {v0,p0, v1}, Lcom/Jt/ST/uti/JManager;->startService(Landroid/content/Context;I)V
在http://stackoverflow.com/questions/18446954/smaliall-register-args-must-fit-in-4-bits-error这里找到了解决方案。
原因是超出了寄存器的允许范围。只允许使用v0-v15. 知道了出错的原因,那么修改起来就好办了,只需要把超出的寄存器move下就可以了,在该代码前面添加
move-object/from16 v2, p0
然后该句修改为:
invoke-virtual {v0,v2, v1}, Lcom/Jt/ST/uti/JManager;->startService(Landroid/content/Context;I)V
就ok了
二:Failure [INSTALL_FAILED_INVALID_INSTALL_LOCATION]
在使用adb install 向手机安装软件时提示的错误,原因是签名错了,签名使用的是系统签名,改为其他的就可以了。
系统签名命令:
java -jar signapk.jar platform.x509.pem platform.pk8 d.apk dd.apk
普通签名的命令:
java -jar signapk.jar testkey.x509.pem testkey.pk8 d.apk dd.apk