如何获得APK签名?

如何获得APK签名?

是否有方法检索用于签署APK的密钥的签名?我用密钥库的钥匙签了我的APK。如何以编程方式检索它?



牛魔王的故事
浏览 841回答 3
3回答

函数式编程

包管理器将为您提供任何已安装包的签名证书。然后,您可以打印签名密钥的详细信息。final&nbsp;PackageManager&nbsp;packageManager&nbsp;=&nbsp;context.getPackageManager();final&nbsp;List<PackageInfo> &nbsp;packageList&nbsp;=&nbsp;packageManager.getInstalledPackages(PackageManager.GET_SIGNATURES);for&nbsp;(PackageInfo&nbsp;p&nbsp;:&nbsp;packageList)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;final&nbsp;String&nbsp;strName&nbsp;=&nbsp;p.applicationInfo.loadLabel(packageManager).toString(); &nbsp;&nbsp;&nbsp;&nbsp;final&nbsp;String&nbsp;strVendor&nbsp;=&nbsp;p.packageName; &nbsp;&nbsp;&nbsp;&nbsp;sb.append("<br>"&nbsp;+&nbsp;strName&nbsp;+&nbsp;"&nbsp;/&nbsp;"&nbsp;+&nbsp;strVendor&nbsp;+&nbsp;"<br>"); &nbsp;&nbsp;&nbsp;&nbsp;final&nbsp;Signature[]&nbsp;arrSignatures&nbsp;=&nbsp;p.signatures; &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(final&nbsp;Signature&nbsp;sig&nbsp;:&nbsp;arrSignatures)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Get&nbsp;the&nbsp;X.509&nbsp;certificate. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;final&nbsp;byte[]&nbsp;rawCert&nbsp;=&nbsp;sig.toByteArray(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStream&nbsp;certStream&nbsp;=&nbsp;new&nbsp;ByteArrayInputStream(rawCert); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CertificateFactory&nbsp;certFactory&nbsp;=&nbsp;CertificateFactory.getInstance("X509"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;X509Certificate&nbsp;x509Cert&nbsp;=&nbsp;(X509Certificate)&nbsp;certFactory.generateCertificate(certStream); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.append("Certificate&nbsp;subject:&nbsp;"&nbsp;+&nbsp;x509Cert.getSubjectDN()&nbsp;+&nbsp;"<br>"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.append("Certificate&nbsp;issuer:&nbsp;"&nbsp;+&nbsp;x509Cert.getIssuerDN()&nbsp;+&nbsp;"<br>"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.append("Certificate&nbsp;serial&nbsp;number:&nbsp;"&nbsp;+&nbsp;x509Cert.getSerialNumber()&nbsp;+&nbsp;"<br>"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.append("<br>"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch&nbsp;(CertificateException&nbsp;e)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;e.printStackTrace(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}}

温温酱

我的情况是,我有一个预先安装的apk,使用错误的密钥存储。因此,直接安装会因为签名不一致而导致失败,我需要先检查签名,以确保它能够顺利安装。这是我的解.如这段代码也就是说,您可以从已安装的apk中获得签名。详情:Signature&nbsp;sig&nbsp;=&nbsp;context.getPackageManager().getPackageInfo(context.getPackageName(),&nbsp;PackageManager.GET_SIGNATURES).signatures[0];其次:让ReleasaseApk hashCode进行比较。在我的例子中,我从服务器下载了这个apk,并将它放在sd_Card中。Signature&nbsp;releaseSig&nbsp;=&nbsp;context.getPackageManager().getPackageArchiveInfo("/mnt/sdcard/myReleaseApk.apk",&nbsp;PackageManager.GET_SIGNATURES). signatures[0];最后,比较hashCode。return&nbsp;sig.hashCode()&nbsp;==&nbsp;releaseSig.hashCode;我试过上面的代码,它运行得很好。如果hashCode不同,您应该卸载旧的apk,或者如果它是一个系统应用程序,并且设备是根的,您可以使用运行时移除,然后安装新的签名apk。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android