我在MyProject + Facebook api上使用Android Studio + gradle作为库。请参阅以下设置。
我已尝试删除support-v4的所有引用(r7或18.0.0)并将其替换为support-v13,但v4的消息仍然存在。我也注意到support-v4-r7出现在外部库中,即使它根本没有被引用。这会是问题吗?
MyProject build.gradle:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.5.+'
}
}
apply plugin: 'android'
repositories {
mavenCentral()
maven {
url "https://raw.github.com/ark/ark/master/releases/"
}
}
dependencies {
compile 'com.andreabaccega:android-form-edittext:1.0.3'
compile 'com.astuetz:pagerslidingtabstrip:1.0.0'
compile 'org.codehaus.jackson:jackson-mapper-asl:1.9.12'
compile 'com.octo.android.robospice:robospice-spring-android:1.4.7'
compile 'com.google.android.gms:play-services:3.1.36'
compile files('libs/imageloader-core-1.5.8.jar')
compile project(':libs:Facebook')
}
android {
compileSdkVersion 17
buildToolsVersion "18.1"
defaultConfig {
minSdkVersion 15
targetSdkVersion 17
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['res']
res.srcDirs = ['res']
}
debug {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src', 'libs/Facebook/src', 'libs/Facebook/build/source/r/debug', 'libs/Facebook/build/source/buildConfig/debug']
resources.srcDirs = ['build', 'libs/Facebook/build/source/r/debug', 'libs/Facebook/build/source/buildConfig/debug']
res.srcDirs = ['res']
}
}
}
MyProject settings.gradle:
include ':MyProject'
include ':libs:Facebook'
Facebook build.gradle:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.5.+'
}
}
apply plugin: 'android-library'
repositories {
mavenCentral()
}
dependencies {
compile 'com.android.support:support-v4:18.0.0'
}
android {
compileSdkVersion 17
buildToolsVersion '18.1'
defaultConfig {
minSdkVersion 8
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['res']
res.srcDirs = ['res']
}
debug {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src', 'build/source/r/debug', 'build/source/buildConfig/debug']
resources.srcDirs = ['build/source/r/debug', 'build/source/buildConfig/debug']
res.srcDirs = ['res']
}
}
}
编辑:我尝试在另一个项目中逐个添加我在此项目中使用的库,以查看失败的内容。显然这两个人是罪魁祸首。如果我包含其中任何一个或两个,我会收到上述错误。
compile 'com.astuetz:pagerslidingtabstrip:1.0.0'
compile 'com.google.android.gms:play-services:3.1.36'
关于如何管理这个的任何想法?
Edit2:显然,另一个项目会出现同样的问题。请参阅下面的build.gradle依赖项。 StickyListHeaders项目不再包含依赖项。所以我认为这是因为ActionBarSherlock?
dependencies {
compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
compile 'com.android.support:support-v4:18.0.+'
compile 'org.codehaus.jackson:jackson-mapper-asl:1.9.12'
compile 'com.octo.android.robospice:robospice-spring-android:1.4.7'
compile project(':Project Base:libs:StickyListHeaders')
}
答案 0 :(得分:7)
显然这个问题有两个原因。
1)PagerSlidingTabStrip库依赖于本地支持lib v4 jar。删除依赖项并将项目添加为应用程序中的库项目,并在其中添加maven依赖项以支持v4。所以它看起来应该与上面的Facebook库项目完全一样。
2)RoboSpice库依赖于支持lib v4(https://github.com/octo-online/robospice/issues/195)的LRUCache。只需将它从主build.gradle文件中排除,你就应该好了。
compile ('com.octo.android.robospice:robospice-spring-android:1.4.7')
{
exclude module: 'support-v4'
}
希望这会对某人有所帮助,而不是像我一样花一整个星期处理这个问题。哦,还有万亿感谢@Snicolas。没有他的帮助就无法解决它。
编辑:从RoboSpice v1.4.8开始,没有更多的本地支持lib依赖项,所以这个问题已修复。
答案 1 :(得分:7)
对于任何碰巧在使用Visual Studio和Xamarin时遇到此错误的人,就像我一样;
我通过简单地从项目中的References文件夹中删除对“Xamarin.Android.Support.v4”的引用来解决它,然后正常清理和构建项目。
答案 2 :(得分:2)
如果是 Xamarin.Android ,则对于已依赖的软件包之间的版本不匹配会发生此错误。您必须从项目中删除此 Xamarin.Android.Support.v4 包以及其他不匹配的包。 (这里的不匹配意味着,如果你的目标Android版本是Android 6,那么packages.config文件中列出的所有软件包都应该包含 targetFramework =“monoandroid60”软件包。如果有任何软件包赢了' t遵守这个,这是一个不匹配的版本)。如果你已经搞乱了版本,那么单独删除引用和清理内容是行不通的。您必须从 Nuget Package Manager 中删除所有不匹配的软件包(工具> NuGet软件包管理器> 管理NuGet解决方案包...)。请注意,当您要删除这些包时,您还需要删除所依赖的包。没有任何伤害并将其全部删除,您可以使用正确的版本重新安装它们。
一旦将包与依赖包一起删除,请尝试构建项目。成功构建后,使用正确版本从 Nuget Package Manager 重新安装软件包。 (根据API级别列出软件包版本, Ex: Android 6,即API 23,将支持版本23.x.x的软件包)
清理项目并构建它,希望它能够成功构建!
希望这有助于清理混乱!
答案 3 :(得分:1)
运行" gradle androidDependencies"并检查您的从属树。为重叠的模块添加排除。
例如,我必须执行以下操作:
dependencies {
compile 'com.google.android:support-v4:r7'
compile project(':libraries:actionbarsherlock')
compile ('com.github.chrisbanes.actionbarpulltorefresh:extra-abs:+') {
// Need to specifically exclude this as it is specified in our own project
exclude module: 'actionbarsherlock'
exclude module: 'support-v4'
}
}
答案 4 :(得分:0)
页面滑块库还具有支持库依赖性。因此,您收到此错误。在maven的情况下,您需要做的就是将支持库的主项目pom文件依赖项输入更改为提供的范围。
<dependency>
<groupId>android.support</groupId>
<artifactId>compatibility-v4</artifactId>
<version>13</version>
<scope>provided</scope>
</dependency>
如果是gradle,我认为您需要更改依赖关系配置以匹配maven提供的范围
有关详细信息,请参阅以下链接Convert Maven to Gradle
答案 5 :(得分:0)
我刚遇到同样的问题。我只是将所有Xamarin.Android.Support…nuget软件包更新为相同版本。
注意:此应用程序较旧,因此我没有使用最新的稳定版本,因为还有其他依赖项需要更新。我只是将它们全部移到了最高通用版本。
祝你好运! 汤姆
答案 6 :(得分:-2)
删除所有旧的引用.dll并与之相关并再次从NuGet添加。