androidmanifest.xml
ファイルを編集して、default/main/startup(あなたが呼ぶものは何でも)アクティビティを変更しようとしました。 Android:name
プロパティを変更するだけでした。ただし、これはアプリ全体を完全に破壊しました。私がインストールしようとすると失敗し、読み取ります。
インストールエラー:INSTALL_PARSE_FAILED_NO_CERTIFICATES
以前の状態に戻そうとしたとき、それでも同じエラーが表示されていました...何をしましたか?
AndroidManifest.xml
ファイルで.apk
を直接編集しましたか?もしそうなら、それは動作しません。
スマートフォンにインストールする場合は、Android .apk
にすべて署名する必要があります (マーケットからインストールしていない場合でも)。開発ツールは、開発証明書で署名することでこれに対応しますが、.apk
は引き続き署名されます。
これの1つの用途は、デバイスが.apk
がインストールされたアプリケーションの有効なアップグレードであるかどうかを判断できることです。
したがって、アプリに変更を加えた場合は、.apk
を再構築して、適切に署名されるようにする必要があります。
間違った署名設定を使用している場合にも、このエラーが発生する可能性があることがわかりました。 here で説明したように、Android 7.0は新しい署名スキームV2を導入します。 V1スキームで行われるように、V2スキームはJARだけでなくAPK全体に署名します。 V2のみで署名し、7.0より前のターゲットにインストールしようとすると、JAR自体は署名されず、7.0より前PackageManagerV2 APK署名の存在を検出できません。
すべてのターゲットシステムと互換性を保つには、Android Studioの両方の署名バージョンボックスをチェックして、APKが両方のスキームで署名されていることを確認します署名付きAPKを生成しますここに示すようなダイアログ:
7.0のターゲットのみが予想される場合、V1署名を含める必要はありません。
これは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}" />
ほとんどの場合、このエラーの解決策は非常に簡単です。
keytoolでargsを使用して解決しました(私にとって)
-sigalg MD5withRSA -keyalg RSA -keysize 1024
jarsignerで使用する
-sigalg MD5withRSA -digestalg SHA1
で見つかったソリューション
これは見苦しいが高速なソリューションです。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を使用するようにしてください。
私の場合、リリースビルドをビルドして実行できましたが、デバッグビルドを実行しようとすると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
プロンプトが表示されたら、次の値を入力します。
以前に生成されたビルドと現在のバージョンは、v1(jar署名)とv2(完全なAPK署名)の間で署名バージョンで競合しているため、
Generate Signed APKダイアログの下でティックの適切な署名バージョンを修正するには
私も同じ問題に直面していました。最初にV2を使用してビルドを生成し、OS 5.1で実行されているモバイルデバイスにインストールすると、同じ問題が発生しました。しかし、OS 7.0で実行されているタブレットではビルドは正常に機能していました。そこで、V1 Jar署名を使用してビルドを生成しましたが、両方のデバイスで正常に機能していました。
結論:以下のデバイスをサポートしている場合Android OS 7.0。 V1 jar署名を使用してビルドを生成します。
新しいAndroid Studioバージョン3.2以降では、release
インストールを実行しようとして、署名構成を定義していない場合、エラープロンプトが表示され、インストールは失敗します。必要なことは、debug
ビルドを実行するか、署名構成(V1またはV2)を正しくセットアップすることです。
これは、.jar
ファイルを含むAndroidManifest.xml
ライブラリを含めると発生する可能性があります。
環境変数Java_HOME
を(JDK 7ではなく)JDK 5または6に設定すると、エラーが修正されました。
このエラーを取得する別の方法は、macOSでant
を使用してビルドし、アプリのソースツリーにFinderアイコンファイル(Icon\r
)を含めることです。 jarsigner
はファイル名の復帰に対応できず、-verify
APKを使用すると署名が有効であると主張しますが、常にデバイスにインストールされないAPKになります。皮肉なことに、Google Drive FinderプラグインはFinderアイコンファイルの優れたソースです。
解決策は、fileset
で次のような指定子を使用して、問題のあるファイル(とにかくAPKでは役に立たないファイル)を除外することです。
<exclude name="**/Icon " />
ディスクスペースが不足したためにant release
が失敗したことをリリースしたため、このエラーが発生していました。
この問題は、署名されていないバージョンのAPKをインストールする場合に発生します。正しいAPKをインストールしているか確認してください。
しばらくして、このテーマに関する複数のオンラインスレッドを経て、プロジェクトを修正できました。
主に、最後に入れたファイル(画像またはレイアウト)を考慮に入れます。それらを削除するとうまくいき、プロジェクトを再度ビルドできます。
Eclipseコンソールでこのエラーが発生していました。内容が同じで名前が異なる2つのjarファイルがあり、それらが互いに競合していることがわかりました。そのうちの1つを削除し、デバイスにアプリをインストールできました。
API v23を実行している電話でAndroid Nプレビューに対してビルドされたXamarinプロジェクトをインストールしようとすると、このエラーが発生しました。解決策はそうしないことです。
ionic/Visual Studio Code(デバイスでAndroidを実行)で問題が発生しました:
モバイルデバイス(設定/アプリ)でアプリをアンインストールしましたが、エラーはなくなり、アプリは起動しています。