记第一次生产项目中Flutter接入原生项目遇到的问题

1.关于状态栏颜色

查看FlutterActivity 的onCreate方法得知FlutterActivityDelegate中

    public void onCreate(Bundle savedInstanceState) {
     
        if(VERSION.SDK_INT >= 21) {
     
            Window window = this.activity.getWindow();
            window.addFlags(-2147483648);
            window.setStatusBarColor(1073741824);
            window.getDecorView().setSystemUiVisibility(1280);
        }

所以要自己重置statusBarColor 与 原生保持一致。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
     
        FlutterMain.startInitialization(getApplicationContext());
        super.onCreate(savedInstanceState);
        GeneratedPluginRegistrant.registerWith(this);
        //必须要重写   FlutterActivityDelegate 会在 onCreate 时 自动设置 statusBarColor,这里我们再手动重置回来。
        if(Build.VERSION.SDK_INT >= 21) {
     
            Window window = this.getWindow();
            window.setStatusBarColor(-16777216);
            window.getDecorView().setSystemUiVisibility(0);
        }
        registerMethodChannel();
        // 获取类名
        className = getClass().getSimpleName();
        LogUtils.e(className + ".onCreate()");
    }

2.关于原生Activity打开FlutterActivity 的进入动画效果。

当生成产物时如果build.gradle中 compileSdkVersion与targetSdkVersion 过高则自带动画效果由左向右进入。

android {
    compileSdkVersion 28

    lintOptions {
        disable 'InvalidPackage'
    }

    defaultConfig {
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
        applicationId "com.womai_flutter"
        minSdkVersion 16
        targetSdkVersion 28
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            // TODO: Add your own signing config for the release build.
            // Signing with the debug keys for now, so `flutter run --release` works.
            signingConfig signingConfigs.debug
        }
    }
}

如果不想要动画效果,只需要降低compileSdkVersion与targetSdkVersion。

android {
    compileSdkVersion 26

    lintOptions {
        disable 'InvalidPackage'
    }

    defaultConfig {
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
//        applicationId "com.womai_flutter"
        minSdkVersion 16
        targetSdkVersion 25
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            // TODO: Add your own signing config for the release build.
            // Signing with the debug keys for now, so `flutter run --release` works.
            signingConfig signingConfigs.debug
        }
    }
}

3 将产物aar 加入到原生项目后,运行项目crash

代码混淆的问题。要注意FLutter代码的混淆问题。如果混淆后可能部分机型安装后,启动应用卡死。

#Flutter Wrapper
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.**  { *; }
-keep class io.flutter.util.**  { *; }
-keep class io.flutter.view.**  { *; }
-keep class io.flutter.**  { *; }
-keep class io.flutter.plugins.**  { *; }

4.在接入原生后,可以在阿里云 小米 华为等云测平台进行兼容性测试。

https://mqc.aliyun.com
https://deveco.huawei.com
https://dev.mi.com/testit

5.FAQ About Flutter

https://flutter.dev/docs/resources/faq

欢迎爱学习的小伙伴加群一起进步:230274309

你可能感兴趣的:(安卓,React,Native+Flutter,Flutter)