如何在Windows和macOS上解决'keytool' is not recognized as an internal or external command

1,141 阅读4分钟

Keytool是一个免费的命令行工具,在你安装Java时被添加到系统中。

如果你想建立一个可以在Play Store上发布的Android APK二进制文件,你需要使用keytool为你的签名证书生成SHA-1指纹

在为你的Android(或Flutter)应用程序配置Firebase SDK时,这是一个必要的步骤。

官方文档中的这一页解释了如何使用keytool,但没有解释如何安装它

所以如果你之前被这个问题卡住了,这篇文章解释了所有需要的步骤。

准备好了吗?

用keytool获取SHA-1证书指纹

这是如何在Windows上使用keytool获取调试SHA-1证书指纹的方法。

keytool -list -v -alias androiddebugkey -keystore %USERPROFILE%\.android\debug.keystore

这也是在macOS/Linux上的对应方法。

keytool -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore

然而,上面的命令只有在你的系统已经安装了keytool,并且它包含在你的系统PATH中时才会起作用。

keytool "不被认为是内部或外部命令、可操作程序或批处理文件。

如果不是这种情况,你会看到这样的信息(在Windows上)。

keytool "没有被识别为内部或外部的命令、可操作程序或批处理文件。

让我们来解决这个问题。

在你的系统上安装keytool

Keytool是作为Java运行时的一部分而包含的。所以通过安装Java,你的系统中也会有keytool。

要安装 Java,请访问JAVA SE 下载页面

然后,选择JDK下载链接

这将带你进入一个名为 "Java SE开发工具包15下载 "的页面。

滚动到底部,你会发现Linux、macOS和Windows的下载链接。

Java SE的下载链接

下载正确的安装程序(Windows上为jdk-15.0.1_windows-x64_bin.exe ,macOS上为jdk-15.0.1_osx-x64_bin.dmg )。然后按照你的系统的安装步骤进行安装,并记下安装的位置(例如:Windows上的C:\Program Files\Java\jdk-15.0.1\ )。

恭喜你,Java SDK现在已经安装在你的系统上了。

将keytool文件夹添加到你的系统PATH中(在Windows中)。

为了从命令行中运行keytool,你需要把它添加到你的系统PATH中。

这一步只在Windows上需要,因为keytool会自动安装在macOS/Linux的/usr/bin

在搜索框中,输入path ,然后打开编辑系统环境变量(控制面板)

这将打开 "系统属性 "对话框的高级选项卡。

从这里,选择环境变量......,打开这个对话框。

你会看到,用户变量系统变量都有一个路径变量。你选择哪一个其实并不重要。在这个例子中,我们将编辑用户变量

下一个对话框显示了当前用户的环境变量。选择 "新建",然后添加一个新行,指向你的jdk安装文件夹,结尾处有一个尾巴\bin (例如:C:\Program Files\Java\jdk-15.0.1\bin )。

然后按OK键,关闭所有的对话框,然后打开一个新的命令提示符。

尝试运行keytool 。这一次你应该得到这样的输出。

C:\Users\salta>keytool
Key and Certificate Management Tool

Commands:

 -certreq            Generates a certificate request
 -changealias        Changes an entry's alias
 -delete             Deletes an entry
 -exportcert         Exports certificate
 -genkeypair         Generates a key pair
 -genseckey          Generates a secret key
 -gencert            Generates certificate from a certificate request
 -importcert         Imports a certificate or a certificate chain
 -importpass         Imports a password
 -importkeystore     Imports one or all entries from another keystore
 -keypasswd          Changes the key password of an entry
 -list               Lists entries in a keystore
 -printcert          Prints the content of a certificate
 -printcertreq       Prints the content of a certificate request
 -printcrl           Prints the content of a CRL file
 -storepasswd        Changes the store password of a keystore
 -showinfo           Displays security-related information

Use "keytool -?, -h, or --help" for this help message
Use "keytool -command_name --help" for usage of command_name.
Use the -conf <url> option to specify a pre-configured options file.

这证实了keytool已经安装并配置在你的PATH中。

使用keytool生成te SHA-1

现在你已经准备好生成你的SHA-1了。

keytool -list -v -alias androiddebugkey -keystore %USERPROFILE%\.android\debug.keystore

如果你在给定的位置已经有一个钥匙库%USERPROFILE%\.android\debug.keystore ),这将会起作用。如果没有,你会得到这个错误。

keytool error: java.lang.Exception: Keystore file does not exist: C:\Users\salta\.android\debug.keystore
java.lang.Exception: Keystore file does not exist: C:\Users\salta\.android\debug.keystore
        at java.base/sun.security.tools.keytool.Main.doCommands(Main.java:916)
        at java.base/sun.security.tools.keytool.Main.run(Main.java:422)
        at java.base/sun.security.tools.keytool.Main.main(Main.java:415)

如果你没有钥匙库,你需要用Android Studio生成一个。这份关于Android上的应用签名的文件包括你需要的信息。

总结

呵!让keytool在Windows上运行需要几个步骤,但我们最终还是做到了。

编码愉快