Firebase Flutter 插件一起使用产生崩溃的问题
在 Android 平台上,Firebase Flutter 插件默认不支持多进程处理,因此可能会导致小程序子进程崩溃。若要将Flutter 插件与 Firebase Flutter 插件一起使用,你需要自行在小程序子进程中初始化 Firebase。
添加依赖项
1. 找到您的 Flutter Android 项目根目录。在 Flutter 项目中,搜索 id "com.android.application"
包含此字符串的 build.gradle 文件所在的位置是您的 Flutter Android 项目根目录:
2. 在此 build.gradle 中的 android 闭包中添加依赖项:
dependencies {
compileOnly 'com.tencent.tcmpp.android:mini_core:+'
compileOnly 'com.google.firebase:firebase-common:+'
}
创建 application 类
注意:
如果你的 Flutter 项目已经有自定义的 Android 应用程序类,请跳过此部分。
在 src 目录中,找到 FlutterActivity 所在的位置:
在 FlutterActivity 所在的目录中创建一个新的应用程序类。包与 FlutterActivity 的路径相同:
import android.app.Application;
public class MyApplication extends Application {}
打开并编辑 src > main 下的 AndroidManifest.xml。在 <application> 标签中,更改 android:name 字段以匹配您的应用程序类:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"><application android:name=".MyApplication" ...>...</application></manifest>
在子进程上初始化 Firebase
1. 在您的 Android 应用程序类中重写 onCreate 函数。如果您已经操作此步骤,请跳过。
public void onCreate() {
super.onCreate();
}
2. 在此处添加子进程的 Firebase 初始化代码
import android.app.Application;
import com.google.firebase.FirebaseApp;
import com.tencent.tmf.mini.api.TmfMiniSDK;
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
...
if (TmfMiniSDK.isMiniProcess(this)) {
FirebaseApp.initializeApp(this);
}
...
}
}
iOS 端编译产生找不到头文件的报错
使用 Xcode 打开工程,选择正确的 target->Build Settings。搜索框中输入"Allow Non-modular Includes In Framework Modules",然后将其设置为 "Yes":
Apple M 系列芯片电脑模拟器运行异常
当前 SDK 版本对于在 M 系列芯片电脑模拟器上运行需要通过 Rosetta 运行。
Xcode14之前:
我们可以右键 Xcode > 显示简介 > 勾选使用 Rosetta 打开,即可在模拟器上运行:
Xcode14后:
Xcode打开项目 > Product > Destination > Destination Architecturesk 可以选择用哪种模式的模拟器打开。
我们选择 (Rosetta)结尾的模拟器即可:
Android 编译报错问题
引用 Flutter 插件进行 Android 应用编译时出现资源找不到问题,类似报错信息如下:
需在 Android 项目包中的 gradle.properties 文件中添加以下配置。
android.nonFinalResIds=false
android.defaults.buildfeatures.buildconfig = true
android.enableR8.fullMode=false
android.nonTransitiveRClass=false
android.experimental.nonTransitiveAppRClass=true