Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android OkHttpClient的NoClassDefFoundError_Android_Facebook_Classnotfoundexception - Fatal编程技术网

Android OkHttpClient的NoClassDefFoundError

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

在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
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'

  • 当网络出现问题时,OkHttp会保持不变:它会保持沉默 从常见的连接问题中恢复。如果您的服务有多个 IP地址OkHttp将尝试替换地址,如果第一个 连接失败。这对于IPv4+IPv6和托管服务是必需的 在冗余数据中心

    您可以调用最新版本

    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");
    }