如何防止在android gradle中使用多索引
下面是我的gradle文件。我得到一个多重索引异常。我不想启用multidex,因为我的应用程序没有那么复杂。所以我确信我一定是做错了什么。请有人看看我的gradle文件,指出我能做些什么来避免这个问题 错误:如何防止在android gradle中使用多索引,android,android-gradle-plugin,android-multidex,Android,Android Gradle Plugin,Android Multidex,下面是我的gradle文件。我得到一个多重索引异常。我不想启用multidex,因为我的应用程序没有那么复杂。所以我确信我一定是做错了什么。请有人看看我的gradle文件,指出我能做些什么来避免这个问题 错误: UNEXPECTED TOP-LEVEL EXCEPTION: com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536 at com.android.dx.merge.DexMe
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
拉入play services maps
),加上任何可能通过Fabric插件设置为依赖关系的内容
简而言之,你的应用程序相当复杂。碰巧你没有写那么复杂的东西
我能做些什么来避免这个问题
使用更少/更小的依赖项
您已经在使用细粒度的Play Services SDK依赖项,否则您早就达到了DEX限制
你可以考虑使用一种可用的方法计数工具,例如,更好地了解哪些库有助于你的成本。
< p>可以用来混淆和删除未使用的类。但是,如果你不想让你的应用程序被“切断”,请记住仔细配置它。Proguard可能非常激进。这是一个与应用程序引擎连接的项目。我不认为应用引擎gradle会影响android gradle,但这个库只告诉我们解决上述问题的极限?即使是我也面临着同样的问题,如果我们必须包含太多的库,但仍然不想启用多索引,该怎么办?@HBdroid:你没有太多选择。如果您为调试构建启用ProGuard,它可以提供一些帮助。最终,您需要使用更少的库、使用multidex、将应用程序拆分为多个应用程序(每个应用程序都需要库的子集),或者放弃应用程序。@commonware您知道如何禁用multidex吗?我创建了一个新的空android应用程序项目,构建了它,并用APK Analyzer检查了生成的APK文件。在APK文件中,总是有classes2.dex文件和classes.dex。当然,引用计数非常低,并且还尝试扩展Activity类而不是默认的AppCompatActivity,以减少依赖关系,但结果是一样的。此外,当我反编译那些dex文件时,当MainActivity.class在我的设备上按预期工作时,我找不到任何MainActivity.class。我做了几次这些测试,因为我的原始应用程序也有同样的问题。引用计数低的多索引文件。即使我从未应用过ProGuard,也无法在dex文件中找到我的类文件。。我不知道这里发生了什么。世界上为什么会有默认的多重索引。。有什么提示吗?@Jenix:我建议你问一个单独的堆栈溢出问题,在这里你可以解释这些步骤,并提供显示你所看到的内容的屏幕截图。