35

新的 Android Studio 允许我们保存密钥库密码以备后用。这些密码存储在我的计算机(OSX)上的什么位置,有没有办法检索保存的值?

在此处输入图像描述

编辑 我正在寻找别名密码,而不是密钥库密码

4

8 回答 8

42

您可以在 Android Studio 生成的 idea.log 文件中找到它:

搜索“Pandroid.injected.signing.key.password”可以看到密钥密码。

示例日志:

2015-11-13 10:22:48,844 [709463] 信息 - a.gradle.invoker.GradleInvoker - 构建命令行选项:[--按需配置,-Pandroid.injected.invoked.from.ide=true, -Pandroid.injected.signing.st ore.file=/Users/varun/Projects/myapp/mykey.jks,-Pandroid.injected.signing.store.password=mykeystorepassword,-Pandroid.injected.signing.key.alias=myalias , - Pandroid.injected.signing.key.password=mykeypassword , -Pandroid.injected.apk.location=/Users/varun/code/android/workspace/myapp, --init-script, /private/var/folders/vk /z504nlhd6v30p7zvtgjp5sjm0000gn/T/asLocalRepo0.gradle]

注意 1:在 OSX 上,idea.log 文件可以在 ~/Library/Logs/AndroidStudio2.0 找到

注2:如果在idea.log中没有找到密码,那么还要查看idea.log.1、idea.log.2等文件。

资源

于 2015-11-13T05:00:14.150 回答
38

在 macOS 上,最新版本的 Android Studio(在 3.2 上测试)将密钥库/密钥密码存储在 Keychain 中的以下项下:

  • org.jetbrains.android.exportSignedPackage.KeystoreStep$KeyStorePasswordRequestor
  • org.jetbrains.android.exportSignedPackage.KeystoreStep$KeyPasswordRequestor

前者存储密钥库本身的密码,后者存储密钥的密码。

您可以使用系统钥匙串访问应用程序访问它们。找到相应的条目并双击它。Account 字段应包含您的密钥库的路径或密钥库中密钥别名的路径,格式如下: KEY_STORE_PASSWORD__/Users/username/keystorenameKEY_STORE_PASSWORD__/Users/username/keystorename__alias

在请求时单击Show password并输入您的 macOS 密码。而已!

于 2018-12-12T16:04:10.403 回答
20

对于尝试在 Android Studio 和 Ubuntu 的较新版本上恢复密钥库密码的任何人,似乎大多数记录在案的从日志、gradle 等恢复密码的建议不再有效。Corneliu 出色的蛮力脚本非常棒 - 除非您选择了一个 16 字符的密码,其中没有字典单词,并且希望本月某个时候得到结果 :) 不再可以使用 Intellij security.xml 解决方案从 Android Studio 检索保存的密码或者,据我所知。

然而——经过一番挖掘,Android Studio 3.1 似乎使用了 Ubuntu 18.04 中的 OS 钥匙串,因此检索已保存的密钥库密码非常简单:

  1. 打开“密码和密钥”(使用超级密钥并搜索“密码”)
  2. 按“android”过滤结果
  3. 查看每个条目,它们将类似于 org.jetbrains.android...KeyPasswordRequestor,并依次打开每个条目
  4. 展开密码下拉菜单并选择“显示密码”,它将类似于:KEY_STORE_PASSWORD__/home/pathto/keystore/keystore-name.jks@mycoolpassword

找到您要查找的密钥库,@ 后面的位是您丢失的密码。希望能帮助那里的人!

于 2018-09-05T17:25:20.247 回答
14

Gradle 将它们存储在您的项目目录中的二进制文件中。您可以像这样(从项目目录)获取它们:

strings .gradle/GRADLE_VERSION/taskArtifacts/taskArtifacts.bin | grep storePassword -A1

(感谢https://stackoverflow.com/a/33624636/1982087提供 taskArtifacts.bin 指针)

于 2017-01-30T12:10:56.877 回答
9

从您签署 apk 之日起查找日志文件,您可以在那里找到您的密钥信息,如下所示。

-Pandroid.injected.signing.store.password=[store_password], 
-Pandroid.injected.signing.key.alias=[alias], 
-Pandroid.injected.signing.key.password=[key_password]

你可以在下面找到你的日志文件

C:\Users\username.AndroidStudio[versionNum]\system\log\

于 2017-03-19T19:16:28.730 回答
5

我有同样的问题!

它让我发疯,但我发现了一个可以拯救我的小脚本:https ://github.com/corneliudascalu/intellij-decrypt

我想它可以帮助你。好看

于 2014-06-04T10:22:39.560 回答
2

方法一:从 gradle build runtime 读取

第 1 步:将以下代码添加到 app/build.gradle

afterEvaluate {
    if (project.hasProperty("android.injected.signing.store.file")) {
        println "key store path: ${project.property("android.injected.signing.store.file")}"
    }
    if (project.hasProperty("android.injected.signing.store.password")) {
        println "key store password: ${project.property("android.injected.signing.store.password")}"
    }
    if (project.hasProperty("android.injected.signing.key.alias")) {
        println "key alias: ${project.property("android.injected.signing.key.alias")}"
    }
    if (project.hasProperty("android.injected.signing.key.password")) {
        println "key password: ${project.property("android.injected.signing.key.password")}"
    }
}

在此处输入图像描述

第 2 步:从菜单 Build -> Generate Signed apk/bundle 开始构建。

第三步:打开位于Android Studio底部的Build窗口,查找key store info

在此处输入图像描述

方法2:从Idea持久存储中读取

我写了一个Idea插件,命名为RestoreKeystorePlugin

步骤 1:从下载链接下载 jar 文件

第 2 步:将插件安装到 Android Studio

在此处输入图像描述 然后根据需要重新启动 Android Studio

第 3 步:选择工具 -> 恢复密钥库信息菜单,它将在对话框中显示密钥库信息

在此处输入图像描述 在此处输入图像描述

于 2021-12-11T06:46:29.253 回答
0

如果您在 Windows 上,获取纯文本密码的最简单方法是从signing-config.json项目目录中的文件中获取。

app\build\intermediates\signing_config\{release}\out\signing-config.json

该文件具有键mKeyPasswordmStorePassword. 它还包含“生成签名包或 APK”框架中的所有信息。

生成签名包或 APK

签名-config.json

于 2021-12-14T10:20:24.763 回答