apk签名冲突 与旧版不同解决办法 apk签名比对

来源:互联网 发布:淘宝举报假冒伪劣 编辑:程序博客网 时间:2024/05/22 04:53

最近刚接手一个应用,更新了一些内容后想在测试机器上进行调试,结果AndroidStudio提示

 

Installation failed since the device already has an application with the same package but a different signature.
In order to proceed, you have to uninstall the existing application.

WARNING: Uninstalling will remove the application data!

Do you want to uninstall the existing application?

意思很明显,就是说现在要安装apk的机器上已经有了一个相同包名的apk了,但是这个apk的签名和要安装的apk的签名不一致,要想安装必须卸载之前的那个。

要卸载之前的apk很容易,但是这样新的apk发布出去后用户就没法更新了,总不能要求用户先卸载在安装更新吧。

于是问题来了,要找到之前应用使用的签名文件,用同样的签名对apk再签名一次,但是手头有很多签名文件,挨个试效率太低了,于是想到直接把应用中已经安装好的apk的签名拿到,再跟本地的签名库去比对,来找到原始签名。

第一步拿到已经安装了的旧应用的apk 可以先用以下方法确定下该应用安装后在设备中的存放位置

连接adb后执行

Adb shell

Ls查看移动设备当前文件夹下文件

因为本应用是系统文件,apk安装后存放在/system/app目录下

Cd /system/app

如果是用户安装的应用,apk安装后存放在 /data/app目录下

进入到该目录 执行ls查看目录下的系统app,可以看到有很多.apk结尾的应用,找到要替换的那个应用,确定该应用的位置。

然后新开一个终端,(千万不要在设备的shell中执行)执行

Adb pull /system/app/XXX.apk /home/me/Desktop

将设备中/system/app/XXX.apk位置的apk复制到本机的/home/me/Desktop,

就能拿到之前安装的应用的apk了。

第二步,进行签名比对

将拿到的已经安装上的apk解压,在解压出的文件夹的META-INF文件夹下找到CERT.RSA,这里面包含了apk的签名信息,

在当前文件下下打开终端,执行

keytool -printcert –file ./CERT.RSA

可以看到原来安装的apk的签名信息与证书指纹了,要比对的就是这个指纹

然后进入到 本地的签名库,执行keytool  -v –list –keystore XXX.key将XXX替换成你的签名库的名字,执行,将会打印出库中所有的条目,当然也包括所有签名的指纹信息,将这个指纹与上一步得到的已经安装的apk的指纹比对,就知道之前使用哪个对应用进行签名的了。

1 0
原创粉丝点击