web-dev-qa-db-ja.com

コマンドラインでのPEPKアプリ署名ツールの実行エラー(Java -jar pepk.jar)

出力を取得しています:

エラー:null

コマンドから(コマンドラインで実行):

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

なぜ誰がそれを解決するのか、なぜそれを解決するか

「my.keystore」ファイルが存在し、これはキーストアです。エイリアスは正しく、「my.output」ファイルは存在しません。上記の例で暗号化キーの値を変更しましたが、どの値を使用しても、常に同じ出力が得られます。

キーストアと出力値を二重引用符で囲み、キーストアファイルと出力ファイルへの完全なパスを(引用符で)提供しました。それでも同じエラー出力。何かが足りない場合、使用方法のヘルプが表示されるため、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を使用して秘密鍵が含まれています。

9
Gary Bentley

構文を実行するには、少なくとも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へのパス、たとえばC:\ Users\YourName\Downloads\pepk.jar Windowsユーザーの場合。
  • 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=この暗号化キーは常に同じである必要があります。アプリの署名ページで見つけて、コピーして貼り付けてください。この形式にする必要があります:eb10fe8f7c7c9df715022017b00c6471f8ba8170b13049a11e6c09ffe3056a104a3bbe4ac5a955f4ba4fe93fc8cef27558a3eb9d2a529a2092761fb833b656cd48b9de6a

例:

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.というファイルができます。

その他のリソース:

9
droidBomb

私はようやく標準のWindows(10)コマンドプロンプト、つまり「cmd」を使用してこの問題を回避しました。 System.getConsoleがcmdに対してnull以外の値を返しているようです。

Mingw64で何が起こっているか(Windowsで通常使用するコマンドプロンプト)、およびSystem.getConsoleが設定されていない理由に関する情報を見つけることができませんでした。

6
Gary Bentley

Gitbash/mingw64を使用してWindows 10で試したときも同じ問題がありました。 Powershellを使用すると、魅力のように動作しました。

2
Martin Eckleben

キーストアのパスワードとキーは、コマンドラインで要求されます。

問題は、あなたのJava環境で使用可能なコンソールがない、つまりSystem.console()がnullを返すことです。

Java環境がこれを行う原因を教えていただければ、私たちはあなたのユースケースの解決策を見つけようとするかもしれません。

1
Pierre