我得到了这个printHashKey
函数,它运行良好。
fun printHashKey() {
try {
val info : PackageInfo = packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES)
for (signature in info.signatures) {
val md: MessageDigest = MessageDigest.getInstance("SHA")
md.update(signature.toByteArray())
val hashKey = String(Base64.encode(md.digest(), 0))
Log.i("TAG", "printHashKey() Hash Key: $hashKey")
}
} catch (e: NoSuchAlgorithmException) {
Log.e("TAG", "printHashKey()", e)
} catch (e: Exception) {
Log.e("TAG", "printHashKey()", e)
}
}
但有一个警告标志:
GET_SIGNATURES: Int
已弃用。在Java中已弃用。 signatures: Array<(out) Signature!>!
已弃用。 Java中的Deprecated
。 所以我将
GET_SIGNATURES
更改为GET_SIGNING_CERTIFICATES
fun printHashKey() {
try {
val info : PackageInfo = packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNING_CERTIFICATES)
for (signature in info.signatures) {
val md: MessageDigest = MessageDigest.getInstance("SHA")
md.update(signature.toByteArray())
val hashKey = String(Base64.encode(md.digest(), 0))
Log.i("TAG", "printHashKey() Hash Key: $hashKey")
}
} catch (e: NoSuchAlgorithmException) {
Log.e("TAG", "printHashKey()", e)
} catch (e: Exception) {
Log.e("TAG", "printHashKey()", e)
}
}
而且我仍然收到此警告。
signatures: Array<(out) Signature!>!
已弃用。 Java中的Deprecated
。 我知道我可以忽略此警告,但我想修复它。
我可以使用什么代替
signatures
? 最佳答案
在Android P中,您应该改用signingInfo
完整代码:
val signatures = with(packageManager) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
getPackageInfo(packageName, PackageManager.GET_SIGNING_CERTIFICATES)
.signingInfo
.apkContentsSigners
} else {
getPackageInfo(packageName, PackageManager.GET_SIGNATURES)
.signatures
}
}
之后,您还可以在函数上方添加以下行以禁止显示警告:
@Suppress("DEPRECATION")
@SuppressLint("PackageManagerGetSignatures")