java.lang.NoClassDefFoundError: Failed resolution

2020-07-29 17:33发布

I don't understand what went wrong here. I've been searching for the fix but i just couldn't find any. Anyone understand what's wrong?

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.eldercare.fajri.eldercare, PID: 30948 java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/common/internal/zzbp; at com.google.firebase.firestore.FirebaseFirestore.zze(Unknown Source) at com.google.firebase.firestore.FirebaseFirestore.getInstance(Unknown Source) at com.eldercare.fajri.eldercare.boundary.HomeActivity.onCreate(HomeActivity.java:71) at android.app.Activity.performCreate(Activity.java:6736) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1124) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2730) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2842) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1560) at android.os.Handler.dispatchMessage(Handler.java:110) at android.os.Looper.loop(Looper.java:203) at android.app.ActivityThread.main(ActivityThread.java:6328) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1076) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:937) Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.common.internal.zzbp" on path: DexPathList[[zip file "/data/app/com.eldercare.fajri.eldercare-1/base.apk"],nativeLibraryDirectories=[/data/app/com.eldercare.fajri.eldercare-1/lib/arm64, /system/lib64, /vendor/lib64, /system/vendor/lib64]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) at java.lang.ClassLoader.loadClass(ClassLoader.java:380) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) at com.google.firebase.firestore.FirebaseFirestore.zze(Unknown Source)  at com.google.firebase.firestore.FirebaseFirestore.getInstance(Unknown Source)  at com.eldercare.fajri.eldercare.boundary.HomeActivity.onCreate(HomeActivity.java:71)  at android.app.Activity.performCreate(Activity.java:6736)  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1124)  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2730)  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2842)  at android.app.ActivityThread.-wrap12(ActivityThread.java)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1560)  at android.os.Handler.dispatchMessage(Handler.java:110)  at android.os.Looper.loop(Looper.java:203)  at android.app.ActivityThread.main(ActivityThread.java:6328)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1076)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:937)

Here's my build.gradle :

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    defaultConfig {
        applicationId "com.eldercare.fajri.eldercare"
        minSdkVersion 19
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.RDescActivity.runner.AndroidJUnitRunner"
        vectorDrawables.useSupportLibrary = true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    implementation 'com.android.support:support-vector-drawable:26.1.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
    implementation 'com.google.firebase:firebase-core:16.0.1'
    implementation 'com.google.firebase:firebase-firestore:11.4.2'
    implementation 'com.google.firebase:firebase-auth:16.0.1'
    implementation 'com.android.support:design:26.1.0'
    implementation 'com.android.support:cardview-v7:26.1.0'
    implementation 'com.android.support:recyclerview-v7:26.1.0'
    implementation 'com.github.d-max:spots-dialog:0.7@aar'
    implementation 'com.rengwuxian.materialedittext:library:2.1.4'

    implementation "com.google.android.gms:play-services-base:15.0.1"

    implementation "com.google.android.gms:play-services-gcm:15.0.1"

    implementation 'com.github.wdullaer:MaterialDateTimePicker:v3.0.0'

    implementation 'com.github.ganfra:material-spinner:1.1.1'

    implementation 'gr.pantrif:easy-android-splash-screen:0.0.1'

    androidTestImplementation 'org.testng:testng:6.9.6'
}
apply plugin: 'com.google.gms.google-services'

Here's my project.gradle :

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {

    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.1'
        classpath 'com.google.gms:google-services:4.0.1'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        maven{

            url "http://maven.google.com"
        }
        maven{
            url "https://jitpack.io"
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

HomeActivity :

package com.eldercare.fajri.eldercare.boundary;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.AppCompatButton;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.DatePicker;
import android.widget.TextView;
import android.widget.Toast;

import com.eldercare.fajri.eldercare.control.ListItemReminderAdapter;
import com.eldercare.fajri.eldercare.control.Reminder;
import com.eldercare.fajri.eldercare.R;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.firestore.CollectionReference;
import com.google.firebase.firestore.DocumentSnapshot;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.QuerySnapshot;
import com.rengwuxian.materialedittext.MaterialEditText;

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

import dmax.dialog.SpotsDialog;

public class HomeActivity extends AppCompatActivity {

    List<Reminder> reminderList = new ArrayList<>();

    FirebaseFirestore db;

    RecyclerView listItem;

    Reminder reminder;

    RecyclerView.LayoutManager layoutManager;

    public static Activity ha;
    FloatingActionButton fab;
    AppCompatButton next,prev;

    public String date;
    public TextView thedate;
    public MaterialEditText title,description,time;
    public boolean isUpdate = false;
    public boolean menu=false;
    public String idUpdate;

    ListItemReminderAdapter adapter;
    SpotsDialog dialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);

        ha = this;

        db = FirebaseFirestore.getInstance();

        thedate = (TextView)findViewById(R.id.thedate);

        dialog = new SpotsDialog(this);
        title = (MaterialEditText)findViewById(R.id.title);
        description = (MaterialEditText)findViewById(R.id.description);
        time = (MaterialEditText)findViewById(R.id.time);

        final Calendar now;
        now = Calendar.getInstance();
        int year = now.get(Calendar.YEAR);
        int month = now.get(Calendar.MONTH);
        int day = now.get(Calendar.DAY_OF_MONTH);

        final String today = (day +"-"+(month+1)+"-"+ year);
        date = today;
        thedate.setText(today);
        if(thedate.getText().equals(today)){
            thedate.setText("Today");
        }

        prev = (AppCompatButton)findViewById(R.id.prev);
        prev.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                now.add(Calendar.DAY_OF_MONTH,-1);
                int day = now.get(Calendar.DAY_OF_MONTH);

                int month=now.get(Calendar.MONTH);
                if(day<1) {
                    now.add(Calendar.MONTH,-1);
                }

                int year = now.get(Calendar.YEAR);
                if ((month+1)<1){
                    now.add(Calendar.YEAR,-1);
                }

                date = (day +"-"+(month+1)+"-"+ year);
                thedate.setText(day +"-"+(month+1)+"-"+ year);
                if(thedate.getText().equals(today)){
                    thedate.setText("Today");
                }
                loadData();

            }
        });

        next = (AppCompatButton)findViewById(R.id.next);
        next.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int dlong,mlong;
                dlong = now.getActualMaximum(Calendar.DAY_OF_MONTH);
                mlong = now.getActualMaximum(Calendar.MONTH);

                now.add(Calendar.DAY_OF_MONTH,+1);
                int day = now.get(Calendar.DAY_OF_MONTH);

                int month=now.get(Calendar.MONTH);
                if(day>dlong) {
                    now.add(Calendar.MONTH,+1);
                }

                int year = now.get(Calendar.YEAR);
                if (month>mlong){
                    now.add(Calendar.YEAR,+1);
                }

                date = (day +"-"+(month+1)+"-"+ year);
                thedate.setText(day +"-"+(month+1)+"-"+ year);
                if(thedate.getText().equals(today)){
                    thedate.setText("Today");
                }
                loadData();
            }
        });

        thedate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int year = now.get(Calendar.YEAR);
                int month = now.get(Calendar.MONTH);
                int day = now.get(Calendar.DAY_OF_MONTH);

                DatePickerDialog mDatePicker = new DatePickerDialog(HomeActivity.this, new DatePickerDialog.OnDateSetListener() {
                    @Override
                    public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
                        date = (dayOfMonth +"-"+(month+1)+"-"+ year);
                        thedate.setText(dayOfMonth+"-"+(month+1)+"-"+year);
                        if(thedate.getText().equals(today)){
                            thedate.setText("Today");
                        }
                        now.set(year,month,dayOfMonth);
                        loadData();
                    }
                },year, month, day);
                mDatePicker.show();
            }
        });

        fab = (FloatingActionButton)findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(HomeActivity.this,ReminderActivity.class);
                intent.putExtra("isUpdate","false");
                startActivity(intent);
            }
        });

        listItem = (RecyclerView)findViewById(R.id.Reminder);
        listItem.setHasFixedSize(true);

        layoutManager = new LinearLayoutManager(this);
        listItem.setLayoutManager(layoutManager);

        loadData();

    }

    public void loadData() {
        dialog.show();
        CollectionReference cr = db.collection("Reminder").document(date).collection("remind");

        if(reminderList.size() > 0)
            reminderList.clear();
        cr.get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                            for (DocumentSnapshot doc:task.getResult())
                            {
                                 reminder = new Reminder(doc.getString("id"),
                                        doc.getString("Title"),
                                        doc.getString("description"),
                                        doc.getString("date"),
                                        doc.getString("time"),
                                        doc.getString("done"));
                                reminderList.add(reminder);
                            }


                        adapter = new ListItemReminderAdapter(HomeActivity.this, reminderList);
                        listItem.setAdapter(adapter);
                        dialog.dismiss();
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Toast.makeText(HomeActivity.this, ""+e.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                });
    }
}

3条回答
Fickle 薄情
2楼-- · 2020-07-29 17:55

To solve this, please change the following implementations:

implementation 'com.google.firebase:firebase-core:16.0.1'
implementation 'com.google.firebase:firebase-firestore:11.4.2'
implementation 'com.google.firebase:firebase-auth:16.0.1'
implementation "com.google.android.gms:play-services-base:15.0.1"
implementation "com.google.android.gms:play-services-gcm:15.0.1"

to

implementation 'com.google.firebase:firebase-core:16.0.7'
implementation 'com.google.firebase:firebase-firestore:18.0.0'
implementation 'com.google.firebase:firebase-auth:16.1.0'
implementation "com.google.android.gms:play-services-base:16.1.0"
implementation "com.google.android.gms:play-services-gcm:16.0.0"

In your top level build.gradle file please be sure to have the latest version of Google Service plugin:

classpath 'com.google.gms:google-services:4.2.0'

And not 4.0.1. And

classpath 'com.android.tools.build:gradle:3.3.0'

And not 3.2.1 as it is now.

查看更多
倾城 Initia
3楼-- · 2020-07-29 18:01

This might be occurring because you have not enabled multidexing. You need to add following dependency to your gradle.

implementation 'com.android.support:multidex:1.0.3'

And set multiDexEnabled true inside defaultConfig to turn multidexing on.

查看更多
家丑人穷心不美
4楼-- · 2020-07-29 18:18

If app supports android version lower than 20 [minSdkVersion 19], these libraries requires Multidex.

Enable Mutidex

Try this, it will work.

查看更多
登录 后发表回答