Android 我们如何检查尚未安装的APK的签名?

Android 我们如何检查尚未安装的APK的签名?,android,Android,鉴于我们有一个APK文件,可以在文件系统的Android设备上访问,我们如何从另一个Android应用程序: 确认APK文件未被篡改(其数字签名与其内容匹配) 获取公钥信息(特别是,与开发机器上发出的keytool-list-printcert-jarfile test.apk相同的SHA256散列) 请注意,目前尚未安装此APK,因此我们无法使用PackageManager来检索已安装应用程序的“签名”,也无法依靠Android为我们验证APK签名。我完全对此嗤之以鼻PackageMana

鉴于我们有一个APK文件,可以在文件系统的Android设备上访问,我们如何从另一个Android应用程序:

  • 确认APK文件未被篡改(其数字签名与其内容匹配)

  • 获取公钥信息(特别是,与开发机器上发出的
    keytool-list-printcert-jarfile test.apk
    相同的SHA256散列)


请注意,目前尚未安装此APK,因此我们无法使用PackageManager来检索已安装应用程序的“签名”,也无法依靠Android为我们验证APK签名。

我完全对此嗤之以鼻
PackageManager
有一个
getPackageArchiveInfo()
方法,从API级别1开始提供


因此,您调用它,将路径传递到APK,以及
PackageManager.GET_SIGNATURES
。如果返回
null
,则表明APK已被篡改,并且没有有效的数字签名。如果你得到一个
PackageInfo
,它会有“签名”,你可以用它进行比较。

这里的答案可能对你有帮助:@PrerakSola:这段代码是在开发人员机器上运行的。这不是为了在Android上运行,这正是这个问题的重点。不过,谢谢!您应该能够使用代码…fx:您可以像这样读取证书,然后将其与META-INF/CERT进行比较。SF@Selvin:那是有潜力的。我知道AOSP必须有做这类事情的代码,但我不确定在哪里。谢谢