我得到了输出:
错误:空
从命令(在命令行执行):
java -jar pepk.jar --keystore = my.keystore --alias = x --output = my.output --encryptionkey = 1243
有人知道为什么或如何解决吗?
“ my.keystore”文件存在并且是密钥库。别名正确,并且“ my.output”文件不存在。我在上面的示例中更改了cryptokey的值,但是无论我使用什么值,我总是得到相同的输出。
我尝试双引号密钥库和输出值,并提供(带引号)密钥库文件和输出文件的完整路径。错误输出仍然相同。正在执行jar,因为如果缺少某些内容,我会显示使用帮助。我还尝试过在其他目录中运行该命令,并确保输出目录中的权限正确。
我正在使用Java版本:
在Windows 10上java版本“ 9” Java(TM)SE运行时环境(内部版本9 + 181) Java HotSpot(TM)64位服务器VM(内部版本9 + 181,混合模式)
(我尝试使用/和路径)。 pepk.jar是在我的应用从Play商店的“应用签名”页面上发布此问题的当天下载的。
按照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仔细检查了密钥库,并且其中包含私钥。
答案 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)
相应的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
传奇:
*.keystore
或*.jks
类型的文件,也可以没有扩展名。类似于 C:\ Android \ mykeystore 或 C:\ Android \ mykeystore.keystore 。.pem
的输出文件的路径,类似于 C:\ Android \ private_key.pem 示例:
java -jar "C:\Users\YourName\Downloads\pepk.jar"
--keystore="C:\Android\mykeystore" --alias=myalias --output="C:\Android\private_key.pem" --encryptionkey=eb10fe8f7c7c9df715022017b00c6471f8ba8170b13049a11e6c09ffe3056a104a3bbe4ac5a955f4ba4fe93fc8cef27558a3eb9d2a529a2092761fb833b656cd48b9de6a
在终端中输入命令后,您需要提供以下内容:
如果一切顺利,您现在将在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,它就像一种魅力。