gradle 在运行模块的检测时禁用Firebase初始化

jei2mxaa  于 7个月前  发布在  其他
关注(0)|答案(3)|浏览(71)

我有一个多模块的项目。我希望能够运行我为这些模块单独编写的插装测试。当我运行测试和初始化Activity时,我不断遇到以下错误。
默认FirebaseApp在此过程中未初始化。请确保首先调用FirebaseApp.initializeApp(Context)。
我试过在测试应用的上下文中显式地调用它,但没有用。我知道firebase是通过配置文件设置的,我没有显式地调用它来设置它。它在实际应用启动之前自动通过内容提供程序初始化(阅读博客)。
因为这是一个静态调用,我们没有显式地调用它,我也没有看到一种方法来模拟它。有没有一种方法可以完全禁用firebase,因为我在我的模块中运行最频繁的代码?

wmvff8tz

wmvff8tz1#

Firebase使用内容提供程序在应用程序的onCreate()方法之前将库挂接起来。此内容提供程序在库com.google.firebase.firebase-perf中注册(通过build.gradle文件中的platform("com.google.firebase:firebase-bom:...行导入)
要停止firebase连接过程问题,您可以:
1.为android-test创建一个自定义的Application类,在应用程序的onCreate()中调用FirebaseApp.initializeApp()一次(如果你想在android测试中正确设置和测试Firebase,这很好)
1.禁用firebase的提供程序(如果你不需要fire,这是完美的,但如果你在测试代码中使用firebase服务(如creashlytics等),可能会导致问题)

怎么做?

创建自定义应用程序类:
1.在文件夹src/androidTest/中创建文件MyCustomTestApp.kt(或任何其他类名),内容为:

package <...> // use the default package that was set when you created the file

import android.app.Application
import com.google.firebase.FirebaseApp

class MyCustomTestApp: Application() {
    override fun onCreate() {
        super.onCreate()
        FirebaseApp.initializeApp(this)
    }
}

字符串
1.在src/androidTest/AndroidManifest.xml文件中(如果不存在,请创建新文件)添加以下内容:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:versionCode="1"
    android:versionName="1.0" >

    <application
        android:name="here setup the path to your custom application class, e.g. com.yourApp.package.name.MyCustomTestApp"
        tools:replace="android:name">

        <--! if you have test activities etc, you register them here ... -->

    </application>
</manifest>


完全禁用Firebase的内容提供程序:
src/androidTest/AndroidManifest.xml文件中(如果不存在,请创建新文件)添加以下内容:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <application>

        <!-- disable firebase provider to get rid of "Default FirebaseApp is not initialized in this process" exceptions -->
        <provider
            android:authorities="${applicationId}.firebaseperfprovider"
            android:name="com.google.firebase.perf.provider.FirebasePerfProvider"
            tools:node="remove" />

    </application>
</manifest>

k2fxgqgv

k2fxgqgv2#

我也遇到了同样的问题,幸运的是我找到了这个帖子。我可以确认上面的Re'em的答案是正确的,但是有一个小问题,即androidTest的AndroidManifest.xml被忽略了。你可以在这里找到这个问题的解决方案。AndroidManifest in androidTest directory being ignored

siv3szwd

siv3szwd3#

如果您有可以侦听的环境值,或者您可以知道在这些条件下存在或不存在的应用内状态,则可以根据需要启动它。但是,这需要 ALL Firebase调用执行健康检查,以防止它们在apps.length == 0

if (firebase.apps.length > 0) {
    // run firebase request
}

字符串

if (firebase.apps.length == 0) return;

相关问题