diff --git a/app/src/main/java/com/gh/common/util/PackageUtils.java b/app/src/main/java/com/gh/common/util/PackageUtils.java index ab06983394..c3cc763cf1 100644 --- a/app/src/main/java/com/gh/common/util/PackageUtils.java +++ b/app/src/main/java/com/gh/common/util/PackageUtils.java @@ -263,9 +263,13 @@ public class PackageUtils { if (!TextUtils.isEmpty(v1SignaturePublicKey)) { return v1SignaturePublicKey.equals(installedPublicKey1) || v1SignaturePublicKey.equals(installedPublicKey2); } + String v1SignaturePublicKeyFromSystemApi = getV1SignatureFromFileBySystemApi(apkFilePath); + if (!TextUtils.isEmpty(v1SignaturePublicKeyFromSystemApi)) { + return v1SignaturePublicKeyFromSystemApi.equals(installedPublicKey1); + } return getV2SignatureFromFile(apkFilePath).equals(installedPublicKey1); - } catch (Exception e) { + } catch (Throwable e) { e.printStackTrace(); } return false; @@ -302,6 +306,13 @@ public class PackageUtils { } } + /** + * 用系统 API 获取 V1 签名 (最后一招了) (大文件可能会 ANR,但 ANR 一会可用的话比不能用好点!) + */ + private static String getV1SignatureFromFileBySystemApi(String apkFilePath) { + return parseSignature(HaloApp.getInstance().getPackageManager().getPackageArchiveInfo(apkFilePath, PackageManager.GET_SIGNATURES).signatures[0].toByteArray())[0]; + } + /** * 从 APK 文件中获取 V2 签名公钥 *