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上运行需要几个步骤,但我们最终还是做到了。
编码愉快