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

我想添加融合的位置服务,但它告诉我一些错误。 帮助我。< / p >

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'
443998 次浏览

你的方法太多了。 Android dex文件有65536个方法的限制

对于初学者来说,如果你不需要谷歌播放服务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 < / p >

他的问题在这里,移除它

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

为什么?

不要使用组合play-services目标。它带来了几十个库,使您的应用程序变得臃肿。相反,只指定应用程序使用的特定谷歌Play服务api。

并使用你需要的

比如位置服务

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

对于云消息传递

com.google.android.gms:play-services-gcm:11.8.0
他们给你的答案都不详尽。 问题出在Multidex上。 你必须在应用gradle中添加这个库:

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

之后,在应用gradle的defaultConfig中添加:

multiDexEnabled true

你的应用程序必须是Multidex类型。 你必须把它写在manifest:

android:name=".MyApplication"

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

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

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

实现“com.android.support: multidex: 1.0.3”

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

multiDexEnabled真实

如果你正在构建调试的APK,只需添加:

debug {
multiDexEnabled true
}

内部buildTypes

如果你正在构建释放的APK,添加 multiDexEnabled true在释放块as-

release {
...
multiDexEnabled true
...
}
我不知道为什么,也许是因为我在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">

对我没用吗

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

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

根据官方文件

Android 5.0及更高版本的Multidex支持

Android 5.0 (API级别21) and higher使用一个叫做ART的运行时,它本身支持加载 APK文件中的多个DEX文件。ART在应用程序中执行预编译 安装时间扫描classesN.dex文件并将它们编译成 Android设备执行的单个.燕麦文件。因此,如果 你的minSdkVersion是21或更高,你不需要multidex 支持库。< /强> < / em > < / p >

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

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

我所要做的就是在文件>项目结构>应用>口味中将最低SDK版本设置为21

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

然后在quot;defaultConfig"部分,添加:

multiDexEnabled true

在targetSdkVersion

minSdkVersion 17
targetSdkVersion 27
multiDexEnabled true

如果你遇到这个错误

错误:Failed to resolve: multidex-instrumentation Open File

您需要将gradle更改为3.0.1

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

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

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

最后

在项目中添加类application并将其引入到AndroidManifest中 这是MultiDexApplication

public class App extends MultiDexApplication {


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

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

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

我遇到过这个错误两次,解决方案是;检查你的应用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

multiDexEnabled true

请尝试将此添加到您的应用程序defaultConfig{}。这帮我解决了问题

你可以遵循

Android 5.0 (API级别21)之前的平台版本使用Dalvik运行时执行应用程序代码。默认情况下,Dalvik限制每个APK只能使用一个classes.dex字节码文件。为了绕过这个限制,你可以在你的项目中添加multidex支持库:

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

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

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

只需要做以下几点:

build.gradle

(module:app)




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

并在你的build.gradle应用级文件中添加以下依赖项

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

在构建应用程序

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

使用multidex支持应该是最后的手段。默认情况下,gradle构建会为你的APK收集大量的可传递依赖项。正如谷歌开发者文档中所建议的,首先尝试从项目中删除不必要的依赖项。

使用命令行导航到Android项目根目录。 您可以获得如下所示的编译依赖项树。< / p >
gradlew app:dependencies --configuration debugCompileClasspath

你可以得到完整的依赖树列表

gradlew app:dependencies

enter image description here

然后从应用build.gradle中删除不必要的或可传递的依赖项。作为一个例子,如果你的应用程序使用名为“com.google的依赖。你可以排除你不需要的库/模块。

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… 选择发布/调试APK文件以查看内容。这将给出方法和引用计数,如下所示

Analyze APK

如果你在Proguard中使用minifyEnabled,你可能不需要启用multi-dex。我同意MG Developer的观点,如果可能的话,你应该尽量避免使用多重索引。我的解决方案是只对调试版本启用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
}
}

颤振工程你也可以解决这个问题

打开你的\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真实添加到defaultConfig

并定义实现

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

最后,你应该:

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 < / p >

当你使用依赖时,你的方法增加了! 谷歌有一个解。叫做Multidex!< / p >

注意:确保最小SDK大于14。

在你的构建中。gradle:

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






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

对于androidX使用:

 def multidex_version = "2.0.1"
implementation 'androidx.multidex:multidex:$multidex_version'

欲了解更多信息,请访问原文链接:

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

什么是dex文件: Android应用程序(APK)文件包含Dalvik可执行文件(DEX)文件形式的可执行字节码文件,其中包含用于运行应用程序的编译代码。

出现这种例外的原因: DEX规范限制了在单个DEX文件中可以引用的方法总数为65,536 (64K引用限制)——包括Android框架方法、库方法和你自己代码中的方法。

步骤1。添加如下依赖项

对于非androidx用户,

dependencies {
implementation 'com.android.support:multidex:1.0.3'
}
defaultConfig {
minSdkVersion 16
targetSdkVersion 28
multiDexEnabled true  //ADD THIS LINE
}

对于android用户,

dependencies {
implementation 'androidx.multidex:multidex:2.0.1'
}
defaultConfig {
minSdkVersion 16
targetSdkVersion 28
multiDexEnabled true  //ADD THIS LINE
}

步骤2:

在添加这些同步项目之后,在运行项目之前,请确保在运行之前构建一个项目。否则,您将得到一个异常

该错误是由你的应用程序Gradle文件中类依赖的数量引起的。如果类超过72,400个,您可能希望使用multidex作为更好地处理文件索引的解决方案。从这里找到更多:https://developer.android.com/studio/build/multidex

添加你的文件android/app/build.gradle .gradle

 defaultConfig {
applicationId "com.ubicacion"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "1.0"
multiDexEnabled true // ✔
missingDimensionStrategy 'react-native-camera', 'general'
}

在痛苦了两个小时后找到了解决办法。

文件路径:android/build.gradle

为我工作

defaultConfig {
applicationId "com.something"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "1.0"
multiDexEnabled true --> This works for me
}

如果你的minSdkVersion设置为21或更高,multidex默认启用,你不需要multidex支持库 -参考:https://developer.android.com/studio/build/multidex#mdex-gradle

这将为Kotlin或Java项目完成工作。

步骤1 -在Gradle脚本下找到build.gradle(模块:应用)

步骤2 -添加multiDexEnabled真实如下所示:

    compileSdkVersion 29


defaultConfig {
applicationId "com.example.appname"
minSdkVersion 19
targetSdkVersion 29
versionCode 1
versionName "1.0"
multiDexEnabled true //addded
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

步骤3 -添加multidex依赖项

dependencies {
implementation 'com.android.support:multidex:2.0.0' //added
}

最后,同步你的项目。享受吧!

我为我的项目找到了这个解决方案 我只是将最小SDK版本设置为21,这解决了我的问题

android {
defaultConfig {
...
minSdkVersion 21 //set the minimum sdk version 21
targetSdkVersion 29
}
...
}

如果你的minSdkVersion是21或更高,multidex默认启用,并且你不需要multidex支持库。 阅读更多关于multidex https://developer.android.com/studio/build/multidex.html

只需将此代码添加到应用程序或模块的build.gradle中即可

android {
defaultConfig {
...
        

multiDexEnabled true <------ * here
}
...
}

我用这种方法解决了我同样的问题,你需要遵循2个简单的步骤。我是AndroidX用户,所以对我来说,首先我在项目的依赖项部分的build.gradle文件中实现了这个依赖项。

implementation 'androidx.multidex:multidex:2.0.1'

dependencies {
//for multidex
implementation 'androidx.multidex:multidex:2.0.1'

在你的build.gradle文件中添加这个依赖后,再同步你的项目

现在加入&;defaultConfig"部分:

multiDexEnabled真实

defaultConfig {
applicationId "com.papel.helper"
minSdkVersion 16
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"


multiDexEnabled true
  

}

现在重新构建你的项目并运行:)

  1. Goto构建。Gradle的应用程序文件夹,
  2. 设置minSdkVersion为21

保存并运行您的应用程序,它应该没有dex错误现在运行

我在颤振项目中使用了以下解决方案:

打开yourproject/app/build.gradle并添加以下行:

android {
...


defaultConfig {
...
        

minSdkVersion 21
multiDexEnabled true
}
}

然后

dependencies {
...


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

如果你已经迁移到AndroidX,你会想要这样:

dependencies {
...


implementation 'androidx.multidex:multidex:2.0.1'
}

这个解决方案对我很有效。谢谢你的提问。