Android OkHttpClient的NoClassDefFoundError
在gradle中添加facebook依赖项后,我遇到以下运行时错误:Android OkHttpClient的NoClassDefFoundError,android,facebook,classnotfoundexception,Android,Facebook,Classnotfoundexception,在gradle中添加facebook依赖项后,我遇到以下运行时错误: compile 'com.facebook.android:facebook-android-sdk:4.6.0' 请注意,我也在使用okhttp: compile 'com.squareup.okhttp:okhttp:2.5.0' 错误日志为: E/AndroidRuntime: FATAL EXCEPTION: Thread-109754 Process: com.venkat.proj
compile 'com.facebook.android:facebook-android-sdk:4.6.0'
请注意,我也在使用okhttp:
compile 'com.squareup.okhttp:okhttp:2.5.0'
错误日志为:
E/AndroidRuntime: FATAL EXCEPTION: Thread-109754
Process: com.venkat.project, PID: 4453
java.lang.NoClassDefFoundError: com.squareup.okhttp.internal.Util
at com.squareup.okhttp.OkHttpClient.<clinit>(OkHttpClient.java:57)
at com.venkat.project.http.MyHTTPThread.run(MyHTTPThread.java:127)
at com.venkat.project.http.MyHTTPThread.run(MyHTTPThread.java:61)
at java.lang.Thread.run(Thread.java:841)
02-23 18:11:02.729 4453-4573/com.venkat.project I/dalvikvm: Rejecting re-init on previously-failed class Lcom/squareup/okhttp/OkHttpClient; v=0x0
E/AndroidRuntime:致命异常:线程-109754
流程:com.venkat.project,PID:4453
java.lang.NoClassDefFoundError:com.squareup.okhttp.internal.Util
在com.squareup.okhttp.OkHttpClient.(OkHttpClient.java:57)
位于com.venkat.project.http.MyHTTPThread.run(MyHTTPThread.java:127)
位于com.venkat.project.http.MyHTTPThread.run(MyHTTPThread.java:61)
运行(Thread.java:841)
02-23 18:11:02.729 4453-4573/com.venkat.project I/dalvikvm:拒绝在以前失败的类Lcom/squareup/okhttp/OkHttpClient上重新初始化;v=0x0
注意:我在Samsung mobile 4.4上遇到这个错误,但在emulator和moto g 5.0上它可以正常工作。
对Android 5.0及更高版本的多索引支持
Android 5.0及更高版本使用一个名为ART的运行时,该运行时在本地
支持从应用程序APK文件加载多个dex文件。艺术
在应用程序安装时执行预编译,扫描
类(…N).dex文件,并将其编译为单个.oat文件,以便
由Android设备执行。更多关于Android的信息
5.0运行时,请参见介绍艺术。这意味着您的应用程序在API级别21或更高级别上运行良好
Android 5.0之前的多索引支持
Android 5.0之前的平台版本使用Dalvik运行时
用于执行应用程序代码。默认情况下,Dalvik将应用程序限制为单个
每个APK的classes.dex字节码文件。为了避开这个
限制,您可以使用multidex支持库,它将成为
应用程序的主DEX文件的一部分,然后管理对
附加的DEX文件及其包含的代码
尝试添加这个
dependencies {
compile 'com.android.support:multidex:1.0.0'
}
在清单中,将multidex支持库中的MultiDexApplication类添加到application元素
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.multidex.myapplication">
<application
...
android:name="android.support.multidex.MultiDexApplication">
...
</application>
</manifest>
最后,您需要通过添加multiDexEnabled true更新build.gradle文件,如下所示:
defaultConfig {
applicationId '{Project Name}'
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
multiDexEnabled true
}
我希望它能帮到你。你越来越
java.lang.NoClassDefFoundError: com.squareup.okhttp.internal.Util
at com.squareup.okhttp.OkHttpClient.<clinit>(OkHttpClient.java:57)
at com.venkat.project.http.MyHTTPThread.run(MyHTTPThread.java:127)
at com.venkat.project.http.MyHTTPThread.run(MyHTTPThread.java:61)
如果Java虚拟机或类加载器实例尝试
在类的定义中加载(作为普通方法调用的一部分或
作为使用新表达式创建新实例的一部分)和
可以找到该类的定义
引用
你应该使用
compile 'com.facebook.android:facebook-android-sdk:4.10.0'
之后,您可以使用非零退出值2完成此错误
然后
defaultConfig {
...
minSdkVersion 14 //lower than 14 doesn't support multidex
targetSdkVersion //Yours
// Enabling multidex support.
multiDexEnabled true
}
dependencies {
implementation 'com.android.support:multidex:1.0.0'
}
implementation'com.android.support:multidex:1.0.2'
implementation'com.squareup.okhttp3:okhttp:3.2.0'
然后
清理并重新构建和同步您的项目。希望这有帮助。看起来您已经启用了proguard。
如果应用程序中不需要proguard,则可以在build.gradle(应用程序)中禁用它
如果您的应用程序中需要proguard,请按照Jake Wharton先生解决的方法进行操作 最新版本的Piccasso使用旧版本的Okhttp,您需要使用新的依赖项
compile 'com.squareup.okhttp3:okhttp:3.2.0'
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.jakewharton.picasso:picasso2-okhttp3-downloader:1.0.2'
例如:
File httpCacheDirectory = new File(getCacheDir(), "picasso-cache");
Cache cache = new Cache(httpCacheDirectory, 10 * 1024 * 1024);
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder().cache(cache);
Picasso.Builder picassoBuilder = new Picasso.Builder(getApplicationContext());
picassoBuilder.downloader(new OkHttp3Downloader(clientBuilder.build()));
Picasso picasso = picassoBuilder.build();
try {
Picasso.setSingletonInstance(picasso);
} catch (IllegalStateException ignored) {
Log.e(LOG_TAG, "Picasso instance already used");
}
清洁并构建您的project@MD没用。获取相同错误。请尝试打开apk并取消类的绑定。检查索引中是否包含Util类。作为一种临时解决方法,您可以从源代码中复制类并将其包含在代码中。这样,它将出现在您的类路径中。(这里我强调工作“变通”和“临时)”@Radovan如果我删除gradle中的facebook依赖项,应用程序正在运行。。。但如果我加上它,就给error@Venu还面临同样的问题吗?已经为元素“activity”指定了属性“name”@marco我不明白你的意思吗?你为什么不投票请告诉我。我犯了什么错误。
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
compile 'com.squareup.okhttp3:okhttp:3.2.0'
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.jakewharton.picasso:picasso2-okhttp3-downloader:1.0.2'
File httpCacheDirectory = new File(getCacheDir(), "picasso-cache");
Cache cache = new Cache(httpCacheDirectory, 10 * 1024 * 1024);
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder().cache(cache);
Picasso.Builder picassoBuilder = new Picasso.Builder(getApplicationContext());
picassoBuilder.downloader(new OkHttp3Downloader(clientBuilder.build()));
Picasso picasso = picassoBuilder.build();
try {
Picasso.setSingletonInstance(picasso);
} catch (IllegalStateException ignored) {
Log.e(LOG_TAG, "Picasso instance already used");
}