1. ホーム
  2. Android development

APKのインストール: 失敗 [INSTALL_PARSE_FAILED_NO_CERTIFICATES]

2022-02-19 21:55:32

Apkに署名した後、インストールで以下のエラーが発生します。失敗 [INSTALL_PARSE_FAILED_NO_CERTIFICATES] (インストールに失敗しました。

googleとBaiduで調べた結果、JDK8の署名には以下の2つのパラメータが必要であることがわかりました。

-digestalg SHA1 -sigalg MD5withRSA



フルシグネチャーのコマンドは以下の通りです。

jarsigner -keystore myKey.keystore -storepass hapk_123 -signedjar MyTest.apk MyTest-unsigned.apk myKey.keystore -digestalg SHA1 -sigalg MD5withRSA -tsa http://timestamp.digicert.com。



tsaパラメータが設定されていない場合、以下の警告が表示されます。

警告 



tsa または -tsacert が提供されない場合、この jar にはタイムスタンプがありません。タイムスタンプがない場合、署名者の証明書の有効期限 (2070-05-29) 以降、あるいはそれ以降の失効日以降は、 ユーザーがこの jar を検証できなくなる可能性があります。











3 つのパラメータ digestalg、sigalg、tsa を設定せずに、Java 環境変数を jdk6 に切り替えたところ、すべてが OK となり、実行されたコマンドは次のようになりました。

jarsigner -keystore myKey.keystore -storepass hapk_123 -signedjar MyTest.apk MyTest-unsigned.apk myKey.keystore





<スパン PS:改善以来、いくつかの投稿は、jdk7は、上記のjdk8が表示されると同じ問題を持っているので、個人的にテストされていません。







PS2、jarsignerの各パラメータのパースについて補足。

$jarsigner -h



使用法:jarsigner [オプション] jarファイルのエイリアス(鍵のエイリアス)



       jarsigner -verify [オプション] jarファイル



[キーストア <url>] キーストアの場所

[--storepass <passphrase>] 鍵ストアの整合性を保つためのパスフレーズ



[--storetype <type>] 鍵屋のタイプ



[keypass <passphrase>] 秘密鍵のパスフレーズ(異なる場合)



[-sigfile <file>] .SF/.DSAファイル名



[-signedjar <file>] 署名済みJARファイル名



[-digestalg <algorithm>] サマリーアルゴリズム名



[-sigalg <algorithm>] 署名アルゴリズムの名前



[Verify] 署名された JAR ファイルを検証します。



[verbose] 署名・検証時に詳細を出力する。



[certs] 検証時に詳細を出力し、証明書を表示する。



[tsa <url>] タイムスタンプ機関の場所



[タイムスタンプ局の公開鍵証明書。



[altsigner <class>] 代替署名機構のクラス名



[代替署名機構の設置場所。



[-internalsf] 署名ブロックに .SF ファイルを含める。



[sectionsonly] リスト全体のハッシュをカウントしない。



[保護されている認証パスがあります。



[providerName <name>] プロバイダ名



[-providerClass <class> 暗号化サービスプロバイダの名前



  [-providerArg <arguments>]] ... メインクラスファイルとコンストラクタの引数