应用程序只在棒棒糖设备上崩溃

应用程序在所有操作系统上工作正常,但是当我添加Facebook的SDK,它给了我下面的棒棒糖设备的错误信息。

compile 'com.facebook.android:facebook-android-sdk:4.20.0' 

导致:java.lang.ClassNotFoundException:没有find类“retrofit2.Retrofit $生成器”的path:DexPathList [[zip文件“/ data / app.myapp.app-3 / base.apk”,zip文件

java.lang.NoClassDefFoundError:失败的解决scheme:Lretrofit2 / Retrofit $ Builder; 导致:java.lang.ClassNotFoundException:没有find类“retrofit2.Retrofit $生成器”的path:DexPathList [[zip文件“/ data / app.myapp.app-3 / base.apk”,zip文件“/ data / app / com.myapp.app-3 / split_lib_dependencies_apk.apk”,

这是我的gradle文件。

 compileSdkVersion 25 buildToolsVersion "25.0.0" defaultConfig { applicationId 'com.myapp.app' minSdkVersion 21 targetSdkVersion 23 versionCode 122 versionName "1.2.5" multiDexEnabled true ndk { abiFilters "armeabi", "armeabi-v7a", "x86" } configurations.all { resolutionStrategy { force 'com.squareup.okhttp:okhttp:2.4.0' force 'com.squareup.okhttp:okhttp-urlconnection:2.0.0' force 'com.squareup.okio:okio:1.11.0' force 'com.squareup.okhttp3:okhttp:3.6.0' force 'com.squareup.retrofit2:retrofit:2.2.0' force 'com.android.support:recyclerview-v7:25.0.0' force 'com.android.support:support-v4:25.0.0' force 'com.android.support:cardview-v7:25.0.0' force 'com.android.support:appcompat-v7:25.0.0' force 'com.android.support:design:25.0.0' force 'com.android.support:support-annotations:25.0.0' force 'com.google.android.gms:play-services-ads:9.0.1' force 'com.google.android.gms:play-services-location:9.0.1' force 'com.google.android.gms:play-services-auth-base:9.0.1' force 'com.google.android.gms:play-services-base:9.0.1' } configurations.all { resolutionStrategy { failOnVersionConflict() } } 

请引导我,这是什么原因造成的,以及为什么它只在棒棒糖设备上崩溃,并在棉花糖和牛轧糖工作正常。

编辑

如果我不使用Facebook的SDK,一切都很好,没有崩溃。 也许Facebook的SDK导致这个问题,但我不知道为什么

Solutions Collecting From Web of "应用程序只在棒棒糖设备上崩溃"

你使用的库过多,所以你的方法已经跨越了64K,所以你必须为你的项目启用Multidex

在你的build.gradle里面

  android { defaultConfig { ... minSdkVersion 15 targetSdkVersion 25 multiDexEnabled true } ... } dependencies { compile 'com.android.support:multidex:1.0.1' } 

AndroidManifest.xml

  <application android:name="android.support.multidex.MultiDexApplication" > ... </application> 

看到这个更多的信息

在我的案例这解决了我的问题在应用程序类中,你需要

  @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } 

我可以看到的主要问题是,通过在项目中添加大量库,已经超出了方法限制。 Android应用程序有一定的方法限制。 为了使你的代码更高效,我build议你删除所有不必要的库,比如你为什么要同时使用“Retrofit”和“OkHttp”? 你可以完成任何一项工作。 但是,如果你想使用所有这些库,那么你必须允许你的应用程序使用“Multidex”。 这是允许“Multidex”使用的方法。

https://developer.android.com/studio/build/multidex

但我不会build议使用这个。 因为这会加载你的应用程序,并将需要更多的空间在电话的内存select是你的!

你正在得到ClassNotFoundException

当Java虚拟机(JVM)尝试加载特定的类并且在类path中找不到指定的类时,会引发ClassNotFoundException。

起初你应该设置Multidex

Android应用程序(APK)文件包含Dalvik Executable(DEX)文件forms的可执行字节码文件,其中包含用于运行应用程序的编译代码。 Dalvik Executable规范将单个DEX文件中可引用的方法总数限制为65,536个,包括您自己代码中的Android框架方法,库方法和方法。 超越此限制要求您configuration您的应用程序生成过程以生成多个DEX文件(称为multidexconfiguration)。

你应该使用最新版本

  compileSdkVersion 25 buildToolsVersion '25.0.2' defaultConfig { applicationId 'com.myapp.app' minSdkVersion 21 targetSdkVersion 25 // Good approach using same version of compileSdkVersion versionCode 122 versionName "1.2.5" multiDexEnabled true ndk { abiFilters "armeabi", "armeabi-v7a", "x86" } configurations.all { resolutionStrategy { force 'com.squareup.okhttp:okhttp:3.7.0' force 'com.squareup.okhttp:okhttp-urlconnection:2.7.5' force 'com.squareup.okio:okio:1.12.0' force 'com.squareup.okhttp3:okhttp:3.7.0' force 'com.squareup.retrofit2:retrofit:2.2.0' force 'com.android.support:recyclerview-v7:25.2.0' force 'com.android.support:support-v4:25.2.0' force 'com.android.support:cardview-v7:25.2.0' force 'com.android.support:appcompat-v7:25.2.0' force 'com.android.support:design:25.2.0' force 'com.android.support:support-annotations:25.2.0' force 'com.google.android.gms:play-services-ads:10.2.1' force 'com.google.android.gms:play-services-location:10.2.1' force 'com.google.android.gms:play-services-auth-base:10.2.1' force 'com.google.android.gms:play-services-base:10.2.1' } configurations.all { resolutionStrategy { failOnVersionConflict() } } 

在那之后, Clean-Rebuild-Run。

FYI

如果4.20.0崩溃,则可以使用以下版本。

 compile 'com.facebook.android:facebook-android-sdk:4.16.0'