14

我得到输出:

错误:空

从命令(在命令行执行):

java -jar pepk.jar --keystore=my.keystore --alias=x --output=my.output --encryptionkey=1243

任何人都知道为什么或如何解决它?

“my.keystore”文件存在并且是一个密钥库。别名正确且“my.output”文件不存在。我已经更改了上面示例中的加密密钥值,但无论我使用什么值,我总是得到相同的输出。

我尝试双引号引用密钥库和输出值,并提供(带引号)密钥库文件和输出文件的完整路径。仍然是相同的错误输出。jar 正在执行,因为如果缺少某些内容,我会显示使用帮助。我还尝试在不同的目录中运行该命令,并确保输出目录中的权限是正确的。

我正在使用java版本:

java version "9" Java(TM) SE Runtime Environment (build 9+181) Java HotSpot(TM) 64-Bit Server VM (build 9+181, 混合模式)

在 Windows 10 上。(我尝试过使用 / 和 的路径)。pepk.jar 是在同一天下载的,这个问题是从我的应用程序的 Play 商店的应用程序签名页面发布的。

更新,截至 2018 年 9 月 17 日下载了新版本:

按照 Pierre 的建议下载新版本的 pepk.jar 后,现在的输出是:

Error: Unable to export or encrypt the private key
java.lang.NullPointerException
at com.google.wireless.android.vending.developer.signing.tools.extern.export.KeystoreHelper.loadKeystore(KeystoreHelper.java:45)
at com.google.wireless.android.vending.developer.signing.tools.extern.export.KeystoreHelper.getPrivateKey(KeystoreHelper.java:38)
at com.google.wireless.android.vending.developer.signing.tools.extern.export.ExportEncryptedPrivateKeyTool.run(ExportEncryptedPrivateKeyTool.java:114)
at com.google.wireless.android.vending.developer.signing.tools.extern.export.ExportEncryptedPrivateKeyTool.main(ExportEncryptedPrivateKeyTool.java:79)

我已经通过使用 keytool -list -v -keystore 仔细检查了密钥库,它包含一个私钥。

4

6 回答 6

24

您至少有 Java 版本 8(JDK 1.8) 来运行语法:

java -jar PATH_TO_PEPK --keystore=PATH_TO_KEYSTORE --alias=ALIAS_YOU_USE_TO_SIGN_APK --output=PATH_TO_OUTPUT_FILE --encryptionkey=GOOGLE_ENCRYPTION_KEY

传奇:

  • PATH_TO_PEPK = 您下载的 pepk.jar 的路径,对于 Windows 用户,可能类似于C:\Users\YourName\Downloads\pepk.jar 。
  • PATH_TO_KEYSTORE = 用于签署发布 APK 的密钥库的路径。可以是文件类型*.keystore*.jks没有扩展名。像C:\Android\mykeystoreC:\Android\mykeystore.keystore 之类的东西。
  • ALIAS_YOU_USE_TO_SIGN_APK = 您用于签署发行版 APK 的别名。
  • PATH_TO_OUTPUT_FILE.pem = 带有扩展名的输出文件的路径,例如C:\Android\private_key.pem
  • GOOGLE_ENCRYPTION_KEY = 此加密密钥应始终相同。您可以在 App Signing 页面中找到它,复制并粘贴它。应该是这种形式:eb10fe8f7c7c9df715022017b00c6471f8ba8170b13049a11e6c09ffe3056a104a3bbe4ac5a955f4ba4fe93fc8cef27558a3eb9d2a529a2092761fb833b656cd48bde

例子:

java -jar "C:\Users\YourName\Downloads\pepk.jar"
--keystore="C:\Android\mykeystore" --alias=myalias --output="C:\Android\private_key.pem" --encryptionkey=eb10fe8f7c7c9df715022017b00c6471f8ba8170b13049a11e6c09ffe3056a104a3bbe4ac5a955f4ba4fe93fc8cef27558a3eb9d2a529a2092761fb833b656cd48b9de6a

在终端中输入命令后,您将需要提供以下内容:

  1. 密钥库密码
  2. 别名密码

如果一切顺利,您现在将在PATH_TO_OUTPUT_FILE文件夹中有一个名为private_key.pem.

更多资源:

于 2018-09-13T09:40:37.627 回答
11

我终于通过使用标准的 Windows (10) 命令提示符,即“cmd”解决了这个问题。似乎 System.getConsole 正在为 cmd 返回一个非空值。

我无法找到有关 mingw64(我通常在 Windows 上使用的命令提示符)发生的情况以及未设置 System.getConsole 的原因的任何信息。

于 2018-10-15T00:09:36.823 回答
5

我非常感谢@droidBomb 在上一个答案中给出的回复。

xamarin Android 的解决方案略有不同。需要的标志

--keystore 包含要导出的私钥的密钥库路径(例如:C:\Users\YourName\Downloads\abc.keystore)"

--alias 密钥库中私钥的别名(例如:上传)

--encryptionkey 用于加密私钥的公钥。这将是公钥的十六进制编码字节。The public key is a 4-byte identity followed by a 64-byte P256 point.(Eg: eb10fe8f7c7c9df715022017b00c6471f8ba8170b13049a11e6c09ffe3056a104a3bbe4ac5a955f4ba4fe93fc8cef27558a3eb9d2a529a2092761fb833b656cd48b9de6a)

--output 用于输出加密私钥的文件。(例如:C:\Users\YourName\Downloads\private_key.pem)

  1. 打开命令提示符
  2. 从您的应用程序的 Google 控制台下载 pepk 文件。
  3. 准备如下命令
  4. java -jar "C:\Users\YourName\Downloads\pepk.jar" --keystore="C:\Users\YourName\Downloads\upload.keystore" --alias="upload" --encryptionkey=eb10fe8f7c7c9df715022017b00c6471f8ba8170b13049a11e6c09ffe3056a104a3bbe4ac5a955f4ba4fe93fc8cef27558a3eb9d2a529a2092761fb833b656cd48b9de6a --output ="C:\Users\YourName\Downloads\private_key.pem"

将在输出路径生成相应的 pem 文件

于 2020-04-16T14:18:53.867 回答
4

使用 gitbash / mingw64 在 Windows 10 上尝试时遇到了同样的问题。使用 Powershell,它就像一个魅力。

于 2018-12-17T06:21:19.977 回答
4

如果您正在使用gitbash,则必须在命令前面加上

winpty

因为该PEPK命令需要控制台输入。(或通过标准运行windows CMD prompt

于 2020-07-30T08:34:07.293 回答
1

密钥库和密钥的密码会在命令行中提示。

问题似乎是您的 Java 环境没有可用的控制台,即System.console()返回 null。

如果您能够让我知道是什么导致您的 Java 环境这样做,那么我们可能会尝试为您的用例找到解决方案。

于 2018-09-17T09:50:13.840 回答