Error:Cannot fit requested classes in a single dex file.Try supplying a main-dex list. # methods: 72477 > 65536

…衆ロ難τιáo~ 提交于 2019-11-26 12:16:41

问题


I want to add fused location services but it shows me some error. Help me.

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

回答1:


None of the answers they gave you were exhaustive. The problem lies in the Multidex. You must add the library in the app gradle :

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

After, add in the defaultConfig of the app gradle :

multiDexEnabled true

Your Application must be of the Multidex type.. You must write it in the manifest :

android:name=".MyApplication"

"MyApplication" must be either the Multidex class, or it must extend it.




回答2:


I fixed my problem with the solution below:

In Gradle build file, add dependency:

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

And then in the "defaultConfig" section, add:

multiDexEnabled true




回答3:


modify your app's or module's build.gradle

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

According to official documentation

Multidex support for Android 5.0 and higher

Android 5.0 (API level 21) and higher uses a runtime called ART which natively supports loading multiple DEX files from APK files. ART performs pre-compilation at app install time which scans for classesN.dex files and compiles them into a single .oat file for execution by the Android device. Therefore, if your minSdkVersion is 21 or higher, you do not need the multidex support library.

For more information on the Android 5.0 runtime, read ART and Dalvik.

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




回答4:


You can follow this.

Versions of the platform prior to Android 5.0 (API level 21) use the Dalvik runtime for executing app code. By default, Dalvik limits apps to a single classes.dex bytecode file per APK. In order to get around this limitation, you can add the multidex support library to your project:

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

If your minSdkVersion is set to 21 or higher, all you need to do is set multiDexEnabled to true in your module-level build.gradle file, as shown here:

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



回答5:


Hi problem is here remove it

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

why?

Note: Don't use the combined play-services target. It brings in dozens of libraries, bloating your application. Instead, specify only the specific Google Play services APIs your app uses.

And use what you need.https://developers.google.com/android/guides/setup

Like for location service

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

For Cloud Messaging

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



回答6:


If you are building DEBUG APK, just add:

debug {
            multiDexEnabled true
        }

inside buildTypes

and if you are building RELEASE APK, add multiDexEnabled true in release block as-

release {
                ...
                multiDexEnabled true
                ...
        }



回答7:


Just do the following:

build.gradle

(module:app)


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

And add below dependency in your build.gradle app level file

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



回答8:


For flutter projects you can also solve this issue

open your \android\app\build.gradle

you sould have the following:

android {
    defaultConfig {
        ...
        minSdkVersion 16
        targetSdkVersion 28

    }

}

If your minSdkVersion is set to 21 or higher, all you need to do is set multiDexEnabled to true in the defaultConfig. Like this

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

    }

}

if your minSdkVersion is set to 20 or lower add multiDexEnabled true to the defaultConfig

And define the implementation

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

At the end you should have:

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

}

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

For more information read this: https://developer.android.com/studio/build/multidex




回答9:


You have too many methods count. Android dex file has a limit of 65536 methods you are allowed to have.

For starters, if you don't need all of google play services API and just the location, replace

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

with

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

You can refer to this page for ways to avoid it or if needed to allow more: https://developer.android.com/studio/build/multidex.html




回答10:


In Gradle build file, add dependency:

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

or

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

or

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

And then in the "defaultConfig" section, add:

multiDexEnabled true

Under targetSdkVersion

   minSdkVersion 17
    targetSdkVersion 27
    multiDexEnabled true

Now if you encounter this error

Error:Failed to resolve: multidex-instrumentation Open File

You need to change your gradle to 3.0.1

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

And put the following code in the file gradle-wrapper.properties

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

Finally

add class Applition in project And introduce it to the AndroidManifest Which is extends from MultiDexApplication

public class App extends MultiDexApplication {

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

}

Run the project first to create an error, then clean the project

Finally, Re-launch the project and enjoy it




回答11:


multiDexEnabled true

Please try adding this in your app defaultConfig {}.This help me to solve the problem




回答12:


If you are using minifyEnabled with Proguard, you likely won't need to enable multi-dex. I agree with MG Developer that you should try to avoid multi-dex if possible. My solution was to enable multi-dex only for debug builds. minifyEnabled solves the problem for release builds

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
    }
}



回答13:


I have no idea why, maybe it is because I develop in Kotlin but to fix this error I finally have to create a class that extends MultiDexApplication like this:

class MyApplication : MultiDexApplication() {
}

and in my Manifest.xml I have to set

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

to not confuse anyone, I also do:

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

for androidx, this also works for me:

implementation 'androidx.multidex:multidex:2.0.0'

...

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

does not work for me




回答14:


All I had to do was set the Minimum SDK Version to 21 in File > Project Structure > App > Flavors




回答15:


when you are using dependencies so your methods increased! google has a solution for that. that called Multidex!

NOTE: be sure that min SDK is over 14.

in your build.gradle :

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



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

FOR androidx USE :

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

for Reade more please go to Orginal link :

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




回答16:


I have encountered this error twice and the solution for this is; Check you app gradle file to see your target SDk, if it is 20 or higher, just add one line to your defaultconfig { multiDexEnabled true }

Else if your targetSDK is less than 20, add the line to your defaultConfig and also add a dependency

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

Check this link for more.

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




回答17:


Using multidex support should be the last resort. By default gradle build will collect a ton of transitive dependencies for your APK. As recommended in Google Developers Docs, first attempt to remove unnecessary dependencies from your project.

Using command line navigate to Android Projects Root. You can get the compile dependency tree as follows.

gradlew app:dependencies --configuration debugCompileClasspath

You can get full list of dependency tree

gradlew app:dependencies

Then remove the unnecessary or transitive dependencies from your app build.gradle. As an example if your app uses dependency called 'com.google.api-client' you can exclude the libraries/modules you do not need.

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

Then in Android Studio Select Build > Analyze APK... Select the release/debug APK file to see the contents. This will give you the methods and references count as follows.




回答18:


In build:app

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'



回答19:


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
    }


来源:https://stackoverflow.com/questions/48249633/errorcannot-fit-requested-classes-in-a-single-dex-file-try-supplying-a-main-dex

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!