在命令行上运行PEPK应用程序签名工具时出错(java -jar pepk.jar)

时间:2018-09-11 06:23:18

标签: java android google-play-services android-app-signing

我得到了输出:

  

错误:空

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

  

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

有人知道为什么或如何解决吗?

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

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

我正在使用Java版本:

  

java版本“ 9”   Java(TM)SE运行时环境(内部版本9 + 181)   Java HotSpot(TM)64位服务器VM(内部版本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仔细检查了密钥库,并且其中包含私钥。

6 个答案:

答案 0 :(得分:4)

我真的很感谢@droidBomb在上一个答案中给出的答复。

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

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

-别名密钥库中私钥的别名(例如:upload)

-encryptionkey用于加密私钥的公共密钥。这会是 是公钥的十六进制编码字节。公钥 是4字节标识,后跟64字节P256点。(例如eb10fe8f7c7c9df715022017b00c6471f8ba8170b13049a11e6c09ffe3056a104a3bbe4ac5a955f4ba4fe93fc8cef27558a3eb9d2a529a2092761fbbb>

-输出要在其中输出加密的私钥的文件。(例如:C:\ Users \ YourName \ Downloads \ private_key.pem)

  1. 打开命令提示符
  2. 从您的应用程序的Google控制台下载pepk文件。
  3. 像下面一样准备命令
  4. Java的罐子 “C:\ Users \用户YOURNAME \下载\ pepk.jar” --keystore = “C:\ Users \用户YOURNAME \下载\ upload.keystore” --alias = “上传” --encryptionkey = eb10fe8f7c7c9df715022017b00c6471f8ba8170b13049a11e6c09ffe3056a104a3bbe4ac5a955f4ba4fe93fc8cef27558a3eb9d2a529a2092761fb833b656cd48b9de6a --output =“ C:\ Users \ YourName \ Downloads \ private_key.pem”

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

答案 1 :(得分:3)

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

winpty

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

答案 2 :(得分:2)

您具有至少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 。 li>
  • PATH_TO_KEYSTORE =用来签名发布APK的密钥库的路径。可以是*.keystore*.jks类型的文件,也可以没有扩展名。类似于 C:\ Android \ mykeystore C:\ Android \ mykeystore.keystore
  • ALIAS_YOU_USE_TO_SIGN_APK =用于签署发行版APK的别名的名称。
  • PATH_TO_OUTPUT_FILE =扩展名为.pem的输出文件的路径,类似于 C:\ Android \ private_key.pem
  • GOOGLE_ENCRYPTION_KEY =此加密密钥应始终相同。您可以在“应用程序签名”页面中找到它,然后将其复制并粘贴。应采用以下格式: eb10fe8f7c7c9df715022017b00c6471f8ba8170b13049a11e6c09ffe3056a104a3bbe4ac5a955f4ba4fe93fc8cef27558a3eb9d2a529a2092761fb833b656cd48b9li6>

示例:

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.的文件

更多资源:

答案 3 :(得分:1)

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

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

如果您可以让我知道是什么原因导致Java环境执行此操作,那么我们可能会尝试找到针对您的用例的解决方案。

答案 4 :(得分:1)

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

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

答案 5 :(得分:0)

在Windows 10上使用gitbash / mingw64尝试同样的问题。 借助Powershell,它就像一种魅力。