【发布时间】:2018-11-27 14:23:33
【问题描述】:
我通过比较 PackageInfo 的包名称和签名,在我的 android 应用程序中实现了对不兼容应用程序的验证。我通过以下方式获取有关已安装软件包的信息:
val packages = context.ctx.packageManager.getInstalledPackages(PackageManager.GET_META_DATA or PackageManager.GET_SIGNATURES)
然后只比较包名称和签名的字符串。我通过这个函数将 PackageInfo.signatures 转换为十六进制:
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?
【问题讨论】:
标签: android testing kotlin signature