一个.dex文件中的方法引用数不能超过64kAPI17
The number of method references in a .dex file cannot exceed 64k API 17
我正在使用 SugarORM 库构建一个应用程序,但是当我尝试为 API 17 构建项目时(没有检查其他项目)它显示构建错误。
Information:Gradle tasks [:app:assembleDebug]
:app:preBuild UP-TO-DATE
:app:preDebugBuild UP-TO-DATE
:app:checkDebugManifest
:app:preReleaseBuild UP-TO-DATE
:app:prepareComAndroidSupportAnimatedVectorDrawable2330Library UP-TO-DATE
:app:prepareComAndroidSupportAppcompatV72330Library UP-TO-DATE
:app:prepareComAndroidSupportCardviewV72330Library UP-TO-DATE
:app:prepareComAndroidSupportDesign2330Library UP-TO-DATE
:app:prepareComAndroidSupportMediarouterV72300Library UP-TO-DATE
:app:prepareComAndroidSupportRecyclerviewV72330Library UP-TO-DATE
:app:prepareComAndroidSupportSupportV42330Library UP-TO-DATE
:app:prepareComAndroidSupportSupportVectorDrawable2330Library UP-TO-DATE
:app:prepareComAndroidVolleyVolley100Library UP-TO-DATE
:app:prepareComGithubSatyanSugar14Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServices840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAds840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAnalytics840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAppindexing840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAppinvite840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAppstate840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAuth840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesBase840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesBasement840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesCast840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesDrive840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesFitness840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesGames840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesGcm840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesIdentity840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesLocation840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesMaps840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesMeasurement840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesNearby840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesPanorama840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesPlus840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesSafetynet840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesVision840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesWallet840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesWearable840Library UP-TO-DATE
:app:prepareMeDrakeetMaterialdialogLibrary131Library UP-TO-DATE
:app:prepareDebugDependencies
:app:compileDebugAidl UP-TO-DATE
:app:compileDebugRenderscript UP-TO-DATE
:app:generateDebugBuildConfig UP-TO-DATE
:app:generateDebugAssets UP-TO-DATE
:app:mergeDebugAssets UP-TO-DATE
:app:generateDebugResValues UP-TO-DATE
:app:generateDebugResources UP-TO-DATE
:app:mergeDebugResources UP-TO-DATE
:app:processDebugManifest UP-TO-DATE
:app:processDebugResources UP-TO-DATE
:app:generateDebugSources UP-TO-DATE
:app:compileDebugJavaWithJavac
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
:app:compileDebugNdk UP-TO-DATE
:app:compileDebugSources
:app:prePackageMarkerForDebug
:app:transformClassesWithDexForDebug
Error:The number of method references in a .dex file cannot exceed 64K.
Learn how to resolve this issue at https://developer.android.com/tools/building/multidex.html
Error:Execution failed for task ':app:transformClassesWithDexForDebug'.
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/bin/java'' finished with non-zero exit value 2
Information:BUILD FAILED
Information:Total time: 21.663 secs
Information:2 errors
Information:0 warnings
Information:See complete output in console
但是当我为 android v5.0 或更高版本构建这个项目时,它工作正常。如果我删除 SugarORM gradle 依赖项,它适用于设备 v4.2.2 和 v5.0.
你的方法太多了。 dex.
只能有65536个方法
根据建议,您可以使用 multidex support。
只需在 module/build.gradle
中添加这些行:
android {
defaultConfig {
...
// Enabling multidex support.
multiDexEnabled true
}
...
}
dependencies {
implementation 'androidx.multidex:multidex:2.0.1' //with androidx libraries
//implementation 'com.android.support:multidex:1.0.3' //with support libraries
}
同样在您的 Manifest
中将 multidex 支持库中的 MultiDexApplication
class 添加到应用程序元素
<?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="androidx.multidex.MultiDexApplication">
<!-- If you are using support libraries use android:name="android.support.multidex.MultiDexApplication" -->
<!--If you are using your own custom Application class then extend -->
<!--MultiDexApplication and change above line as-->
<!--android:name=".YourCustomApplicationClass"> -->
...
</application>
</manifest>
如果您使用自己的 Application
class,请将父 class 从 Application
更改为 MultiDexApplication
。
如果您做不到,请在您的应用程序 class 中使用以下方法覆盖 attachBaseContext
方法:
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(newBase);
MultiDex.install(this);
}
另一种解决方案是尝试使用 ProGuard 删除未使用的代码 - 将您的应用程序的 ProGuard 设置配置为 运行 ProGuard 并确保缩小为发布版本启用。
我收到此错误消息是因为在我的 build.gradle
文件中编码我的项目时自动更新编译版本 :
android {
...
buildToolsVersion "23.0.2"
...
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:design:23.4.0' }
通过修改版本解决:
android {
...
buildToolsVersion "23.0.2"
...
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.0.1'
compile 'com.android.support:design:23.0.1'
}
在android/app/build.gradle
android {
compileSdkVersion 23
buildToolsVersion '23.0.0'
defaultConfig {
applicationId "com.dkm.example"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
multiDexEnabled true
}
将其放入您的默认配置中:
multiDexEnabled true
it works for me
这样做,有效:
defaultConfig {
applicationId "com.example.maps"
minSdkVersion 15
targetSdkVersion 24
versionCode 1
versionName "1.0"
multiDexEnabled true
}
这对我有用:
出现这种情况是因为未使用的方法太多。
大多数这些方法都来自 build.gradle
中包含的库
使用 minify 和 shrink resources 来解决这个问题 gradle 并同时清理你的代码。
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
minifyEnabled true
shrinkResources true
}
}
我正在升级 Gradle works.Look 以便在 Android Website 更新
然后像这样
将它添加到你的build.gradle(项目)中
dependencies {
classpath 'com.android.tools.build:gradle:2.2.0-alpha4'
....
}
然后将项目与 gradle 文件同步,而且有时可能会发生这种情况,因为 java.exe(在我的情况下)只需从 windows 中的任务管理器强制终止 java.exe然后重新运行程序
我一直面临同样的问题,对于 multidex 支持,您必须记住应用程序的 minSdkVersion。如果您使用的是 minSdkVersion 21 或更高版本,那么只需这样写 multiDexEnabled true
defaultConfig {
applicationId *******************
minSdkVersion 21
targetSdkVersion 24
versionCode 1
versionName "1.0"
multiDexEnabled true
}
它适用于我,如果你使用 minSdkVersion below 21 (below lolipop) 那么你必须做两个额外的简单的事情
1.先添加这个依赖
compile 'com.android.support:multidex:1.0.1'
在你的 build.gradle.
2. Last and second add one below line to your application in manifest
android:name="android.support.multidex.MultiDexApplication"
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:name="android.support.multidex.MultiDexApplication"
android:theme="@style/AppTheme" >
<activity android:name=".MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
Bingo 那么它也可以在低版本中运行..:)
快乐编码
您可以在 Android Studio 上启用 "Instant Run" 以获得 multidex 支持。
也可以试试这个:
android{
.
.
// to avoid DexIndexOverflowException
dexOptions {
jumboMode true
}
}
希望对大家有所帮助。谢谢
当您加载所有 google 播放服务 api 时,如果您只使用少数几个,也会发生此错误。
如 google 所述:“在 6.5 之前的 Google Play 服务版本中,您必须将整个 API 包编译到您的应用程序中。在某些情况下,这样做可以更难将应用程序中的方法数量(包括框架 API、库方法和您自己的代码)保持在 65,536 个限制以下。
从 6.5 版开始,您可以有选择地将 Google Play 服务 API 编译到您的应用程序中。"
例如,当您的应用需要 play-services-maps 和 play-services-location 时。您只需在应用级别的 build.gradle 文件中添加两个 api,如下所示:
compile 'com.google.android.gms:play-services-maps:10.2.1'
compile 'com.google.android.gms:play-services-location:10.2.1'
而不是:
compile 'com.google.android.gms:play-services:10.2.1'
有关 google 播放服务 API 的完整文档和列表,请单击 here
当您的应用引用超过 65,536 方法时,您会遇到构建错误,表明您的应用已达到 Android 构建架构的限制
Android5.0
之前的 Multidex 支持
Android5.0(API 级别 21)之前的平台版本使用 Dalvik 运行时来执行应用程序代码。默认情况下,Dalvik 将应用程序限制为每个 APK 一个 classes.dex 字节码文件。为了解决这个限制,您可以将 multidex 支持库添加到您的项目中:
dependencies {
implementation 'com.android.support:multidex:1.0.3'
}
Multidex 支持 Android 5.0 及更高版本
Android 5.0(API 级别 21)及更高版本使用名为 ART 的运行时,它本身支持从 APK 文件加载多个 DEX 文件。因此,如果您的 minSdkVersion 是 21 或更高版本,您 不需要 multidex 支持库。
避免 64K 限制
- 使用 ProGuard 删除未使用的代码 - 启用代码压缩
在应用中为
配置multidex
如果您的 minSdkVersion 设置为 21 或更高,您只需在模块级别 build.gradle 文件中将 multiDexEnabled 设置为 true
android {
defaultConfig {
...
minSdkVersion 21
targetSdkVersion 28
multiDexEnabled true
}
...
}
如果您的 minSdkVersion 设置为 20 或更低,那么您必须使用 multidex 支持库
android {
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 28
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.3'
}
覆盖应用程序 class,将其更改为扩展 MultiDexApplication(如果可能),如下所示:
public class MyApplication extends MultiDexApplication { ... }
添加到清单文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<application
android:name="MyApplication" >
...
</application>
</manifest>
只是附带评论,在添加对 multidex 的支持之前 - 确保您没有添加不必要的依赖项。
例如In the official Facebook analytics guide
他们明确指出您应该添加以下依赖项:
implementation 'com.facebook.android:facebook-android-sdk:[4,5)'
这实际上是 整个 FacebookSDK - 所以如果您只需要分析,您需要将其替换为:
implementation 'com.facebook.android:facebook-core:5.+'
更改应用级别 build.gradle :
android {
compileSdkVersion 23
buildToolsVersion '23.0.0'
defaultConfig {
applicationId "com.dkm.example"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
multiDexEnabled true
}
对我有用。
**
Unity 游戏开发者
**
如果有人因为这个错误出现在他们的 Unity 项目中而来到这里,请转到文件 -> 构建设置 -> 播放器设置 -> 播放器。转到发布设置并在构建选项卡下,启用 "Custom Launcher Gradle Template"。路径将显示在该文本下方。转到路径并像这样添加 multiDexEnabled true:
defaultConfig {
minSdkVersion **MINSDKVERSION**
targetSdkVersion **TARGETSDKVERSION**
applicationId '**APPLICATIONID**'
ndk {
abiFilters **ABIFILTERS**
}
versionCode **VERSIONCODE**
versionName '**VERSIONNAME**'
multiDexEnabled true
}
添加这个以避免 React Native 或任何 android 项目的 multidex 问题
android {
defaultConfig {
...
// Enabling multidex support.
multiDexEnabled true
}
}
dependencies {
implementation 'com.android.support:multidex:1.0.3' //with support libraries
//implementation 'androidx.multidex:multidex:2.0.1' //with androidx libraries
我将 minSdkVersion 更改为 20,它对我有用。检查 https://developer.android.com/studio/build/multidex#mdex-gradle 了解更多详情
我正在使用 SugarORM 库构建一个应用程序,但是当我尝试为 API 17 构建项目时(没有检查其他项目)它显示构建错误。
Information:Gradle tasks [:app:assembleDebug]
:app:preBuild UP-TO-DATE
:app:preDebugBuild UP-TO-DATE
:app:checkDebugManifest
:app:preReleaseBuild UP-TO-DATE
:app:prepareComAndroidSupportAnimatedVectorDrawable2330Library UP-TO-DATE
:app:prepareComAndroidSupportAppcompatV72330Library UP-TO-DATE
:app:prepareComAndroidSupportCardviewV72330Library UP-TO-DATE
:app:prepareComAndroidSupportDesign2330Library UP-TO-DATE
:app:prepareComAndroidSupportMediarouterV72300Library UP-TO-DATE
:app:prepareComAndroidSupportRecyclerviewV72330Library UP-TO-DATE
:app:prepareComAndroidSupportSupportV42330Library UP-TO-DATE
:app:prepareComAndroidSupportSupportVectorDrawable2330Library UP-TO-DATE
:app:prepareComAndroidVolleyVolley100Library UP-TO-DATE
:app:prepareComGithubSatyanSugar14Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServices840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAds840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAnalytics840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAppindexing840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAppinvite840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAppstate840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAuth840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesBase840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesBasement840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesCast840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesDrive840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesFitness840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesGames840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesGcm840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesIdentity840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesLocation840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesMaps840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesMeasurement840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesNearby840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesPanorama840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesPlus840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesSafetynet840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesVision840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesWallet840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesWearable840Library UP-TO-DATE
:app:prepareMeDrakeetMaterialdialogLibrary131Library UP-TO-DATE
:app:prepareDebugDependencies
:app:compileDebugAidl UP-TO-DATE
:app:compileDebugRenderscript UP-TO-DATE
:app:generateDebugBuildConfig UP-TO-DATE
:app:generateDebugAssets UP-TO-DATE
:app:mergeDebugAssets UP-TO-DATE
:app:generateDebugResValues UP-TO-DATE
:app:generateDebugResources UP-TO-DATE
:app:mergeDebugResources UP-TO-DATE
:app:processDebugManifest UP-TO-DATE
:app:processDebugResources UP-TO-DATE
:app:generateDebugSources UP-TO-DATE
:app:compileDebugJavaWithJavac
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
:app:compileDebugNdk UP-TO-DATE
:app:compileDebugSources
:app:prePackageMarkerForDebug
:app:transformClassesWithDexForDebug
Error:The number of method references in a .dex file cannot exceed 64K.
Learn how to resolve this issue at https://developer.android.com/tools/building/multidex.html
Error:Execution failed for task ':app:transformClassesWithDexForDebug'.
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/bin/java'' finished with non-zero exit value 2
Information:BUILD FAILED
Information:Total time: 21.663 secs
Information:2 errors
Information:0 warnings
Information:See complete output in console
但是当我为 android v5.0 或更高版本构建这个项目时,它工作正常。如果我删除 SugarORM gradle 依赖项,它适用于设备 v4.2.2 和 v5.0.
你的方法太多了。 dex.
只能有65536个方法根据建议,您可以使用 multidex support。
只需在 module/build.gradle
中添加这些行:
android {
defaultConfig {
...
// Enabling multidex support.
multiDexEnabled true
}
...
}
dependencies {
implementation 'androidx.multidex:multidex:2.0.1' //with androidx libraries
//implementation 'com.android.support:multidex:1.0.3' //with support libraries
}
同样在您的 Manifest
中将 multidex 支持库中的 MultiDexApplication
class 添加到应用程序元素
<?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="androidx.multidex.MultiDexApplication">
<!-- If you are using support libraries use android:name="android.support.multidex.MultiDexApplication" -->
<!--If you are using your own custom Application class then extend -->
<!--MultiDexApplication and change above line as-->
<!--android:name=".YourCustomApplicationClass"> -->
...
</application>
</manifest>
如果您使用自己的 Application
class,请将父 class 从 Application
更改为 MultiDexApplication
。
如果您做不到,请在您的应用程序 class 中使用以下方法覆盖 attachBaseContext
方法:
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(newBase);
MultiDex.install(this);
}
另一种解决方案是尝试使用 ProGuard 删除未使用的代码 - 将您的应用程序的 ProGuard 设置配置为 运行 ProGuard 并确保缩小为发布版本启用。
我收到此错误消息是因为在我的 build.gradle
文件中编码我的项目时自动更新编译版本 :
android {
...
buildToolsVersion "23.0.2"
...
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:design:23.4.0' }
通过修改版本解决:
android {
...
buildToolsVersion "23.0.2"
...
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.0.1'
compile 'com.android.support:design:23.0.1'
}
在android/app/build.gradle
android {
compileSdkVersion 23
buildToolsVersion '23.0.0'
defaultConfig {
applicationId "com.dkm.example"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
multiDexEnabled true
}
将其放入您的默认配置中:
multiDexEnabled true
it works for me
这样做,有效:
defaultConfig {
applicationId "com.example.maps"
minSdkVersion 15
targetSdkVersion 24
versionCode 1
versionName "1.0"
multiDexEnabled true
}
这对我有用:
出现这种情况是因为未使用的方法太多。 大多数这些方法都来自 build.gradle
中包含的库使用 minify 和 shrink resources 来解决这个问题 gradle 并同时清理你的代码。
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
minifyEnabled true
shrinkResources true
}
}
我正在升级 Gradle works.Look 以便在 Android Website 更新 然后像这样
将它添加到你的build.gradle(项目)中 dependencies {
classpath 'com.android.tools.build:gradle:2.2.0-alpha4'
....
}
然后将项目与 gradle 文件同步,而且有时可能会发生这种情况,因为 java.exe(在我的情况下)只需从 windows 中的任务管理器强制终止 java.exe然后重新运行程序
我一直面临同样的问题,对于 multidex 支持,您必须记住应用程序的 minSdkVersion。如果您使用的是 minSdkVersion 21 或更高版本,那么只需这样写 multiDexEnabled true
defaultConfig {
applicationId *******************
minSdkVersion 21
targetSdkVersion 24
versionCode 1
versionName "1.0"
multiDexEnabled true
}
它适用于我,如果你使用 minSdkVersion below 21 (below lolipop) 那么你必须做两个额外的简单的事情
1.先添加这个依赖
compile 'com.android.support:multidex:1.0.1'
在你的 build.gradle.
2. Last and second add one below line to your application in manifest
android:name="android.support.multidex.MultiDexApplication"
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:name="android.support.multidex.MultiDexApplication"
android:theme="@style/AppTheme" >
<activity android:name=".MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
Bingo 那么它也可以在低版本中运行..:) 快乐编码
您可以在 Android Studio 上启用 "Instant Run" 以获得 multidex 支持。
也可以试试这个:
android{
.
.
// to avoid DexIndexOverflowException
dexOptions {
jumboMode true
}
}
希望对大家有所帮助。谢谢
当您加载所有 google 播放服务 api 时,如果您只使用少数几个,也会发生此错误。
如 google 所述:“在 6.5 之前的 Google Play 服务版本中,您必须将整个 API 包编译到您的应用程序中。在某些情况下,这样做可以更难将应用程序中的方法数量(包括框架 API、库方法和您自己的代码)保持在 65,536 个限制以下。
从 6.5 版开始,您可以有选择地将 Google Play 服务 API 编译到您的应用程序中。"
例如,当您的应用需要 play-services-maps 和 play-services-location 时。您只需在应用级别的 build.gradle 文件中添加两个 api,如下所示:
compile 'com.google.android.gms:play-services-maps:10.2.1'
compile 'com.google.android.gms:play-services-location:10.2.1'
而不是:
compile 'com.google.android.gms:play-services:10.2.1'
有关 google 播放服务 API 的完整文档和列表,请单击 here
当您的应用引用超过 65,536 方法时,您会遇到构建错误,表明您的应用已达到 Android 构建架构的限制
Android5.0
之前的 Multidex 支持Android5.0(API 级别 21)之前的平台版本使用 Dalvik 运行时来执行应用程序代码。默认情况下,Dalvik 将应用程序限制为每个 APK 一个 classes.dex 字节码文件。为了解决这个限制,您可以将 multidex 支持库添加到您的项目中:
dependencies {
implementation 'com.android.support:multidex:1.0.3'
}
Multidex 支持 Android 5.0 及更高版本
Android 5.0(API 级别 21)及更高版本使用名为 ART 的运行时,它本身支持从 APK 文件加载多个 DEX 文件。因此,如果您的 minSdkVersion 是 21 或更高版本,您 不需要 multidex 支持库。
避免 64K 限制
- 使用 ProGuard 删除未使用的代码 - 启用代码压缩
在应用中为
配置multidex如果您的 minSdkVersion 设置为 21 或更高,您只需在模块级别 build.gradle 文件中将 multiDexEnabled 设置为 true
android {
defaultConfig {
...
minSdkVersion 21
targetSdkVersion 28
multiDexEnabled true
}
...
}
如果您的 minSdkVersion 设置为 20 或更低,那么您必须使用 multidex 支持库
android {
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 28
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.3'
}
覆盖应用程序 class,将其更改为扩展 MultiDexApplication(如果可能),如下所示:
public class MyApplication extends MultiDexApplication { ... }
添加到清单文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<application
android:name="MyApplication" >
...
</application>
</manifest>
只是附带评论,在添加对 multidex 的支持之前 - 确保您没有添加不必要的依赖项。
例如In the official Facebook analytics guide
他们明确指出您应该添加以下依赖项:
implementation 'com.facebook.android:facebook-android-sdk:[4,5)'
这实际上是 整个 FacebookSDK - 所以如果您只需要分析,您需要将其替换为:
implementation 'com.facebook.android:facebook-core:5.+'
更改应用级别 build.gradle :
android {
compileSdkVersion 23
buildToolsVersion '23.0.0'
defaultConfig {
applicationId "com.dkm.example"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
multiDexEnabled true
}
对我有用。
**
Unity 游戏开发者
**
如果有人因为这个错误出现在他们的 Unity 项目中而来到这里,请转到文件 -> 构建设置 -> 播放器设置 -> 播放器。转到发布设置并在构建选项卡下,启用 "Custom Launcher Gradle Template"。路径将显示在该文本下方。转到路径并像这样添加 multiDexEnabled true:
defaultConfig {
minSdkVersion **MINSDKVERSION**
targetSdkVersion **TARGETSDKVERSION**
applicationId '**APPLICATIONID**'
ndk {
abiFilters **ABIFILTERS**
}
versionCode **VERSIONCODE**
versionName '**VERSIONNAME**'
multiDexEnabled true
}
添加这个以避免 React Native 或任何 android 项目的 multidex 问题
android {
defaultConfig {
...
// Enabling multidex support.
multiDexEnabled true
}
}
dependencies {
implementation 'com.android.support:multidex:1.0.3' //with support libraries
//implementation 'androidx.multidex:multidex:2.0.1' //with androidx libraries
我将 minSdkVersion 更改为 20,它对我有用。检查 https://developer.android.com/studio/build/multidex#mdex-gradle 了解更多详情