在运行时为Android检索apk签名

Add*_*dev 8 android

有没有办法在运行时检索有关apk签名的信息?

例如,我有相同的应用程序签署了2个不同的签名:app-1.apk和app-2.apk,我希望能够在运行时区分两个apk.那可能吗?

我的目标是使用外部服务器并基于应用程序的版本代码和签名来实现许可系统.

cod*_*ter 11

您可以使用PackageManager访问apk签名.程序包管理器中定义的PackageInfo标志返回有关程序包中包含的签名的信息.

Signature[] sigs = context.getPackageManager().getPackageInfo(context.getPackageName(),PackageManager.GET_SIGNATURES).signatures;    
for (Signature sig : sigs)
{
    Log.i("App", "Signature : " + sig.hashCode());
}
Run Code Online (Sandbox Code Playgroud)

http://developer.android.com/reference/android/content/pm/PackageManager.html

  • 是的,除了API所谓的'签名'实际上是签名_certificate_.调用`toByteArray()`来获取原始证书.另外,`hashCode()`对你买不多,你需要使用`MessageDigest`来计算证书哈希值以进行比较. (3认同)
  • `hashCode()`不返回MD5校验和,它是在运行时标识对象的或多或少的随机值.使用`MessageDigest.getInstance("MD5").digest(sigs [0] .toByteArray())`.顺便说一句,确定'密钥库'是没有意义的,您需要识别签名密钥/证书. (2认同)