在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.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注意:我在三星手机4.4上得到了这个错误,但是在模拟器和moto g 5.0上,它是可以工作的。
发布于 2016-02-29 06:05:24
你得到了
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)NoClassDefFoundError for OkHttpClient
public class NoClassDefFoundError extends LinkageError如果或ClassLoader实例试图加载类的定义(作为普通方法调用的一部分或作为使用新表达式创建新实例的一部分),则抛出,则无法找到该类的定义。
来自NoClassDefFoundError的报价
你应该用
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'当网络遇到麻烦时,OkHttp会坚持下去:它会从常见的连接问题中默默地恢复过来。如果您的服务有多个IP地址,如果第一个连接失败,OkHttp将尝试备用地址。这对于IPv4+IPv6和驻留在冗余数据中心中的服务来说是必要的。
您可以调用最新版本。
implementation'com.squareup.okhttp3:okhttp:3.2.0'然后
Clean and Re-Build & Sync你的项目。希望这能有所帮助。
发布于 2016-08-02 08:11:04
最新版本的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");
}发布于 2016-02-29 05:20:04
https://developer.android.com/tools/building/multidex.html
Android5.0及更高版本的Multidex支持
Android5.0及更高版本使用称为ART的运行时,它本机支持从应用程序APK文件加载多个dex文件。ART在应用程序安装时执行预编译,扫描类(..N).dex文件,并将它们编译成单个.oat文件,由安卓设备执行。有关Android5.0运行时的更多信息,请参见介绍ART。这意味着您的应用程序在API 21级或更高级别上可以正常工作。
Android5.0之前的Multidex支持
Android5.0之前的平台版本使用Dalvik运行时来执行应用程序代码。默认情况下,Dalvik将每个APK的应用程序限制为一个classes.dex字节码文件。为了克服这个限制,您可以使用multidex支持库,它成为应用程序的主DEX文件的一部分,然后管理对其他DEX文件及其包含的代码的访问。
尝试添加以下内容
dependencies {
compile 'com.android.support:multidex:1.0.0'
}在清单中,将MultiDexApplication类从multidex支持库添加到应用程序元素。
<?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>除此之外,如果应用程序扩展了应用程序类,则可以重写attachBaseContext()方法并调用MultiDex.install(this)来启用multidex。
public void onCreate(Bundle arguments) {
MultiDex.install(getTargetContext());
super.onCreate(arguments);
...
}最后,您需要按下面的方式更新build.gradle文件,方法是添加multiDexEnabled true:
defaultConfig {
applicationId '{Project Name}'
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
multiDexEnabled true
} 我希望它能帮到你。
https://stackoverflow.com/questions/35578135
复制相似问题