如何识别安装应用程序正在使用 android 中的哪个证书
How to identify install application is using which certificate in android
我遇到过在向客户推出后更改发布 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 并可以识别它?
我找到了一种比较签名的方法。首先,需要使用以下命令从旧 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);
}
我遇到过在向客户推出后更改发布 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 并可以识别它?
我找到了一种比较签名的方法。首先,需要使用以下命令从旧 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);
}