如果我在我的gradle文件中写下这段代码
apply plugin: 'com.android.library'
android {
compileSdkVersion 22
buildToolsVersion '22.0.1'
defaultConfig {
minSdkVersion 9
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
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:22.0.0'
}
一切都很酷。但如果我改变
compile 'com.android.support:appcompat-v7:22.1.0'
我的应用崩溃了。 Android工作室建议我将版本更改为22.1.0
,但如果我更改版本 - 崩溃。
Error:Execution failed for task ':app:dexDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
C:\Users\zen_75\AppData\Local\Android\sdk\build-tools\22.0.1\dx.bat --dex --no-optimize --output C:\projects\android-customer\app\build\intermediates\dex\debug --input-list=C:\projects\android-customer\app\build\intermediates\tmp\dex\debug\inputList.txt
Error Code:
2
Output:
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:454)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:303)
at com.android.dx.command.dexer.Main.run(Main.java:246)
at com.android.dx.command.dexer.Main.main(Main.java:215)
at com.android.dx.command.Main.main(Main.java:106)
我该如何解决或离开?
编辑:
apply plugin: 'com.android.library'
android {
compileSdkVersion 22
buildToolsVersion '22.0.1'
defaultConfig {
minSdkVersion 15
targetSdkVersion 22
versionCode 1
versionName "1.0"
multiDexEnabled true
}
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:22.1.0'
}
我改变文件 - 不工作!!!
答案 0 :(得分:1)
您的项目中有Over 65K Methods
,似乎Google已经为appcomapt-v21.1
库添加了很多现在的方法。
无论如何,现在你有这些选择:
1.使用Multidex
,按照以下说明操作,更多信息here
2.使用ProGuard
3.减少项目中的方法数量
您必须牢记:
Multidex
可能无法在运行Android v3.x的设备上运行,请检查所有限制here ProGuard
无法保证解决问题添加多索支持
build.gradle
android {
...
...
defaultConfig {
...
...
// Enabling multidex support.
multiDexEnabled true
}
...
}
dependencies {
...
...
compile 'com.android.support:multidex:+'
}
的manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="x.xxx.xx">
<application
...
android:name="android.support.multidex.MultiDexApplication">
...
</application>
</manifest>
PS:您可以使用dex-method-counts计算项目中的方法数量,它会让您清楚了解自己的情况。
答案 1 :(得分:0)
可能的解决方案是开始使用ProGuard的minify
功能。请注意,它违反版本1.0.1的Dagger
依赖注入。
buildTypes {
debug {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
可扩展地测试您的应用程序,因为这会删除未使用的方法,并执行许多其他操作。