【问题标题】:How to identify install application is using which certificate in android如何识别安装应用程序正在使用android中的哪个证书
【发布时间】:2020-10-30 10:33:28
【问题描述】:

我在向客户推出后更改了发布 apk 签名证书的情况。现在我想使用不同的证书发送更新,但由于已安装的应用程序是使用以前的证书签名的,因此由于签名不匹配,自动更新无法正常工作。

我现在计划使用另一个应用程序先卸载已安装的应用程序,然后使用此帮助应用程序再次下载并安装它。问题是我不想使用 versionCode 等来确定应该卸载哪个版本的旧应用程序,然后再重新安装它。 是否可以找到任何包的证书信息并跟踪它是用旧证书签名的,所以需要先删除等?

假设使用此签名对旧应用进行了签名:

release {
            storeFile file("../myapp-release.keystore")
            storePassword "12345"
            keyAlias "track-release"
            keyPassword "12345"
        }

现在目标应用正在使用此签名来构建发布 apk:

release_new_devices {
            storeFile file("../myapp-release.keystore")
            storePassword "12345"
            keyAlias "track2-release"
            keyPassword "12345"
        }

是否可以找到这个已安装应用的 keyAlias 并且可以识别它?

【问题讨论】:

    标签: android apk android-install-apk


    【解决方案1】:

    我找到了一种以这种方式比较签名的方法。首先,需要使用以下命令从旧 apk 中获取 SHA1 值:

    keytool -printcert -jarfile myapp.apk
    

    现在,从代码中使用以下方法来比较签名。

      private static final String APP_SIGNATURE = "12fcR123+k8Yl0V3Ussd2CBpgT43=";
    
                PackageInfo packageInfo = mContext.getPackageManager().getPackageInfo(
                        Your_PACKAGE_NAME, PackageManager.GET_SIGNATURES);
                //note sample just checks the first signature
                for (Signature signature : packageInfo.signatures) {
                    // SHA1 the signature
                    String sha1 = getSHA1(signature.toByteArray());
                    // check is matches hardcoded value
                    boolean isMatch = APP_SIGNATURE.equals(sha1);
    
                    Log.i(TAG, "SIGnature: " + isMatch +" of sha1: "+sha1);
                }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-21
      • 2019-03-19
      • 2012-04-06
      • 2011-12-27
      • 2021-12-15
      • 2012-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多