Моя ситуация такова, что у меня есть предустановленный apk, который использует неправильное хранилище ключей. Так что прямая установка даст сбой из-за несогласованности подписи. Сначала мне нужно проверить подпись, чтобы убедиться, что ее можно установить без проблем.
Вот мое решение .
Как говорит этот код , вы можете получить подпись с установленного apk.
подробности:
Signature sig = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES).signatures[0];
Во-вторых: получить хэш-код releaseApk для сравнения. В моем случае я скачал этот apk со своего сервера и поместил в sd_card.
Signature releaseSig = context.getPackageManager().getPackageArchiveInfo("/mnt/sdcard/myReleaseApk.apk", PackageManager.GET_SIGNATURES).signatures[0];
Наконец, сравните хэш-код.
return sig.hashCode() == releaseSig.hashCode;
Я пробовал код выше, он работает просто отлично. Если хэш-код отличается, вам нужно просто удалить старый apk или если это системное приложение и устройство рутировано, вы можете просто использовать среду выполнения, чтобы удалить его , а затем установить новая подпись apk.