androidmanifest.xml
ファイルを編集して、デフォルト/メイン/スタートアップ(何でもいい)のアクティビティを変更しようとしました。私がしたすべては、android:name
プロパティを変更することでした。しかし、これはアプリ全体を完全に壊しました。インストールしようとすると失敗して読みます。
インストールエラー:INSTALL_PARSE_FAILED_NO_CERTIFICATES
以前の状態に戻そうとすると、それでも同じエラーが発生しました...何をしましたか?
androidmanifest.xml
ファイルを編集して、デフォルト/メイン/スタートアップ(何でもいい)のアクティビティを変更しようとしました。私がしたすべては、android:name
プロパティを変更することでした。しかし、これはアプリ全体を完全に壊しました。インストールしようとすると失敗して読みます。
インストールエラー:INSTALL_PARSE_FAILED_NO_CERTIFICATES
以前の状態に戻そうとすると、それでも同じエラーが発生しました...何をしましたか?
回答:
ファイル内でAndroidManifest.xml
直接編集しました.apk
か?もしそうなら、それはうまくいきません。
.apk
マーケットからインストールしていなくても、スマートフォンにインストールする場合は、すべてのAndroid に署名する必要があります。開発ツールは、開発証明書で署名することによってこれを回避しますが、.apk
まだ署名されています。
これの1つの使用法は.apk
、インストールされているアプリケーションの有効なアップグレードであるかどうかをデバイスが認識できるようにすることです。
そのため、アプリに変更を加える場合は、.apk
適切に署名されるように再構築する必要があります。
flutter clean
してもう一度実行/デバッグしてください!この操作は、ビルドフォルダーをクリーンアップし、実行/デバッグ時にビルドファイルを再ビルドするため、上記のソリューションに似ています。
このエラーは、間違った署名設定を使用した場合にも発生する可能性があることがわかりました。ここで説明するように、Android 7.0では新しい署名スキームV2が導入されています。V2スキームは、V1スキームで行われるように、JARだけでなくAPK全体に署名します。V2のみで署名し、7.0より前のターゲットにインストールしようとすると、JAR自体が署名されておらず、7.0より前のPackageManagerがV2 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}" />
キーツールで引数を使用して(私にとって)解決しました
-sigalg MD5withRSA -keyalg RSA -keysize 1024
jarsignerでの使用
-sigalg MD5withRSA -digestalg SHA1
で見つかったソリューション
私も同じ問題に直面していました。最初にV2を使用してビルドを生成し、OS 5.1で実行されているモバイルデバイスにインストールしましたが、同じ問題が発生しました。しかし、ビルドはOS 7.0で実行されているタブレットで正常に機能していました。そのため、V1 Jar署名を使用してビルドを生成しましたが、両方のデバイスで正常に動作していました。
結論: Android OS 7.0以下のデバイスをサポートしている場合。V1 jar署名を使用してビルドを生成します。
私の場合、リリースビルドをビルドして実行できINSTALL_PARSE_FAILED_NO_CERTIFICATES
ましたが、デバッグビルドを実行しようとするとエラーが発生しました。
解決策は、debug.keystore
ファイルを削除してADTに再作成させることでした。どうやら期限切れだったようです。
より優れた長期的な解決策はdebug.keystore
、ADTで作成する代わりに、1年後に期限切れにならないを明示的に作成することです。これを行うコマンドは次のとおりです。
keytool -genkey -v -keystore debug.keystore -alias androiddebugkey -storepass android -keypass android -keyalg RSA -validity 14000
プロンプトが表示されたら、次の値を入力します。
これは醜いですが高速なソリューションです。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を使用することをお勧めします。
最近、Android Studio 4.0へのアップグレード中にこのエラーが発生しました。原因は、プロジェクトの署名設定でV2署名が無効になっていることbuild.gradle
でした。
解決策は、これを削除するv2SigningEnabled false
か、明示的true
にデフォルト値であるに設定することでした。
android {
signingConfigs {
dev {
v2SigningEnabled true
}
}
}
新しいAndroid Studioバージョン3.2以降では、release
インストールを実行しようとしていて、署名設定を定義していない場合、エラープロンプトが表示され、インストールは失敗します。debug
ビルドを実行するか、署名構成(V1またはV2)を正しくセットアップする必要があります。
ほとんどの答えは本当です。そして起こるいくつかの別の理由は
►最小SDKがデバイスSDKよりも小さい。
►デバイスに同じパッケージ名の古いアプリケーションがある
私のEclipseコンソールでこのエラーが発生していました。内容が同じで名前が異なる2つのjarファイルがあり、互いに競合していることがわかりました。そのうちの1つを削除して、デバイスにアプリをインストールすることができました。
このエラーを取得する別の方法はant
、macOSを使用してビルドしIcon\r
、アプリのソースツリーにFinderアイコンファイル()を置くことです。表示されjarsigner
、それはあなたがあれば、署名が有効であると主張しますが、ファイル名にキャリッジリターンに対応できないと-verify
APK、それは常にデバイスにインストールする文句を言わないAPKになります。皮肉なことに、Google Drive Finderプラグインは、Finderアイコンファイルの優れたソースです。
解決策は、fileset
次のような指定子を使用して、問題のあるファイル(とにかくAPKでは役に立たないファイル)を除外することです。
<exclude name="**/Icon " />
私がこのエラーをスローしているのは、最小sdkが28のアプリがあり、SDKバージョン23のエミュレーターでプレイしているためです。通常、これは不可能です(ASグレイが再生ボタンを押し出す)が、今日はそうではありません。たくさん。
最初にそれをやってみてください:
エミュレーターを使用している場合はリセットしてみてください。モバイルで最初にアプリケーションをアンインストールしてから開発者モードをオフにしてからオンにすると、問題が解決します。
INSTALL_PARSE_FAILED_NO_CERTIFICATES
エラー-103
です。adb log
D/PackageInstaller(21320): Installation error code: -103