Android Studio更新到1.0会破坏MultiDex
Hi有类似的错误,如重复输入 失败:生成失败,出现异常Android Studio更新到1.0会破坏MultiDex,android,android-studio,android-multidex,Android,Android Studio,Android Multidex,Hi有类似的错误,如重复输入 失败:生成失败,出现异常 出了什么问题: 任务“:eBooks:PackageAllDebugClassesForMultiIndex”的执行失败 java.util.zip.ZipException:重复条目:android/support/annotation/AttrRes.class 尝试: 使用--stacktrace选项运行以获取堆栈跟踪。使用--info或--debug选项运行以获得更多日志输出 构建失败 总时间:1分钟46.13秒 apply
- 出了什么问题: 任务“:eBooks:PackageAllDebugClassesForMultiIndex”的执行失败 java.util.zip.ZipException:重复条目:android/support/annotation/AttrRes.class
- 尝试: 使用--stacktrace选项运行以获取堆栈跟踪。使用--info或--debug选项运行以获得更多日志输出
apply plugin: 'com.android.application'
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
compile project(':ui-reader')
compile "com.android.support:support-v4:23.1.1"
compile "com.android.support:support-v13:20.0.0"
compile files('libs/Flurry_3.2.1.jar')
}
android {
compileSdkVersion 21
buildToolsVersion "20.0.0"
configurations {
all*.exclude group: 'com.android.support', module: 'support-v4'
}
defaultConfig {
// Enabling multidex support.
multiDexEnabled true
}
lintOptions {
abortOnError false
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
// Move the tests to tests/java, tests/res, etc...
instrumentTest.setRoot('tests')
// Move the build types to build-types/<type>
// For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
// This moves them out of them default location under src/<type>/... which would
// conflict with src/ being used by the main source set.
// Adding new build types or product flavors should be accompanied
// by a similar customization.
debug.setRoot('build-types/debug')
release.setRoot('build-types/release')
}
}
apply插件:“com.android.application”
依赖关系{
编译文件树(目录:“libs”,包括:“*.jar”)
编译项目(“:ui阅读器”)
编译“com.android.support:support-v4:23.1.1”
编译“com.android.support:support-v13:20.0.0”
编译文件('libs/Flurry_3.2.1.jar')
}
安卓{
编译DK21版
buildToolsVersion“20.0.0”
配置{
所有*.exclude组:“com.android.support”,模块:“support-v4”
}
默认配置{
//启用多索引支持。
多索引启用真
}
林特选项{
异常错误
}
源集{
主要{
manifest.src文件“AndroidManifest.xml”
java.srcDirs=['src']
resources.srcDirs=['src']
aidl.srcDirs=['src']
renderscript.srcDirs=['src']
res.srcDirs=['res']
assets.srcDirs=['assets']
}
//将测试移动到tests/java、tests/res等。。。
instrumentTest.setRoot('tests'))
//将生成类型移动到生成类型/
//例如,build-types/debug/java、build-types/debug/AndroidManifest.xml。。。
//这会将它们移出src/…下的默认位置,这将
//与主源集正在使用的src/冲突。
//应同时添加新的构建类型或产品风格
//通过类似的定制。
setRoot('build-types/debug')
setRoot('build-types/release')
}
}
有人能告诉我如何在jar文件中找到重复类文件的位置,以及如何获得如下输出吗
com.squareup.okhttp:okhttp:1.6.0
|| |+---com.intellij:annotations:+->12.0我能够在一个测试项目中通过包含aviary sdk库来重现这一点。我不需要多索引,也没有研究不同的SDK版本,这对我来说有点神秘 如果没有multi-dex,则会出现经典的“multi-dex files define…”错误,这意味着您在构建中多次包含同一符号,这是不允许的 这些问题需要一点调查;这就是
gradle dependencies
任务非常方便的地方。如果进入模块目录(不是顶级目录)并运行此任务:
../gradlew dependencies
你会得到:
compile - Classpath for compiling the main sources.
+--- com.aviary.android.feather.sdk:aviary-sdk:3.4.3.351
| \--- com.aviary.android.feather.sdk:sdk-library:3.5.1
| +--- it.sephiroth.android.library.hlistviewanimations:hlistviewanimations-library:1.0.1
| | +--- it.sephiroth.android.library.horizontallistview:hlistview:1.2.2
| | | \--- com.android.support:support-v4:19.1.+ -> 21.0.3
| | | \--- com.android.support:support-annotations:21.0.3
| | \--- com.nineoldandroids:library:2.4.0
| +--- com.nineoldandroids:library:2.4.0
| +--- it.sephiroth.android.library.disklruimagecache:DiskLruImageCache:1.0.2
| | +--- org.apache.commons:commons-io:1.3.2
| | \--- com.jakewharton:disklrucache:2.0.2
| +--- com.aviary.android.feather.sdk:cds-library:3.2.4
| | +--- com.aviary.android.feather.sdk:common-library:3.1.2 -> 3.1.8.1
| | | +--- org.apache.commons:commons-lang3:3.3.2
| | | +--- com.squareup.okhttp:okhttp-urlconnection:1.6.0
| | | | \--- com.squareup.okhttp:okhttp:1.6.0
| | | +--- com.squareup.okhttp:okhttp:1.6.0
| | | +--- com.intellij:annotations:+ -> 12.0
| | | \--- commons-io:commons-io:2.4
| | \--- com.android.support:support-v4:19.+ -> 21.0.3 (*)
| +--- it.sephiroth.android.library.disklrumulticache:disklrumulticache:1.0.2
| | +--- org.apache.commons:commons-io:1.3.2
| | \--- com.jakewharton:disklrucache:2.0.2
| +--- it.sephiroth.android.library.picasso:picasso:2.3.3.2
| | +--- com.squareup.okhttp:okhttp-urlconnection:1.6.0 (*)
| | +--- com.squareup.okhttp:okhttp:1.6.0
| | \--- com.intellij:annotations:12.0
| +--- com.android.support:support-v4:19.+ -> 21.0.3 (*)
| +--- it.sephiroth.android.exif:android-exif-extended:1.0.2
| | +--- org.apache.commons:commons-lang3:3.3.2
| | \--- org.apache.commons:commons-io:1.3.2
| +--- it.sephiroth.android.library.imagezoom:imagezoom:1.0.5
| | \--- it.sephiroth.android.library.easing:android-easing:1.0.3
| +--- com.aviary.android.feather.sdk:receipt-library:2.0.2
| | +--- com.aviary.android.feather.sdk:common-library:3.1.2 -> 3.1.8.1 (*)
| | +--- it.sephiroth.android.library.ab:ab-test:2.0.3
| | \--- com.android.support:support-v4:19.+ -> 21.0.3 (*)
| +--- com.aviary.android.feather.sdk:common-library:3.1.2 -> 3.1.8.1 (*)
| +--- it.sephiroth.android.library.horizontallistview:hlistview:1.2.2 (*)
| +--- it.sephiroth.android.library.fork.listviewanimations:listviewanimations-library-core:2.6.1
| | \--- com.nineoldandroids:library:2.4.0
| +--- com.aviary.android.feather.sdk:tracking-library:3.0.1
| | \--- com.aviary.android.feather.sdk:common-library:3.1.8.1 (*)
| \--- com.aviary.android.feather.sdk:headless-library:3.4.002000000
| \--- com.aviary.android.feather.sdk:common-library:3.1.2 -> 3.1.8.1 (*)
如果仔细观察,您将看到以下两种情况:
commons io:commons io:2.4
及
org.apache.commons:commons io:1.3.2
在那里,我没有确认,但我假设是相同类的不同包,包括org/apache/commons/io/CopyUtils.class
如果通过以下方式排除commons io
:
compile ('com.aviary.android.feather.sdk:aviary-sdk:3.4.3.351') {
exclude group: 'commons-io'
}
它将建立。我还没有尝试运行它,所以我不知道在运行时是否会丢失符号;如果有,您可以尝试从依赖项中排除哪些内容,或者您可以重新打包依赖项以修复错误,或者联系其作者。我们可以查看您的生成文件吗?当然可以,让我在这里发布它们。奇怪的是,当我的MinSDK为21时,问题似乎没有出现。只要我去14(devDebug味),它就不太管用了!Scott!奇怪的是,这个库在所有以前的版本上都编译得很好。我猜它不喜欢切换到Android 1.0(可能是强制执行的规则?),我会联系Adobe(他们拥有aviary),并确保将他们指向这里。