Я реализовал проверку для несовместимого приложения в своем приложении для Android, сравнив имя пакета и подпись PackageInfo.Я получаю информацию об установленных пакетах по:
val packages = context.ctx.packageManager.getInstalledPackages(PackageManager.GET_META_DATA or PackageManager.GET_SIGNATURES)
и после этого просто сравниваю строки имен пакетов и подписей.Я конвертирую PackageInfo.signatures в Hex с помощью этой функции:
fun bytesToHex(bytes: ByteArray): String {
val hexArray = charArrayOf('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F')
val hexChars = CharArray(bytes.size * 2)
var v: Int
for (j in bytes.indices) {
v = bytes[j].toInt() and 0xFF
hexChars[j * 2] = hexArray[v.ushr(4)]
hexChars[j * 2 + 1] = hexArray[v and 0x0F]
}
return String(hexChars)
}
, и она отлично работает.
Теперь я хочу реализовать несколько модульных тестов для этой функциональности и столкнулся с трудностями: как я могу издеватьсяPackageInfo.signatures?Как я могу перевести мою строку отпечатка пальца SHA1 в android.content.pm.Signature?