【问题标题】:Firebase weird error java.lang.ClassNotFoundException: not during development, but after apk releasedFirebase 奇怪的错误 java.lang.ClassNotFoundException: 不是在开发期间,而是在 apk 发布之后
【发布时间】:2017-03-14 20:25:37
【问题描述】:

我的应用程序在开发过程中遇到了一个奇怪的行为,当我在实际设备上运行该应用程序时,它可以完美地运行,结果如下所示

但是我发布同一个App并在设备上运行后,该App多次崩溃并死机

如您所见,当访问 Firebase 控制台中的 __Crash Reporting_ 选项时,我得到了这个堆栈跟踪,上面写着

====

Exception java.lang.NoClassDefFoundError: Failed resolution of: Lcom/squareup/picasso/Picasso;
org.team.asl.connectin.activity.MainActivity$4.onDataChange (MainActivity.java:226)
com.google.android.gms.internal.zzbmz.zza ()
com.google.android.gms.internal.zzbnz.zzYj ()
com.google.android.gms.internal.zzboc$1.run ()
android.os.Handler.handleCallback (Handler.java:815)
android.os.Handler.dispatchMessage (Handler.java:104)
android.os.Looper.loop (Looper.java:194)
android.app.ActivityThread.main (ActivityThread.java:5631)
java.lang.reflect.Method.invoke (Method.java)
java.lang.reflect.Method.invoke (Method.java:372)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:959)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:754)
arrow_drop_down
Caused by java.lang.ClassNotFoundException: Didn't find class "com.squareup.picasso.Picasso" on path: DexPathList[[zip file "/data/app/org.team.asl.connectin-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
dalvik.system.BaseDexClassLoader.findClass (BaseDexClassLoader.java:56)
java.lang.ClassLoader.loadClass (ClassLoader.java:511)
java.lang.ClassLoader.loadClass (ClassLoader.java:469)
org.team.asl.connectin.activity.MainActivity$4.onDataChange (MainActivity.java:226)
com.google.android.gms.internal.zzbmz.zza ()
com.google.android.gms.internal.zzbnz.zzYj ()
com.google.android.gms.internal.zzboc$1.run ()
android.os.Handler.handleCallback (Handler.java:815)
android.os.Handler.dispatchMessage (Handler.java:104)
android.os.Looper.loop (Looper.java:194)
android.app.ActivityThread.main (ActivityThread.java:5631)
java.lang.reflect.Method.invoke (Method.java)
java.lang.reflect.Method.invoke (Method.java:372)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:959)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:754)

为什么会出现问题

Exception java.lang.NoClassDefFoundError: Failed resolution of: Lcom/squareup/picasso/Picasso;
    org.team.asl.connectin.activity.MainActivity$4.onDataChange (MainActivity.java:226)

更新

MainActivity的第226行是

@Override
    public void onStart() {
        super.onStart();

        try{
            // Add value event listener to the post
            // [START user_value_event_listener]
            ValueEventListener userListener = new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    // Get User object and use the values to update the UI
                    mCurrentUser = dataSnapshot.getValue(User.class);
                    // [START_EXCLUDE]

                  Picasso.with(MainActivity.this) // Line number 226
                            .load(mCurrentUser.getAvatarUrl())
                            .into(mUserAvatarImageView);
                    mUserNameTextView.setText(mCurrentUser.getUserName());
                    mUserEmailTextView.setText(mCurrentUser.getEmail());

                    // [END_EXCLUDE]
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {
                    // Getting User failed, log a message
                    FirebaseCrash.log(databaseError.toException().getMessage());

                }
            };


            mCurrentUserDatabaseReference.addValueEventListener(userListener);
            // [END user_value_event_listener]

            // Keep copy of post listener so we can remove it when app stops
            mUserListener = userListener;                

        } catch (Exception e){

            FirebaseCrash.log("Message is " + e.getMessage());
        }

    }

MultiDex 类是

public class EnableMultiDex extends MultiDexApplication {
    private static EnableMultiDex enableMultiDex;
    public static Context context;

    public EnableMultiDex(){
        enableMultiDex=this;
    }

    public static EnableMultiDex getEnableMultiDexApp() {
        return enableMultiDex;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();
        FirebaseDatabase.getInstance().setPersistenceEnabled(true);
    }
}

在 AndroidManifest.xml 中

    <application
            android:name=".EnableMultiDex"
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:supportsRtl="true"
..............

和整个 build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"

    defaultConfig {
        applicationId "org.team.asl.connectin"
        minSdkVersion 21
        targetSdkVersion 25
        versionCode 1
        versionName "0.0.1.2 Beta"
        multiDexEnabled true
    }
    dexOptions {
        javaMaxHeapSize "4g"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:25.2.0'
    compile 'com.android.support:support-v4:25.2.0'
    compile 'com.android.support:design:25.2.0'
    compile 'com.android.support:recyclerview-v7:25.2.0'
    compile 'com.android.support:cardview-v7:25.2.0'
    compile 'com.google.firebase:firebase-database:10.0.1'
    compile 'com.google.firebase:firebase-storage:10.0.1'
    compile 'com.google.firebase:firebase-config:10.0.1'
    compile 'com.google.firebase:firebase-crash:10.0.1'
    compile 'com.google.firebase:firebase-auth:10.0.1'
    compile 'com.google.firebase:firebase-common:10.0.1'
    compile 'com.google.android.gms:play-services-gcm:10.0.1'
    compile 'com.google.android.gms:play-services-auth:10.0.1'
    compile 'com.google.android.gms:play-services:10.0.1'

    compile 'com.android.support:multidex:1.0.1'

    // FirebaseUI Auth only
    compile 'com.firebaseui:firebase-ui-auth:1.0.1'
    compile 'com.firebaseui:firebase-ui-database:1.0.1'
    /*compile 'com.afollestad.material-dialogs:core:0.9.3.0'*/
    compile 'com.github.bumptech.glide:glide:3.6.1'
    compile 'de.hdodenhof:circleimageview:2.1.0'
    compile 'me.kareluo.ui:popmenu:1.1.0'
    compile 'com.android.support.constraint:constraint-layout:1.0.0-beta3'
    compile 'com.github.jd-alexander:LikeButton:0.2.0'
    compile 'com.dynamitechetan.flowinggradient:flowinggradient:1.1'
    compile 'com.github.castorflex.smoothprogressbar:library-circular:1.0.1'
    compile 'com.daimajia.numberprogressbar:library:1.4@aar'
    compile 'com.labo.kaji:relativepopupwindow:0.2.1'
    compile 'com.webianks.library:popup-bubble:1.0.3'
    compile 'com.zaaach:toprightmenu:1.0'
    compile 'com.squareup.picasso:picasso:2.5.2'
    compile 'com.android.support:palette-v7:25.2.0'
    compile 'com.github.jrvansuita:MaterialAbout:+'
    compile 'com.github.daniel-stoneuk:material-about-library:1.7.1'
    compile "com.mikepenz:iconics-core:2.8.2@aar"
    compile 'com.mikepenz:google-material-typeface:2.2.0.3.original@aar'
    compile 'com.mikepenz:community-material-typeface:1.7.22.1@aar'
    compile 'com.github.paolorotolo:appintro:3.4.0'
    compile 'com.android.support.constraint:constraint-layout:1.0.0-beta3'

}

apply plugin: 'com.google.gms.google-services'

发布后出现问题,我该如何解决,

【问题讨论】:

  • -ve 投票 为什么?有什么遗漏的请评论并通知,我会提供所有需要的细节...
  • 请贴一些代码。特别是,我们需要导致崩溃的代码行 (MainActivity.java:226) 和周围的方法。还从build.gradle 发布dependencies 部分。
  • 请稍等..
  • 如果您的应用程序在调试时运行良好,但在发布时产生错误,最常见的问题是您的自定义类被 ProGuard 混淆了。如果上述解决方案对您不起作用。您可能对this post 感兴趣
  • 你有glide,那你为什么需要毕加索?

标签: android firebase firebase-crash-reporting


【解决方案1】:

在我看来你忘了添加Picasso proguard 规则。如here所述:

如果您使用 ProGuard,您可能需要添加以下选项:

-dontwarn com.squareup.okhttp.**

proguard-rules.pro 中添加上述行。

【讨论】:

    猜你喜欢
    • 2020-06-01
    • 2018-03-07
    • 2020-04-06
    • 1970-01-01
    • 2015-02-10
    • 2022-06-16
    • 2016-12-11
    • 1970-01-01
    • 2010-11-27
    相关资源
    最近更新 更多