亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何獲得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 關注
  • 868 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號