現象
Android4.4(Kitkat)の端末にFlutterアプリをビルドしてインストールしたところ、splash後にクラッシュする。
環境など
ツールなど | バージョンなど |
---|---|
MacBook Air Early2015 | macOS Mojave 10.14.5 |
Android Studio | 3.6.1 |
Java | 1.8.0_131 |
Flutter | 1.12.13+hotfix.5 |
Dart | 2.7.0 |
Xcode | 10.2 |
クラッシュログ
debug起動した際のクラッシュログです
E/flutter (10422): [ERROR:flutter/shell/platform/android/platform_view_android_jni.cc(39)] java.lang.SecurityException: uid 10290 does not have android.permission.UPDATE_DEVICE_STATS.
E/flutter (10422): at android.os.Parcel.readException(Parcel.java:1474)
E/flutter (10422): at android.os.Parcel.readException(Parcel.java:1427)
E/flutter (10422): at android.app.ActivityManagerProxy.reportActivityFullyDrawn(ActivityManagerNative.java:4637)
E/flutter (10422): at android.app.Activity.reportFullyDrawn(Activity.java:1475)
原因
ERROR:flutter/shell/platform/android/platform_view_android_jni.cc(39)] java.lang.SecurityException: uid 10290 does not have android.permission.UPDATE_DEVICE_STATS.
でググって直ぐに辿り着きました。
解決策はこちらにありました。
https://github.com/flutter/flutter/issues/46172
対応策
MainActivity.kt
を開き、以下の記述を追加します。
import android.os.Build // 追加
class MainActivity : FlutterActivity() {
....
// 追加
override fun onFlutterUiDisplayed() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
reportFullyDrawn();
}
}
}
import
も忘れずに。
ちなみに、Lollipop
が5.0、APIレベル21です。
Kitkat
は4.4で、APIレベル19です。
ちょうど、19未満は対応する予定無かったのに、MinSDKが16になっていたのでそれも変えておきました。
android {
compileSdkVersion 28
...
defaultConfig {
..
minSdkVersion 19
targetSdkVersion 28
4.4以下に手持ちがが無いので・・・
4.0.1はなぜか後生大事に持ってますが^^;
iOS版の最低OSバージョンの設定箇所
ところで、iOSの最低OSバージョンってどこで設定するのかな。
これも手持ちのiPadを最低にしておきたいな・・・
ということで調べました。
こちらが参考になりました。
https://teratail.com/questions/87725#reply-137103
- XcodeでRunnerプロジェクトを開き、[Runner]-右側の[General]タブをタップ
- Deployment Infoにある[Deployment Target]が該当の箇所
私は手持ちのiPadが9.3.5なので、9.3にしました。(10に上げられないやつw)
そういえば、最新OSに対応してないといけないのって、どこでやるんだろう?
こちらによると、
https://qiita.com/OkamotoHaru/items/0f285e399ed3fc44ea99
Xcodeを最新版に上げないとダメ?ていうかそれだけでいいのかな?
ついにCatlinaに上げるときか・・・
(自宅待機)現場からは以上です。