为了账号安全,请及时绑定邮箱和手机立即绑定

如何获得APK签名?

如何获得APK签名?

牛魔王的故事 2019-07-13 09:34:52
如何获得APK签名?是否有方法检索用于签署APK的密钥的签名?我用密钥库的钥匙签了我的APK。如何以编程方式检索它?
查看完整描述

3 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

包管理器将为您提供任何已安装包的签名证书。然后,您可以打印签名密钥的详细信息。

final PackageManager packageManager = context.getPackageManager();final List<PackageInfo>
 packageList = packageManager.getInstalledPackages(PackageManager.GET_SIGNATURES);for (PackageInfo p : packageList) {
    final String strName = p.applicationInfo.loadLabel(packageManager).toString();
    final String strVendor = p.packageName;

    sb.append("<br>" + strName + " / " + strVendor + "<br>");

    final Signature[] arrSignatures = p.signatures;
    for (final Signature sig : arrSignatures) {
        /*
        * Get the X.509 certificate.
        */
        final byte[] rawCert = sig.toByteArray();
        InputStream certStream = new ByteArrayInputStream(rawCert);

        try {
            CertificateFactory certFactory = CertificateFactory.getInstance("X509");
            X509Certificate x509Cert = (X509Certificate) certFactory.generateCertificate(certStream);

            sb.append("Certificate subject: " + x509Cert.getSubjectDN() + "<br>");
            sb.append("Certificate issuer: " + x509Cert.getIssuerDN() + "<br>");
            sb.append("Certificate serial number: " + x509Cert.getSerialNumber() + "<br>");
            sb.append("<br>");
        }
        catch (CertificateException e) {
            // e.printStackTrace();
        }
    }}


查看完整回答
反对 回复 2019-07-13
?
温温酱

TA贡献1752条经验 获得超4个赞

我的情况是,我有一个预先安装的apk,使用错误的密钥存储。因此,直接安装会因为签名不一致而导致失败,我需要先检查签名,以确保它能够顺利安装。

这是我的.

这段代码也就是说,您可以从已安装的apk中获得签名。

详情:

Signature sig = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES).signatures[0];

其次:让ReleasaseApk hashCode进行比较。在我的例子中,我从服务器下载了这个apk,并将它放在sd_Card中。

Signature releaseSig = context.getPackageManager().getPackageArchiveInfo("/mnt/sdcard/myReleaseApk.apk", PackageManager.GET_SIGNATURES).
signatures[0];

最后,比较hashCode。

return sig.hashCode() == releaseSig.hashCode;

我试过上面的代码,它运行得很好。如果hashCode不同,您应该卸载旧的apk,或者如果它是一个系统应用程序,并且设备是根的,您可以使用运行时移除,然后安装新的签名apk。


查看完整回答
反对 回复 2019-07-13
  • 3 回答
  • 0 关注
  • 840 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信