当前位置: 代码迷 >> Android >> 如何防止在android gradle中使用multi-dex
  详细解决方案

如何防止在android gradle中使用multi-dex

热度:48   发布时间:2023-08-04 11:55:18.0

以下是我的gradle文件。 我得到一个MultiDexException。 我不想启用multidex,因为我的应用程序并不复杂。 所以我确信我一定做错了。 有人请看我的gradle文件,并指出我可以做些什么来避免这个问题?

错误:

UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
    at com.android.dx.merge.DexMerger$6.updateIndex(DexMerger.java:502)
    at com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:277)
    at com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:491)
    at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:168)
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:189)
    at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:502)
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:334)
    at com.android.dx.command.dexer.Main.run(Main.java:277)
    at com.android.dx.command.dexer.Main.main(Main.java:245)
    at com.android.dx.command.Main.main(Main.java:106)

摇篮:

buildscript {
?        repositories {?    
        maven { url 'https://maven.fabric.io/public' }?    
    }?    ?    
    dependencies {?    
        classpath 'io.fabric.tools:gradle:1.+'
?        }
?    }
?    apply plugin: 'com.android.application'?    
apply plugin: 'io.fabric'
?    apply plugin: 'com.google.gms.google-services'?    ?    
repositories {
?        maven { url 'https://maven.fabric.io/public' }?    
}?    ?    ?    
android {
?        compileSdkVersion 23?    
    buildToolsVersion "23.0.1"
?    ?        defaultConfig {
?            applicationId "com.company.app.android"?    
        minSdkVersion 14?    
        targetSdkVersion 23
?            versionCode 1
?            versionName "1.0"
?        }?    
    buildTypes {
?            release {?    
            minifyEnabled false?    
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
?            }
?        }
?    ?    ?    }
?    ?    dependencies {
?        compile project(path: ':cloud', configuration: 'android-endpoints')?    
    compile('com.twitter.sdk.android:twitter:1.8.0@aar') {
?            transitive = true;
?        }
?    ?        compile 'com.android.support:design:23.0.1'
?        compile 'com.android.support:recyclerview-v7:23.0.1'
?        compile 'com.android.support:cardview-v7:23.0.1'
?        compile 'com.squareup.okhttp:okhttp:2.5.0'
?        compile 'com.squareup.picasso:picasso:2.5.2'
?        compile 'com.path:android-priority-jobqueue:1.1.2'
?        compile 'com.google.android.gms:play-services-gcm:8.1.0'
?        compile 'com.google.android.gms:play-services-appindexing:8.1.0'
?        compile 'com.google.android.gms:play-services-location:8.1.0'
?    }?    

我不想启用multidex,因为我的应用程序并不复杂

您对11个工件有直接依赖性。 你有其他人的间接依赖关系(例如, play-services-location pulls in play-services-maps ),以及任何可能被设置为依赖关系的东西都可以使用你的Fabric插件。

简而言之,您的应用程序相当复杂。 恰巧没有写出那么复杂的内容。

我能做些什么来避免这个问题?

使用更少/更小的依赖项。

您已经使用了细粒度的Play Services SDK依赖项,否则您很久以前就会达到DEX限制。

您可以考虑使用一种可用的方法计数工具(例如 )来更好地了解哪些库会影响您的成本。

您可以使用来混淆和删除未使用的类。 但是如果你不希望你的应用被“切断”那么多,请记得仔细配置它。 Proguard非常具有攻击性。

  相关解决方案