与项目':app'中的依赖项冲突。应用(15.0.2)和测试应用(12.0.1)的已解决版本不同(可能是onesignal&firebase问题)

时间:2018-08-15 23:23:53

标签: android gradle build.gradle onesignal

我似乎无法在Android Studio 3.0.1上为我的应用构建gradle(生成apk作品)。下面是构建输出。

Error:FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:preDebugAndroidTestBuild'.
> Conflict with dependency 'com.google.firebase:firebase-messaging' in project ':app'. 
Resolved versions for app (15.0.2) and test app (12.0.1) differ. See https://d.android.com/r/tools/test-apk-dependency-conflicts.html for details.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 23s

Here是build.gradle文件的内容。

更新21.8.2018:

我注意到在外部库中,我有冲突

enter image description here

我发现,即使gradle产生冲突错误,我也可以生成apk(构建APK)。删除gradle错误的方法是删除/注释此行:

implementation 'com.google.android.gms:play-services-places:15.0.1'

,但APK无法编译。它曾经可以正常工作,但我意识到在将Firebase包含在使用同一Android Studio的另一个项目(基于cordova的Android应用程序)中之后,可能会发生此问题。我的其他同事的机器上不会发生此问题。我该如何解决呢?谢谢

5 个答案:

答案 0 :(得分:0)

请发布您的build.gradle文件。但是我没有看到是因为您有implementationtestImplementation的{​​{1}}

版本不同

答案 1 :(得分:0)

尝试使用以下配置强制您的Firebase依赖版本

std::vector<int *>intList;
int *a = new int;
*a = 3;
int *b = new int;
*b = 2;
int *c = new int;
*c = 1;

intList.push_back(a);
intList.push_back(b);
intList.push_back(c);

std::vector<int *>::iterator it;

for (it = intList.begin(); it != intList.end();)
{
    int *a = (int*)*it;

    if ((*a) == 2)
    {
        delete a;
        intList.erase(it);
    }
    else
    {
        ++it;
    }
}

答案 2 :(得分:0)

它看起来像是传递依赖问题。 com.google.android.gms:play-servicescom.onesignal:OneSignal都使用com.google.firebase:firebase-messaging,但是它们可能正在导入不同的版本。我建议升级以使用这些库的最新版本。

答案 3 :(得分:0)

似乎有两个库依赖于firebase消息传递库,并且它们依赖于不同的版本。要找出它们是什么,请转到Android Studio中的“终端”窗口,然后运行以下命令:

  

./ gradlew app:依赖项

这将以树状结构显示项目中的所有依赖项。一旦检测到哪些库添加了重复的库,就可以尝试以下方法之一:

1)检查build.gradle中其他版本的父依赖项,它们是否都使用相同版本的可传递重复依赖项。

2)从父依赖项中排除具有较低版本的依赖项。示例:

  implementation('com.example.abc:def:1.0.0') {
     exclude group: 'com.google.firebase', module: 'firebase-messaging' 
  }

3)实施带有解决方案策略的固定版本:

configurations.all {
  resolutionStrategy { 
     force com.google.firebase:firebase-messaging:15.0.2
  }
}

答案 4 :(得分:0)

依赖项 OneSignal 正在使用play-service的旧版本

您可以通过以下方式解决此问题。

  • 从OneSignal中排除play-service,并强制使用您正在使用的最新版本。 (如@gizembrh answer)。 (我不建议,因为OneSignal的代码可能会因新的播放服务而崩溃
  • 下载OneSignal sdk,并将其作为模块放入您的项目中。然后更新OneSignal的播放服务版本,解决它不推荐使用的方法(如果有)。 (工作量长
  • 将您的play-service版本降级为与OneSignal相同的版本。 (我认为最简单的

我认为第三种选择最适合您。因为您只需要降级播放服务版本。参见 OneSignal build.gradle play-service version

def playServicesVersion = '12.0.0'
implementation "com.google.android.gms:play-services-places:$playServicesVersion"
implementation "com.google.android.gms:play-services-maps:$playServicesVersion"

也请在您的项目级别 build.gradle 中使用以下版本的google-services。请参见 OneSignal build.gradle google-services version

classpath 'com.google.gms:google-services:4.0.1'

如果您在gradle的两项更改中都做到了这一点,您将再也不会遇到此错误。