[Flutter]关于Flutter 1.12.13+在Android api level 19(及以下)发生app启动就闪退问题的解决方法

1,277 阅读1分钟

我将Flutter升级到stable 1.12.13+hotfix.5之后,在一些老手机老安卓系统遇到了这个问题。

闪退的错误内容为android.permission.UPDATE_DEVICE_STATS

通过搜索flutter android.permission.UPDATE_DEVICE_STATS可以搜到本站有一个相关的文章 修复 flutter_gallery_app 运行崩溃问题 提到这个错误,但这篇文章与我提到的问题无关,文章里说到的操作也无法解决我的问题。

真正跟问题相关并且有解答的在这 Github iusse

翻译一下:

这个崩溃问题是由于Android api level 19及以下的一个java原生代码Activity.reportFullyDrawn内部逻辑要求app有android.permissions.UPDATE_DEVICE_STATS权限,但这个是Android内部权限(开发者自己在AndroidMainifest.xml中添加是无效的)而app又没有,然后app就崩了,就闪退了。


解决方法

Java

参考以下代码修改android/app/src/main/java/appid/MainActivity.java文件

  import android.os.Build;
  // 其它import
  
  public class MainActivity extends FlutterActivity {
      // 其它代码
      
      @Override
      public void onFlutterUiDisplayed() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
          reportFullyDrawn();
        }
      }
  }

Kotlin

参考以下代码修改android/app/src/main/kotlin/com/appid/MainActivity.kt文件


import android.os.Build
// 其它import

class MainActivity: FlutterActivity() {
    // 其它代码
    override fun onFlutterUiDisplayed() {
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            reportFullyDrawn()
        }
    }
}