web-dev-qa-db-ja.com

INSTALL_PARSE_FAILED_NO_CERTIFICATESエラーとは何ですか?

androidmanifest.xmlファイルを編集して、default/main/startup(あなたが呼ぶものは何でも)アクティビティを変更しようとしました。 Android:nameプロパティを変更するだけでした。ただし、これはアプリ全体を完全に破壊しました。私がインストールしようとすると失敗し、読み取ります。

インストールエラー:INSTALL_PARSE_FAILED_NO_CERTIFICATES

以前の状態に戻そうとしたとき、それでも同じエラーが表示されていました...何をしましたか?

127
mtmurdock

AndroidManifest.xmlファイルで.apkを直接編集しましたか?もしそうなら、それは動作しません。

スマートフォンにインストールする場合は、Android .apkにすべて署名する必要があります (マーケットからインストールしていない場合でも)。開発ツールは、開発証明書で署名することでこれに対応しますが、.apkは引き続き署名されます。

これの1つの用途は、デバイスが.apkがインストールされたアプリケーションの有効なアップグレードであるかどうかを判断できることです。

したがって、アプリに変更を加えた場合は、.apkを再構築して、適切に署名されるようにする必要があります。

48
Dave Webb

間違った署名設定を使用している場合にも、このエラーが発生する可能性があることがわかりました。 here で説明したように、Android 7.0は新しい署名スキームV2を導入します。 V1スキームで行われるように、V2スキームはJARだけでなくAPK全体に署名します。 V2のみで署名し、7.0より前のターゲットにインストールしようとすると、JAR自体は署名されず、7.0より前PackageManagerV2 APK署名の存在を検出できません。

すべてのターゲットシステムと互換性を保つには、Android St​​udioの両方の署名バージョンボックスをチェックして、APKが両方のスキームで署名されていることを確認します署名付きAPKを生成しますここに示すようなダイアログ:

enter image description here

7.0のターゲットのみが予想される場合、V1署名を含める必要はありません。

154
Paul Ratazzi

これはJDKバージョンが原因であることがわかりました。

私は「ant」でこの問題を抱えていましたが、これはドキュメントに記載されているこの注意によるものでした:

http://developer.Android.com/guide/publishing/app-signing.html#signapp

注意:JDK 7では、デフォルトの署名アルゴリズムが変更されており、APKに署名するときに署名とダイジェストアルゴリズム(-sigalgおよび-digestalg)を指定する必要があります。

私はJDK 7を持っています。私のAntログでは、冗長に-vを使用しました。

$ ant -Dadb.device.arg=-d -v release install
[signjar] Executing 'C:\Program Files\Java\jdk1.7.0_03\bin\jarsigner.exe' with arguments:
[signjar] '-keystore'
[signjar] 'C:\cygwin\home\Chloe\pairfinder\release.keystore'
[signjar] '-signedjar'
[signjar] 'C:\cygwin\home\Chloe\pairfinder\bin\PairFinder-release-unaligned.apk'
[signjar] 'C:\cygwin\home\Chloe\pairfinder\bin\PairFinder-release-unsigned.apk'
[signjar] 'mykey'
 [exec]     pkg: /data/local/tmp/PairFinder-release.apk
 [exec] Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]

JARに手動で署名してzipalignしましたが、わずかに異なるエラーが発生しました。

$ "$Java_HOME"/bin/jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore release.keystore -signedjar bin/PairFinder-release-unaligned.apk bin/PairFinder-release-unsigned.apk mykey
$ zipalign -v -f 4 bin/PairFinder-release-unaligned.apk bin/PairFinder-release.apk
$ adb -d install -r bin/PairFinder-release.apk
        pkg: /data/local/tmp/PairFinder-release.apk
Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]
641 KB/s (52620 bytes in 0.080s)

ここで答えが見つかりました。

アンインストールせずにINSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATESを処理する方法

アンインストールするだけでうまくいきました!

$ adb -d uninstall com.kizbit.pairfinder
Success
$ adb -d install -r bin/PairFinder-release.apk
        pkg: /data/local/tmp/PairFinder-release.apk
Success
641 KB/s (52620 bytes in 0.080s)

ここで、署名時にこれらのオプションを使用するようにbuild.xmlを変更するだけです!

OK:C:\ Program Files\Java\Android-sdk\tools\ant\build.xml

            <signjar
                    sigalg="MD5withRSA"
                    digestalg="SHA1"
                    jar="${out.packaged.file}"
                    signedjar="${out.unaligned.file}"
                    keystore="${key.store}"
                    storepass="${key.store.password}"
                    alias="${key.alias}"
                    keypass="${key.alias.password}"
                    verbose="${verbose}" />
52
Chloe

ほとんどの場合、このエラーの解決策は非常に簡単です。

  1. APKをアンインストールします
  2. Androidプロジェクトをクリーンアップします
  3. Androidプロジェクトをビルドします
  4. APKをインストール/実行します
18
JanCor

keytoolでargsを使用して解決しました(私にとって)

-sigalg MD5withRSA -keyalg RSA -keysize 1024

jarsignerで使用する

-sigalg MD5withRSA -digestalg SHA1

で見つかったソリューション

Android AP​​Kの署名にはどのような種類の落とし穴がありますか?

16

これは見苦しいが高速なソリューションです。7ではなくJDK 6を使用します。

Chloeの答えを読んだ後、私はJDK 7をアンインストールし(現在は必要ありません)、JDK 6をインストールしました。それで修正されました。より良い解決策は、antがJDK 6を使用する(7をアンインストールしない)ことです。このプロパティの変更/設定が可能です:

Java.library.path

local.propertiesファイル内。プロジェクトディレクトリ(ルート)にあります。

AndroidはとにかくJDK 7(6または5のみ)で動作しないため、antスクリプトもJDK 6または5を使用するようにしてください。

5
Ixx

私の場合、リリースビルドをビルドして実行できましたが、デバッグビルドを実行しようとするとINSTALL_PARSE_FAILED_NO_CERTIFICATESエラーが発生しました。

解決策は、debug.keystoreファイルを削除し、ADTで再作成することでした。期限が切れたようです。

より良い長期的な解決策は、ADTに作成させる代わりに、1年後に期限切れにならないdebug.keystoreを明示的に作成することです。これを行うコマンドは次のとおりです。

keytool -genkey -v -keystore debug.keystore -alias androiddebugkey -storepass Android -keypass Android -keyalg RSA -validity 14000

プロンプトが表示されたら、次の値を入力します。

  • 姓と名:Android Debug
  • 組織単位:Android
  • 組織名:不明
  • 市区町村:不明
  • 州または県:不明
  • 国コード:US
5

以前に生成されたビルドと現在のバージョンは、v1(jar署名)とv2(完全なAPK署名)の間で署名バージョンで競合しているため、

Generate Signed APKダイアログの下でティックの適切な署名バージョンを修正するには

4
Pankaj kumar

私も同じ問題に直面していました。最初にV2を使用してビルドを生成し、OS 5.1で実行されているモバイルデバイスにインストールすると、同じ問題が発生しました。しかし、OS 7.0で実行されているタブレットではビルドは正常に機能していました。そこで、V1 Jar署名を使用してビルドを生成しましたが、両方のデバイスで正常に機能していました。

結論:以下のデバイスをサポートしている場合Android OS 7.0。 V1 jar署名を使用してビルドを生成します。

3
Rajiv Ranjan

新しいAndroid St​​udioバージョン3.2以降では、releaseインストールを実行しようとして、署名構成を定義していない場合、エラープロンプトが表示され、インストールは失敗します。必要なことは、debugビルドを実行するか、署名構成(V1またはV2)を正しくセットアップすることです。

3
Rowland Mtetezi

これは、.jarファイルを含むAndroidManifest.xmlライブラリを含めると発生する可能性があります。

  • 純粋なJavaの場合は、.jarエクスポートに含めないでください。
  • 純粋なJava(Androidプロジェクトであることを意味する)でない場合は、ライブラリプロジェクトとして含める必要があります。
2
znat

環境変数Java_HOMEを(JDK 7ではなく)JDK 5または6に設定すると、エラーが修正されました。

1
TN.

このエラーを取得する別の方法は、macOSでantを使用してビルドし、アプリのソースツリーにFinderアイコンファイル(Icon\r)を含めることです。 jarsignerはファイル名の復帰に対応できず、-verify AP​​Kを使用すると署名が有効であると主張しますが、常にデバイスにインストールされないAPKになります。皮肉なことに、Google Drive FinderプラグインはFinderアイコンファイルの優れたソースです。

解決策は、filesetで次のような指定子を使用して、問題のあるファイル(とにかくAPKでは役に立たないファイル)を除外することです。

    <exclude name="**/Icon&#13;" />
0
Perry

ディスクスペースが不足したためにant releaseが失敗したことをリリースしたため、このエラーが発生していました。

0
Red Cricket

この問題は、署名されていないバージョンのAPKをインストールする場合に発生します。正しいAPKをインストールしているか確認してください。

0
NeeK

しばらくして、このテーマに関する複数のオンラインスレッドを経て、プロジェクトを修正できました。

主に、最後に入れたファイル(画像またはレイアウト)を考慮に入れます。それらを削除するとうまくいき、プロジェクトを再度ビルドできます。

0
Nelson R.

Eclipseコンソールでこのエラーが発生していました。内容が同じで名前が異なる2つのjarファイルがあり、それらが互いに競合していることがわかりました。そのうちの1つを削除し、デバイスにアプリをインストールできました。

0
joao2fast4u

API v23を実行している電話でAndroid Nプレビューに対してビルドされたXamarinプロジェクトをインストールしようとすると、このエラーが発生しました。解決策はそうしないことです。

0
James Moore

ionic/Visual Studio Code(デバイスでAndroidを実行)で問題が発生しました:

モバイルデバイス(設定/アプリ)でアプリをアンインストールしましたが、エラーはなくなり、アプリは起動しています。

0
Michael Maier