a:背景

背景,之前在反编译一个apk,然后改包名,重新安装。可以在android 5.0 以下的系统安装,但却__不能__在 5.0 以上的系统安装。这个是什么原因呢?那么涉及到apk的安装的问题了,以下有几个可能导致apk不能安装的。



不能安装的原因:

a:包名一致,签名冲突。
我们在反编译apk的时候,通常会再次对apk签名和改签名,避免的apk的验证机制,因为android系统中,每个包名相当于一个用户,每个包名的apk都是个虚拟机。

b:provider 冲突。
我们在安装apk的时候,provider里面的__android:authorities__是唯一的。如果有相同的 __authorities__那么可能导致apk安装失败,然后看adb的log日志,会发现 provider 已经存在,apk无法安装。

c:这个在andorid 5.0 以后发现,自定义权限 签名冲突。
这个是因为在自定义权限的定义的时候,有些的签名定义的 protectionLevel__自定义权限的保护等级为__signature 那么就是这个权限只能是同一个签名的才能使用,如果签名不同,那么这个apk就不能安装。因为之前已经安装了不同签名的同一个自定义权限。 permission