#はじめに
今回Flutterで実装したアプリで、Androidユーザーから「プレイストアからアプリがインストールできないよ〜!」とフィードバックを受けまして、解消法を自分への備忘録として残しておきます。
#ストアからアプリがインストールできない
今回ユーザーからフィードバックいただいた内容として、画像のように「<アプリ名>をインストールできません」とダイアログが表示されている状態です。
インストールできない場合のガイドラインとして、Google公式では下記のような対処法を紹介しています。
- ストレージの空き容量を確認する
- データ接続を確認する
- SD カードを確認する
- ダウンロード マネージャーからキャッシュとデータを削除する
- Google Play 開発者サービスからキャッシュとデータを削除する
- Play ストアのアップデートをアンインストールして再インストールする
今回は上記内容をすべて確認してもらって、対応していただきましたが、それでもダウンロードできない。
また、自分の開発環境・Android実機(Pixel3a Android9 API Level29)の環境では再現しない。
インストールできない旨のダイアログが出るだけで、それ以上のエラーログや何らかのメッセージが出るわけでもなく苦労しました・・・
原因
どうやら直近のコミットで、compileSdkVersionを31に上げたことにより、Android 12の端末でビルドした際にエラーが発生していました。
エラーログ
adb: failed to install /Users/example_app/build/app/outputs/flutter-apk/app.apk:
Failure [INSTALL_PARSE_FAILED_MANIFEST_MALFORMED: Failed parse during installPackageLI:
/data/app/vmdl1651832701.tmp/base.apk (at Binary XML file line #49):
com.example.example_app.MainActivity: Targeting S+ (version 31 and above) requires that an explicit value for android:exported be defined when intent filters are present]
Error launching application on sdk gphone64 x86 64.
#解消法
結論として、AndroidManifestファイルにandroid:exported="true"
を設定することでビルドにも成功し、Android 12ユーザーでもストアからもインストールできるようになりました。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.sample.example.example_app">
<uses-permission android:name="android.permission.INTERNET" />
<application
tools:replace="android:label"
android:usesCleartextTraffic="true"
android:allowBackup="false"
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher">
<activity
android:exported="true" // activityタグ内に書く
android:name=".MainActivity"
#リファレンス
https://developer.android.com/about/versions/12/behavior-changes-12?hl=ja