我有一个已签名的应用程序和几个密钥库文件.我想更新应用程序,所以我需要找出使用了哪个键.

我如何将最初用来签署我的应用程序的密钥库与我机器上的各种密钥库进行匹配?

推荐答案

首先,解压APK并提取文件/META-INF/ANDROID\ux.RSA(该文件也可以是CERT.RSA,但应该只有一个.RSA文件).

然后发出以下命令:

keytool -printcert -file ANDROID_.RSA

您将获得如下证书 fingerprint :

     MD5:  B3:4F:BE:07:AA:78:24:DC:CA:92:36:FF:AE:8C:17:DB
     SHA1: 16:59:E7:E3:0C:AA:7A:0D:F2:0D:05:20:12:A8:85:0B:32:C5:4F:68
     Signature algorithm name: SHA1withRSA

然后再次使用keytool打印出签名密钥库的所有别名:

keytool -list -keystore my-signing-key.keystore

您将获得别名及其证书 fingerprint 的列表:

android_key, Jan 23, 2010, PrivateKeyEntry,
Certificate fingerprint (MD5): B3:4F:BE:07:AA:78:24:DC:CA:92:36:FF:AE:8C:17:DB

瞧!我们现在可以确定apk已经用这个密钥库和别名"android_key"进行了签名.

Keytool是Java的一部分,因此请确保路径中包含Java安装目录.

Android相关问答推荐

Android 14上的慢速意图广播交付

不能在LazyGrid-Jetpack Compose中使用填充最大宽度或填充父项最大宽度

DocumentFile.canWrite()、DocumentFile.Existes()-使用本地内置手机存储(而不是云)时性能较差(占用太多CPU时间)

使用Jetpack Compose创建特定于电视的布局

我们可以使用KSP读取类中变量的值吗?

有没有办法迭代类型安全的项目访问器?

当 Jetpack Compose 中的第一个文本很长时,将省略号添加到第一个文本

具有管理员权限的 Kotlin 中的多用户系统

如何在一个活动中预加载图像然后在另一个活动中加载它们?

用作输入参数的 Lambda 函数导致重组

Jetpack Compose UI - 在 AlertDialog 中单击时按钮宽度会发生变化

react 从输入中找到路径'lib/arm64-v8a/libfbjni.so'的本机2个文件

Jetpack Compose Material3 禁用 ListItem

如何将设备屏幕位置转换为发送事件位置?

Kotlin 调用带参数的函数 Any is xxx ||任何 yyy 都不起作用

jetpack compose 中的可点击指示是什么?

如何在不使用 NestedScrollView 的情况下使用带有 CollapsingToolbar 的 ViewPager?

未解决的参考:getIntentSender / try 在 Jetpack Compose 中获取电话号码时

多个项目 react-native android 构建错误

在android上调整位图大小的最节省内存的方法?