INSTALL_PARSE_FAILED_MANIFEST_MALFORMED
Android開発でapkをインストールする時にこんなエラーが出ることがありました。
検索すると最近の記事で出てくるのは、
- apk転送時に「INSTALL_PARSE_FAILED_MANIFEST_MALFORMED」というエラーが出た場合の対処方法
- Android アプリビルド時に packageNameSuffix を使った時にはまったこと
- Android - INSTALL_PARSE_FAILED_MANIFEST_MALFORMED
- [Android]INSTALL_PARSE_FAILED_MANIFEST_MALFORMED
といろいろありました。
要はAndroidManifest.xmlの中で引いているActivityやApplicationクラスの名前が、補完されるような指定だと、package名が動的に変わる場合などはビルドはできてもパースに失敗してインストールできないよ、ということでした。
AndroidStudioになって、ビルド時に動的にManifestの書き換えが簡単になりましたが、パッケージ名(applicationId
)がbuildTypeやflavorによって変わる場合は完全修飾名でクラスを指定しないといけません。
また、パーミッションやプロバイダー定義項目などのリソース参照も怪しいみたいです。
自分の場合
ちなみに僕の場合は全然これらと違って、
AndroidManifest.xml
<activity-alias
android:name=".LaunchActivity"
android:targetActivity=".MainActivity"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
<activity
android:name=".MainActivity"/>
のように書いてしまっていたからでした。
この場合は.MainActivityをactivity-alias
で参照していますが、activity
の定義部よりも前で参照してしまっていたため見つからなかったようです。
activity
とactivity-alias
の順番を入れ替えてactivity
を先に宣言すればいいだけでした。