错误:无法在单个dex文件中放入请求的类。请尝试提供main-dex列表。 #methods:72477> 65536

问题描述 投票:135回答:17

我想添加融合位置服务,但它显示了一些错误。帮我。

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion "27.0.1"
    defaultConfig {
        applicationId "com.example.adil.bloodbankapplication"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:26.1.0'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    compile 'com.google.firebase:firebase-auth:11.8.0'
    compile 'com.google.firebase:firebase-database:11.8.0'
    compile 'com.android.support:support-v4:26.1.0'
    compile 'junit:junit:4.12'
    compile 'com.android.support:design:26.1.0'
    compile 'com.github.joielechong:countrycodepicker:2.1.5'
    compile 'com.jaredrummler:material-spinner:1.2.4'
    compile 'hanks.xyz:htextview-library:0.1.5'
    compile 'com.firebaseui:firebase-ui-database:1.2.0'
    compile 'com.google.android.gms:play-services:11.8.0'
}


apply plugin: 'com.google.gms.google-services'
android multidex
17个回答
193
投票

他们给你的答案都没有详尽无遗。问题出在Multidex上。您必须在app gradle中添加库:

implementation 'com.android.support:multidex:1.0.3'

之后,添加app gradle的defaultConfig:

multiDexEnabled true

您的应用程序必须是Multidex类型..您必须在清单中写入它:

android:name=".MyApplication"

“MyApplication”必须是Multidex类,或者必须扩展它。


6
投票

我不知道为什么,也许是因为我在Kotlin开发但是为了修复这个错误我最终必须创建一个扩展MultiDexApplication的类,如下所示:

class MyApplication : MultiDexApplication() {
}

在我的Manifest.xml我必须设置

<application
        ...
        android:name=".MyApplication">

不要混淆任何人,我也这样做:

multiDexEnabled true
implementation 'com.android.support:multidex:1.0.3'

对于androidx,这对我也有用:

implementation 'androidx.multidex:multidex:2.0.0'

...

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

不适合我


6
投票

我所要做的就是在File> Project Structure> App> Flavors中将Minimum SDK Version设置为21


6
投票
multiDexEnabled true

请尝试在您的应用defaultConfig {}中添加此内容。这有助于我解决问题


4
投票

我遇到过两次这个错误,解决方案是这样的;检查你的应用程序gradle文件以查看你的目标SDk,如果它是20或更高,只需添加一行到你的defaultconfig { multiDexEnabled true }

否则,如果您的targetSDK小于20,请将该行添加到defaultConfig并添加依赖项

implementation 'com.android.support:multidex:1.0.3'.

查看此链接了解更多信息。

https://developer.android.com/studio/build/multidex#mdex-gradle


4
投票

如果您将minifyEnabled与Proguard一起使用,则可能不需要启用multi-dex。我同意MG Developer的意见,如果可能的话,你应该尽量避免使用多重dex。我的解决方案是仅为调试版本启用multi-dex。 minifyEnabled解决了发布版本的问题

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    debug {
        // getting error: Cannot fit requested classes in a single dex file.  # methods: 65537 > 65536
        // https://developer.android.com/studio/build/multidex
        // minifyEnabled true (used with release) will fix this by getting rid of unused method calls, but this will hide debugging info on crash
        multiDexEnabled true
    }
}

2
投票

在构建:应用程序

apply plugin: 'com.android.application'
android {
compileSdkVersion 28
defaultConfig {
    applicationId "com.proyecto.marketdillo"
    minSdkVersion 14
    targetSdkVersion 28
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    multiDexEnabled true
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
  }
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0-rc02'
implementation 'com.google.firebase:firebase-core:16.0.7'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.android.support:support-v4:28.0.0-rc02'
implementation 'com.android.support:design:28.0.0-rc02'
implementation 'com.google.firebase:firebase-auth:16.1.0'
implementation 'com.squareup.picasso:picasso:2.5.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'com.google.firebase:firebase-firestore:17.1.5'
implementation 'com.android.support:multidex:1.0.3'
}
apply plugin: 'com.google.gms.google-services'

1
投票

使用multidex支持应该是最后的选择。默认情况下,gradle build会为你的APK收集大量的传递依赖。根据Google Developers Docs的建议,首先尝试从项目中删除不必要的依赖项。

使用命令行导航到Android Projects Root。您可以按如下方式获取编译依赖关系树。

gradlew app:dependencies --configuration debugCompileClasspath

您可以获得依赖关系树的完整列表

gradlew app:dependencies

enter image description here

然后从app build.gradle中删除不必要的或传递的依赖项。例如,如果您的应用使用名为“com.google.api-client”的依赖项,则可以排除不需要的库/模块。

implementation ('com.google.api-client:google-api-client-android:1.28.0'){
   exclude group: 'org.apache.httpcomponents'
   exclude group: 'com.google.guava'
   exclude group: 'com.fasterxml.jackson.core'
   }

然后在Android Studio中选择Build> Analyze APK ...选择release / debug APK文件以查看内容。这将为您提供如下方法和引用计数。

Analyze APK


0
投票
android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.dev.khamsat"
        minSdkVersion 16
        targetSdkVersion 28
        versionCode 1
        versionName "2.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }

0
投票

对于扑动项目,您也可以解决此问题

打开你的\ android \ app \ build.gradle

你应该有以下几点:

android {
    defaultConfig {
        ...
        minSdkVersion 16
        targetSdkVersion 28

    }

}

如果你的minSdkVersion设置为21或更高,你需要做的就是在defaultConfig中将multiDexEnabled设置为true。像这样

android {
    defaultConfig {
        ...
        minSdkVersion 16
        targetSdkVersion 28
        multiDexEnabled true 

    }

}

如果你的minSdkVersion设置为20或更低,则将multiDexEnabled为true添加到defaultConfig

并定义实现

dependencies {
  implementation 'com.android.support:multidex:1.0.3'
}

最后你应该:

android {
    defaultConfig {
        ...
        minSdkVersion 16
        targetSdkVersion 28
        multiDexEnabled true  // added this
    }

}

dependencies {
  implementation 'com.android.support:multidex:1.0.3'
}

欲了解更多信息,请阅读:https://developer.android.com/studio/build/multidex


97
投票

我用下面的解决方案修复了我的问题:

在Gradle构建文件中,添加依赖项:

实现'com.android.support:multidex:1.0.3'

然后在“defaultConfig”部分中添加:

multiDexEnabled是的


57
投票

修改你的应用程序或模块的build.gradle

android {
    defaultConfig {
        ...
        minSdkVersion 21 <----- *here
        targetSdkVersion 26
        multiDexEnabled true <------ *here
    }
    ...
}

根据官方文件

适用于Android 5.0及更高版本的Multidex支持

Android 5.0(API级别21)及更高版本使用名为ART的运行时,它本身支持从APK文件加载多个DEX文件。 ART在app安装时执行预编译,扫描classesN.dex文件并将它们编译成单个.oat文件,以供Android设备执行。因此,如果您的minSdkVersion为21或更高,则不需要multidex支持库。

有关Android 5.0运行时的更多信息,请阅读ART和Dalvik。

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


34
投票

你可以关注this

Android 5.0(API级别21)之前的平台版本使用Dalvik运行时来执行应用程序代码。默认情况下,Dalvik将应用程序限制为每个APK的单个classes.dex字节码文件。为了解决此限制,您可以将multidex支持库添加到项目中:

dependencies {
  implementation 'com.android.support:multidex:1.0.3'
}

如果你的minSdkVersion设置为21或更高,你需要做的就是在你的模块级build.gradle文件中将multiDexEnabled设置为true,如下所示:

android {
    defaultConfig {
        ...
        minSdkVersion 21 
        targetSdkVersion 28
        multiDexEnabled true
    }
    ...
}

21
投票

嗨问题在这里删除它

compile 'com.google.android.gms:play-services:11.8.0'

为什么?

注意:请勿使用组合的播放服务目标。它带来了数十个库,使您的应用程序膨胀。而是仅指定您的应用使用的特定Google Play服务API。

并使用你需要的东西.https://developers.google.com/android/guides/setup

喜欢定位服务

com.google.android.gms:play-services-location:11.8.0

对于云消息传递

com.google.android.gms:play-services-gcm:11.8.0

17
投票

如果您正在构建DEBUG APK,只需添加:

debug {
            multiDexEnabled true
        }

buildTypes

如果您正在构建RELEASE APK,请在发布块中添加multiDexEnabled true-

release {
                ...
                multiDexEnabled true
                ...
        }

10
投票

只需执行以下操作:

的build.gradle

(module:app)


android {
            ....
      defaultConfig {
              multiDexEnabled true // enable mun
      }
}

并在build.gradle应用程序级别文件中添加以下依赖项

dependencies {
    implementation 'com.android.support:multidex:1.0.3'
} 

8
投票

你有太多的方法计数。 Android dex文件限制为允许的65536种方法。

对于初学者,如果您不需要所有的Google Play服务API并且只需要位置,请替换

compile 'com.google.android.gms:play-services:11.8.0'

compile 'com.google.android.gms:play-services-location:11.8.0'

您可以参考此页面以了解避免它的方法,或者如果需要允许更多:https://developer.android.com/studio/build/multidex.html


8
投票

在Gradle构建文件中,添加依赖项:

implementation 'com.android.support:multidex:1.0.2'

要么

implementation 'com.android.support:multidex:1.0.3'

要么

implementation 'com.android.support:multidex:2.0.0'

然后在“defaultConfig”部分中添加:

multiDexEnabled true

在targetSdkVersion下

   minSdkVersion 17
    targetSdkVersion 27
    multiDexEnabled true

现在,如果您遇到此错误

错误:无法解决:multidex-instrumentation打开文件

您需要将您的gradle更改为3.0.1

        classpath 'com.android.tools.build:gradle:3.0.1'

并将以下代码放在gradle-wrapper.properties文件中

distributionUrl = HTTPS://services.gradle.org/distributions/gradle-4.1-all.zip

最后

在项目中添加类Applition并将其引入AndroidManifest,它是从MultiDexApplication扩展而来的

public class App extends MultiDexApplication {

@Override
public void onCreate( ) {
    super.onCreate( );
}

}

首先运行项目以创建错误,然后清理项目

最后,重新启动项目并享受它

© www.soinside.com 2019 - 2024. All rights reserved.