简体   繁体   English

'签名:数组<(out)签名。>!' 已弃用。 在 Java 中已弃用

[英]'signatures: Array<(out) Signature!>!' is deprecated. Deprecated in Java

I got this printHashKey function and it works well.我得到了这个printHashKey function 并且效果很好。

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)
    }
}

but there's a warning sign:但有一个警告标志:

  • GET_SIGNATURES: Int is deprecated. GET_SIGNATURES: Int Deprecated in Java.在 Java 中已弃用。
  • signatures: Array<(out) Signature!>! is deprecated.已弃用。 Deprecated in Java.在 Java 中Deprecated

So I changed GET_SIGNATURES to GET_SIGNING_CERTIFICATES所以我将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)
    }
}

And I still got this warning.我仍然收到这个警告。

  • signatures: Array<(out) Signature!>! is deprecated.已弃用。 Deprecated in Java.在 Java 中Deprecated

I know I can just ignore this warning, but I want to fix it.我知道我可以忽略这个警告,但我想修复它。 What can I use instead of signatures ?我可以用什么代替signatures

From Android P you should use signingInfo instead从 Android P 你应该使用signingInfo代替

Full code:完整代码:

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
    }
}

And afters this you also could add this lines above your function to suppress warnings:在此之后,您还可以在 function 上方添加以下行以抑制警告:

@Suppress("DEPRECATION")
@SuppressLint("PackageManagerGetSignatures")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 不推荐使用“mainClassName 的 setter: String”。 在 Java 中已弃用 - 'setter for mainClassName: String' is deprecated. Deprecated in Java 错误警告:PackageInfo 中的 [deprecation] 签名已被弃用 (Signature signature:info.signatures) - Error warning: [deprecation] signatures in PackageInfo has been deprecated for(Signature signature:info.signatures) Java中的OpenCv:不推荐使用DescriptorExtractor。我该用什么呢? - OpenCv in Java: DescriptorExtractor is deprecated. What do I use instead? 不推荐使用AntPathRequestMatcher。 什么是替换方法? - AntPathRequestMatcher is deprecated. What is the replacment method? Android - onRequestPermissionsResult() 已弃用。 有没有其他选择? - Android - onRequestPermissionsResult() is deprecated. Are there any alternatives? 不推荐使用 java.util.Date 类的参数化构造函数。 什么是替代方案? - The parameterized constructors of the java.util.Date class are deprecated. What is the alternative? Java - Date构造函数接受日期字符串,但不建议使用。 试过替代品,但没有运气 - Java - Date constructor accepts a Date String, But deprecated. Tried alternatives, but no luck javascript弃用了所需功能。 我们如何使用Internet Explorer驱动程序Selenium中启用的Java脚本 - Desired capabilities isjavascriptenabled deprecated. How can we use the java script enabled in Internet explorer driver selenium 不推荐使用GSON。 我们可以使用哪一个来对Java对象与JSON进行序列化和反序列化? - GSON is deprecated. Which one we can use to serialize and deserialize Java objects to and from JSON? 不推荐使用 ActiveNetworkInfo 的 Getter,在 Java 中不推荐使用 - Getter for activeNetworkInfo is deprecated, Deprecated in Java
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM