我正在尝试使用Jake Wharton的ViewPagerIndicator库,但是我无法在Android Studio中使用我的Gradle项目.
我将其添加为依赖项,如下所示:
dependencies {
// ... other ommitted
compile 'com.viewpagerindicator:library:2.4.1'
compile 'com.android.support:support-v4:19.0.1'
compile 'com.nineoldandroids:library:2.4.0'
// ...
}
Run Code Online (Sandbox Code Playgroud)
但该项目似乎无法识别库中的任何组件.我想知道不同的support-v4版本是否存在依赖性问题,或者是九折机器人的某些东西......?
我正在运行最新版本的gradle(1.12).在项目的根目录中,我运行以下命令,如@CommonsWare的回答所述,该命令应该给出依赖树:
当我运行它时,会发生这种情况:
$ gradle -q依赖项
------------------------------------------------------------
Root project
------------------------------------------------------------
No configurations
Run Code Online (Sandbox Code Playgroud)
该项目是一个Android gradle项目,使用Android Studio内置的新项目向导从头开始创建.我的顶级build.gradle文件如下所示:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.10.+'
}
}
allprojects {
repositories {
maven { url "http://dl.bintray.com/populov/maven" }
mavenCentral()
}
}
subprojects {
repositories {
flatDir {
dirs "$rootDir/libs"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的settings.gradle文件如下所示:
include ':app', ':facebook', 'pullToRefresh'
Run Code Online (Sandbox Code Playgroud)
据我所知,这是一个非常基本的gradle配置.有没有人知道为什么依赖树函数什么也没有返回?如果我需要提供更多信息,请告诉我.
如果:
dependencies {
compile 'com.google.code.gson:gson:2.2.4'
compile 'de.keyboardsurfer.android.widget:crouton:1.8.3'
compile 'de.greenrobot:eventbus:2.2.0'
compile 'com.intellij:annotations:+@jar'
compile 'com.jpardogo.googleprogressbar:library:1.0.0'
compile project(':floatlabel')
compile project(':Android-SwipeToDismiss')
compile project(':Android-UndoBar') {
exclude group: 'com.nineoldandroids', module: 'library' // without or without this one
}
compile project(':AndroidSlidingUpPanel:library') {
exclude group: 'com.nineoldandroids', module: 'library' // without or without this one
}
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误消息:
Run Code Online (Sandbox Code Playgroud)Gradle 'mProject' project refresh failed: Build script error, unsupported Gradle DSL method found: 'exclude()'!
但这有效:
dependencies {
compile 'com.google.code.gson:gson:2.2.4'
compile 'de.keyboardsurfer.android.widget:crouton:1.8.3'
compile 'de.greenrobot:eventbus:2.2.0'
compile 'com.intellij:annotations:+@jar'
compile 'com.jpardogo.googleprogressbar:library:1.0.0'
compile project(':floatlabel')
compile project(':Android-SwipeToDismiss') …Run Code Online (Sandbox Code Playgroud) 我有一堆第三方库,我包含在我的基础应用程序中.我无法控制那些第三方模块包含的支持库.这使我很难在我的应用程序中拥有相同版本的android支持库.
当我可以从每个依赖项中排除某些库时,我知道使用gradle:
compile('com.test:lib1:1.0.0') {
exclude group: 'com.android.support'
}
Run Code Online (Sandbox Code Playgroud)
然而,有大量的支持库,并将它们全部排除在我的第三方库的每一个看起来像是矫枉过正.
有没有更好的办法?
阅读这篇博文:https://www.devsbedevin.com/android-understanding-gradle-dependencies-and-resolving-conflicts/
它表明:
configurations.all {
resolutionStrategy {
preferProjectModules()
}
}
Run Code Online (Sandbox Code Playgroud)
但是当使用它时,我仍然在我的gradle文件中的Android Studio中收到警告,检测到有多个版本的支持库.
如果我的依赖项依赖于支持库的不同版本,我该怎么办?在上面的任何一种情况下,我都会强迫第三方库使用它们未构建的特定版本的支持库.我应该使用哪个版本?最新的支持库?Min支持所有第三方依赖的库?
这是一个最小的gradle文件示例,显示了第三方依赖项,每个依赖项依赖于它们自己的支持库版本.
android {
compileSdkVersion 26
buildToolsVersion '26.0.2'
defaultConfig {
applicationId "com.example.app"
minSdkVersion 17
targetSdkVersion 25
}
}
configurations.all {
resolutionStrategy {
preferProjectModules()
}
}
dependencies {
compile 'com.android.support:support-v13:26.0.0'
compile 'com.test:lib1:1.0' // depends on support-v13:25.0.0
compile 'com.test:lib2:1.0' // depends on support-v13:25.2.0
compile 'com.test:lib3:1.0' // depends on support-v13:25.4.0
compile 'com.test:lib4:1.0' // depends on support-v13:26.0.0
}
Run Code Online (Sandbox Code Playgroud)
Android studio提供以下警告:
android dependency-management gradle android-studio android-gradle-plugin
我从Eclipse导出我的项目并使用此链接中的说明导入到Android Studio:http://developer.android.com/sdk/installing/migrate.html
当我构建时,我有一个错误:
Duplicate files copied in APK META-INF/DEPENDENCIES
Run Code Online (Sandbox Code Playgroud)
搜索后,我找到了一个解决方案:添加
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
}
Run Code Online (Sandbox Code Playgroud)
进入build.gradle.它的工作原理!
但我不明白为什么我有这个错误以及为什么我必须应用该修复.谁能解释一下?
我第一次使用Android Studio,导入项目后出现了以下错误(以前这是一个我也有问题的eclipse项目.)
以下是给出的信息:
Error:Execution failed for task ':app:dexDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
/home/crash-id/Development/SDK/adt-bundle-linux-x86_64-20140702/sdk/build-tools/21.1.2/dx --dex --no-optimize --output /home/crash-id/AndroidstudioProjects/LocalSin/app/build/intermediates/dex/debug --input-list=/home/crash-id/AndroidstudioProjects/LocalSin/app/build/intermediates/tmp/dex/debug/inputList.txt
Error Code:
2
Output:
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Lcom/google/ads/AdRequest$ErrorCode;
at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:596)
at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554)
at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:535)
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)
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)
:app:dexDebug
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Lcom/google/ads/AdRequest$ErrorCode;
at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:596)
at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554)
at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:535)
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)
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 …Run Code Online (Sandbox Code Playgroud) 我可以integrate (add & work) with many libraries.
但至于ActionBarSherlock图书馆,我有很多问题.
第一期是热门问题Multiple dex files define,
我知道duplicated android-support-v4.jar它的原因,但我现在无法解决这个问题:
Error:Execution failed for task ':fitness:dexDebug'.
Error Code:
2
Output:
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;
at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:594)
at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:552)
at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:533)
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:170)
at com.android.dx.merge.DexMerger.merge(DexMerger.java:188)
at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287)
at com.android.dx.command.dexer.Main.run(Main.java:230)
at com.android.dx.command.dexer.Main.main(Main.java:199)
at com.android.dx.command.Main.main(Main.java:103)
Run Code Online (Sandbox Code Playgroud)
我在同样的错误中遵循了答案.它用于:
dependencies {
compile('...') {
exclude module: 'support-v4'
}
compile 'com.android.support:support-v4:18.0.+'
}
Run Code Online (Sandbox Code Playgroud)
但我收到第二期:unsupported Gradle …
android android-support-library android-studio build.gradle android-gradle-plugin
当我跑步时,./gradlew assembleDebug我得到:
:app:dexDebug FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:dexDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
/home/grub/Main/android-sdk-linux/build-tools/19.1.0/dx --dex --num-threads=4 --output
Run Code Online (Sandbox Code Playgroud)
合并类和jar列表:
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;
Run Code Online (Sandbox Code Playgroud)
它与此问题非常相似,问题应该在多个support-v4库中.我清理了一下build.gradle:
repositories {
maven { url "http://dl.bintray.com/populov/maven" }
mavenCentral()
}
apply plugin: 'android'
android {
compileSdkVersion 19
buildToolsVersion '19.1.0'
defaultConfig {
minSdkVersion 9
targetSdkVersion 19
versionCode 8
versionName "2.1.17"
}
dependencies {
compile fileTree(dir: 'libs', …Run Code Online (Sandbox Code Playgroud) 我正在开发一个使用以下依赖项的Android项目:
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.17</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
但是,此依赖关系具有模块javax/inject的2个定义,如gradle依赖关系树中所示:
+--- org.glassfish.jersey.core:jersey-client:2.17
| +--- org.glassfish.jersey.core:jersey-common:2.17
| | +--- org.glassfish.hk2:hk2-api:2.4.0-b10
| | | +--- javax.inject:javax.inject:1
| | +--- org.glassfish.hk2.external:javax.inject:2.4.0-b10
Run Code Online (Sandbox Code Playgroud)
在尝试运行Android应用程序时,我收到错误:
com.android.dex.DexException: Multiple dex files define L/javax/inject/Inject
Run Code Online (Sandbox Code Playgroud)
我已经尝试排除这些模块中的任何一个,但这不起作用,因为依赖依赖于它们两个来进行方法调用.
有没有其他解决方案来解决这个冲突?
我在我的项目中包含的库遇到了一些麻烦:一开始它只是一个冲突的依赖性问题,我通过排除
support-v4哪个是共同的共享模块来解决.
问题是其中一个lbsLib-release似乎是.jar在开发人员构建之前在根项目中使用普通文件构建的.
通过运行./gradlew app:dependencies我验证了构建图中没有引用依赖项.
我发现它support-v4嵌入了classes.jar位于:app/build/intermedites/exploded-aar/MyQaaAndroid/lbsLib-release/unspecified/classes.jar/如下图所示:

我不能自己重建项目,因为它不是一个开源的lib,所以有两个问题:
如果我添加compile 'com.android.support:support-v4:18.0.+'到build.gradle一个multiple dex file错误是在编译的时候,因此库引用了两次抛出.
UNEXPECTED TOP-LEVEL EXCEPTION: com.android.dex.DexException: Multiple dex files define Landroid/support/v4/app/BackStackState;
at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:596)
at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554)
at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:535)
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)
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)
Run Code Online (Sandbox Code Playgroud)
`
如果我删除所有需要support-v4它的库,则会在应用程序运行时抛出缺少的依赖项错误.
所以我想知道是否有可能.jar从构建中排除此文件或使其他libs取决于lbsLib-release嵌入式support-v4 .jar.
compile (project(':lbsLib-release')) {
exclude module: 'support-v4'
}
compile ('com.sothree.slidinguppanel:library:2.0.4'){ …Run Code Online (Sandbox Code Playgroud)