我得到了这个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")
    

    10-04 23:01
    查看更多