You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio最低SDK API19下Firebase Authentication启动崩溃问题

Android 4.4(API 19)下Firebase Auth启动崩溃问题排查与解决方案

问题背景

基于Android 4.4(最低SDK API 19)开发Firebase Authentication登录应用,编译无异常,但安装到Android 5设备后启动即崩溃;相同代码基于Android 7.0开发时,在Android 11设备可正常运行。移除代码mAuth = FirebaseAuth.getInstance();后崩溃消失,需明确问题原因及Android 4.4是否支持Firebase Auth。

相关代码

package com.example.myapplication373947v339;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import android.content.Intent;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import androidx.annotation.NonNull;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;

import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.firestore.FirebaseFirestore;

import com.google.firebase.firestore.CollectionReference;
import com.google.firebase.firestore.DocumentSnapshot;
import com.google.firebase.firestore.QuerySnapshot;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private EditText emailTextView, passwordTextView;
    private FirebaseAuth mAuth;
    private EditText emailTextView2, passwordTextView2;
    private Button Btn2;
    private EditText passwordTextView3;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mAuth = FirebaseAuth.getInstance();
        emailTextView = findViewById(R.id.email);
        passwordTextView = findViewById(R.id.passwd);
        emailTextView2 = findViewById(R.id.email2);
        passwordTextView2 = findViewById(R.id.password);
        Btn2 = findViewById(R.id.login);
        passwordTextView3 = findViewById(R.id.editTextTextPassword5);
        Btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
        //        loginUserAccount();
                Toast.makeText(getApplicationContext(), "Merhaba!", Toast.LENGTH_LONG).show();
            }
        });
    }

    //private void loginUserAccount() {
    //    String email, password;
    //    email = emailTextView2.getText().toString();
    //    password = passwordTextView2.getText().toString();
    //    if (TextUtils.isEmpty(email)) {
    //        Toast.makeText(getApplicationContext(), "Please enter email!", Toast.LENGTH_LONG).show();
    //        return;
    //    }
    //    if (TextUtils.isEmpty(password)) {
    //        Toast.makeText(getApplicationContext(), "Please enter password!", Toast.LENGTH_LONG).show();
    //        return;
    //    }
    //    mAuth.signInWithEmailAndPassword(email, password)
    //            .addOnCompleteListener(
    //                    new OnCompleteListener<AuthResult>() {
    //                        @Override
    //                        public void onComplete(@NonNull Task<AuthResult> task) {
    //                            if (task.isSuccessful()) {
    //
    //                                Toast.makeText(getApplicationContext(), "Login successful!!", Toast.LENGTH_LONG).show();
    //                                Intent intent
    //                                        = new Intent(MainActivity.this, MainActivity2.class);
    //                                startActivity(intent);
    //
    //                            } else {
    //
    //                                Toast.makeText(getApplicationContext(), "Login failed!!", Toast.LENGTH_LONG).show();
    //
    //                            }
    //                        }
    //                    });
    //
    //
    //}
}

问题原因

  1. Firebase SDK版本兼容性:新版Firebase Auth SDK已停止支持API 19(Android 4.4),Firebase BoM版本31.0.0及之后彻底淘汰了对该版本系统的支持,直接调用FirebaseAuth.getInstance()会触发旧系统不兼容的API调用,导致崩溃。
  2. 依赖库版本限制:项目引入的Firebase相关依赖库最低支持SDK版本高于API 19,编译阶段Gradle兼容性检查未拦截,但运行时旧系统无法加载高版本依赖中的类或方法。
  3. Google Play服务版本过低:Android 4.4设备上的Google Play服务版本普遍较旧,无法满足新版Firebase SDK对Play服务的版本要求,初始化Firebase Auth时会因依赖缺失崩溃。

解决方案

1. 确认Android 4.4的Firebase Auth支持性

Firebase官方仅在BoM版本30.3.0及之前支持API 19。如果必须兼容Android 4.4,需降级Firebase SDK到该兼容版本。

2. 配置兼容的Gradle依赖

在项目级build.gradle(或settings.gradle)中指定兼容的Firebase BoM:

// 项目级build.gradle(Groovy语法)
dependencies {
    // 引入最后支持API 19的Firebase BoM版本
    implementation platform('com.google.firebase:firebase-bom:30.3.0')
    // Firebase Auth依赖无需指定版本,由BoM统一管理
    implementation 'com.google.firebase:firebase-auth'
}

3. 添加旧系统兼容配置

在AndroidManifest.xml中补充必要配置:

<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="你的目标版本" />

<!-- 声明Google Play服务版本,确保旧设备能识别 -->
<meta-data
    android:name="com.google.android.gms.version"
    android:value="@integer/google_play_services_version" />

4. 前置检查Google Play服务版本

在初始化Firebase Auth前,先检查设备上的Google Play服务是否满足要求:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    // 检查Google Play服务可用性
    int resultCode = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(this);
    if (resultCode != ConnectionResult.SUCCESS) {
        Toast.makeText(this, "Google Play服务版本过低,请更新后重试", Toast.LENGTH_LONG).show();
        return;
    }
    
    // 再初始化Firebase Auth
    mAuth = FirebaseAuth.getInstance();
    
    // 后续视图初始化代码...
}

内容的提问来源于stack exchange,提问作者goksel demiradam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 21:56:01