no java stack,引起:java.lang.NoClassDefFoundError:使用引导类加载器找不到类;没有堆栈跟踪可用...

开发者尝试通过OkHttp和Picasso在Android应用中缓存Firebase Storage的图片,但遇到NoClassDefFoundError。文章探讨了错误原因、尝试过的解决方案,包括启用MultiDex和检查哪些类需要保留在基础APK中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

I tried using OkHttp and Picasso (following this answer) for disk caching of images that I was downloading from Firebase storage. Now, the app gives exceptions and crashes. I have seen these posts: post 1, post 2 but I didn't find any relevant solutions. I also tried to clean and rebuild the project but had no luck.

Here is build.gradle:

apply plugin: 'com.android.application'

android {

compileSdkVersion 25

buildToolsVersion "25.0.2"

defaultConfig {

applicationId "social.com.networking.social.media.app"

minSdkVersion 16

targetSdkVersion 25

versionCode 1

versionName "1.0"

testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

}

buildTypes {

release {

minifyEnabled false

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

multiDexEnabled true

}

}

}

dependencies {

compile fileTree(dir: 'libs', include: ['*.jar'])

androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {

exclude group: 'com.android.support', module: 'support-annotations'

})

compile 'com.android.support:appcompat-v7:25.1.0'

compile 'com.android.support:design:25.1.0'

compile 'br.com.mauker.materialsearchview:materialsearchview:1.2.0'

compile 'com.alirezaafkar:toolbar:1.1.1'

compile 'com.github.mancj:MaterialSearchBar:0.3.5'

compile 'com.squareup.picasso:picasso:2.5.2'

compile 'com.nineoldandroids:library:2.4.0'

compile 'com.daimajia.slider:library:1.1.5@aar'

compile 'com.google.code.gson:gson:2.6.2'

compile 'com.google.firebase:firebase-core:10.0.1'

compile 'com.google.firebase:firebase-ads:10.0.1'

compile 'com.google.firebase:firebase-messaging:10.0.1'

compile "com.google.firebase:firebase-auth:10.0.1"

compile 'com.google.firebase:firebase-storage:10.0.1'

compile 'com.google.firebase:firebase-crash:10.0.1'

compile 'com.squareup.okhttp3:okhttp:3.2.0'

compile 'com.jakewharton.picasso:picasso2-okhttp3-downloader:1.0.2'

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

compile 'org.parceler:parceler-api:1.1.6'

annotationProcessor 'org.parceler:parceler:1.1.6'

testCompile 'junit:junit:4.12'

}

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

Full Stacktrace:

Process: social.com.networking.social.media.app, PID: 28258

java.lang.NoClassDefFoundError: Failed resolution of: Lcom/squareup/okhttp/OkHttpClient;

at com.squareup.picasso.OkHttpDownloader.defaultOkHttpClient(OkHttpDownloader.java:31)

at com.squareup.picasso.OkHttpDownloader.(OkHttpDownloader.java:76)

at com.squareup.picasso.OkHttpDownloader.(OkHttpDownloader.java:65)

at social.com.networkingsocialmediaapp.Global.onCreate(Global.java:17)

at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1018)

at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4991)

at android.app.ActivityThread.-wrap1(ActivityThread.java)

at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1555)

at android.os.Handler.dispatchMessage(Handler.java:111)

at android.os.Looper.loop(Looper.java:207)

at android.app.ActivityThread.main(ActivityThread.java:5776)

at java.lang.reflect.Method.invoke(Native Method)

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)

Caused by: java.lang.ClassNotFoundException: Didn't find class "com.squareup.okhttp.OkHttpClient" on path: DexPathList[[zip file "/data/app/social.com.networking.social.media.app-2/base.apk"],nativeLibraryDirectories=[/data/app/social.com.networking.social.media.app-2/lib/arm64, /vendor/lib64, /system/lib64]]

at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)

at java.lang.ClassLoader.loadClass(ClassLoader.java:511)

at java.lang.ClassLoader.loadClass(ClassLoader.java:469)

at com.squareup.picasso.OkHttpDownloader.defaultOkHttpClient(OkHttpDownloader.java:31)

at com.squareup.picasso.OkHttpDownloader.(OkHttpDownloader.java:76)

at com.squareup.picasso.OkHttpDownloader.(OkHttpDownloader.java:65)

at social.com.networkingsocialmediaapp.Global.onCreate(Global.java:17)

at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1018)

at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4991)

at android.app.ActivityThread.-wrap1(ActivityThread.java)

at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1555)

at android.os.Handler.dispatchMessage(Handler.java:111)

at android.os.Looper.loop(Looper.java:207)

at android.app.ActivityThread.main(ActivityThread.java:5776)

at java.lang.reflect.Method.invoke(Native Method)

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)

Suppressed: java.lang.ClassNotFoundException: com.squareup.okhttp.OkHttpClient

at java.lang.Class.classForName(Native Method)

at java.lang.BootClassLoader.findClass(ClassLoader.java:781)

at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)

at java.lang.ClassLoader.loadClass(ClassLoader.java:504)

... 15 more

Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available

Edit 1:

I have enabled MultiDex as Redman said but it still gives the same error. According to this: developer.android.com/studio/build/multidex.html#keep, I need to decide which classes are necessary in the base APK. How do I determine which classes are necessary?

解决方案

In Android Studio 2.3 and higher, There is Instant Run which may affect your code.

Disable Instant Run

File -> Settings -> Build, Execution, Deployment -> Instant Run

In my case it was working perfect when run from Android Studio but

crashing when install from other sources

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值