7

我在 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')
}
4

7 回答 7

7

显然这个问题有两个原因。

1) PagerSlidingTabStrip 库依赖于本地支持 lib v4 jar。删除依赖项并将项目作为库项目添加到您的应用程序中,并在其中添加支持 v4 的 maven 依赖项。所以它看起来应该和上面的 Facebook 库项目一模一样。

2) RoboSpice 库依赖于 support lib v4 ( https://github.com/octo-online/robospice/issues/195 ) 中的 LRUCache。只需将它从您的主 bu​​ild.gradle 文件中排除,您就可以开始使用了。

compile ('com.octo.android.robospice:robospice-spring-android:1.4.7')
        {
            exclude module: 'support-v4'
        }

希望这会对某人有所帮助,而不是像我那样花整整一周的时间来解决这个问题。哦,感谢@Snicolas。没有他的帮助是无法解决的。

编辑:从 RoboSpice v1.4.8 开始,不再有本地支持 lib 依赖项,因此此问题已修复。

于 2013-10-05T14:51:40.223 回答
7

对于像我一样在将 Visual Studio 与 Xamarin 一起使用时碰巧遇到此错误的任何人;

我通过简单地从项目中的 References 文件夹中删除对“Xamarin.Android.Support.v4”的引用来解决它,然后像往常一样清理和构建项目。

于 2016-11-22T14:20:42.140 回答
2

当这适用于Xamarin.Android时,会因依赖包之间的版本不匹配而发生此错误。您必须从项目中删除此Xamarin.Android.Support.v4包以及其他不匹配的包。(这里不匹配的意思是,如果您的目标Android版本是Android 6,则packages.config文件中列出的所有包都应该有targetFramework =“monoandroid60”包。如果任何包不遵守这一点,那就是不匹配的版本)。如果您弄乱了版本,那么仅删除参考和清理内容是行不通的。您必须从Nuget 包管理器中删除所有不匹配的包 (工具>管理用于解决方案的 NuGet 包...)。请注意,当您要删除这些包时,您还需要删除依赖的包。没有害处,将它们全部删除,您可以使用正确的版本重新安装它们。

将包连同依赖包一起删除后,尝试构建项目。成功构建后,使用正确版本从Nuget 包管理器重新安装包。(包版本根据 API 级别列出,例如: Android 6 即 API 23,将支持版本 23.xx 的包)

清理项目并构建它,希望它会成功构建!

希望这将有助于清理混乱!

于 2017-08-07T07:10:16.670 回答
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'
  }
}
于 2013-12-04T13:52:22.307 回答
0

页面滑块库也有支持库依赖。因此,您会收到此错误。如果是 maven,您需要做的就是将支持库的主项目 pom 文件依赖项更改为提供的范围。

<dependency>
    <groupId>android.support</groupId>
    <artifactId>compatibility-v4</artifactId>
    <version>13</version>
    <scope>provided</scope>
</dependency>

如果是 gradle,我认为您需要更改依赖配置以匹配 maven 提供的范围

请参阅以下链接了解更多详情将 Maven 转换为 Gradle

于 2013-10-01T07:29:28.480 回答
0

我刚遇到同样的问题。我只是将所有 Xamarin.Android.Support... nuget 包更新到相同版本。

注意:这个应用程序较旧,所以我没有去最新的稳定版本,因为还有其他依赖项需要更新。我只是将它们全部移至最高通用版本。

祝你好运!汤姆

于 2018-07-07T16:06:17.893 回答
-2

删除所有旧的引用 .dll 并与此相关,然后从 NuGet 再次添加。

于 2017-02-28T14:31:08.087 回答