新しい Android プロジェクトを作成しました。携帯電話で実行したかったのですが、インストールできないことがわかりました。エラーは次のように報告されました。
インストールは成功しませんでした。
アプリケーションをインストールできませんでした: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED
APK のリスト:
[0] 'app/build/outputs/apk/debug/app-debug.apk'
インストールは次の理由で失敗しました: 'null'
ビルドが完了したところですが、エラーは報告されませんでした。パッケージ名は間違いなく以前に使用されたものではありません。
クリーン+リビルドを試みましたが、うまくいきませんでした。
APK をビルドし、adb を使用して携帯電話にインストールすると、次の情報が表示されます。
S+ (バージョン 31 以降) をターゲットにするには、インテント フィルターが存在する場合に android:exported の明示的な値を定義する必要があります。
調べてみると、Android 11以下では、AndroidManifestでアクティビティやサービス、ブロードキャストレシーバを宣言する際に、明示的にandroid:exportedを宣言していないとのこと。デフォルト値はexported=trueなので、外部に公開したくない場合のみexported=falseを宣言する必要があります。
ただし、Android 12では変更があります。Android 12 デバイスで SDK API 31 (android 12) をターゲット SDK として設定するエクスポート アプリケーションの明示的な宣言 エクスポートは、インテント フィルターを宣言するアクティビティなどのコンポーネントで明示的に宣言する必要があります。そうしないと、エラーが発生し、インストールが失敗します。
解決策: 追加
android:exported="true"
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
この共有は終了しました。