【问题标题】:Cordova Android project fails compile with duplicate google/gmsCordova Android 项目使用重复的 google/gms 编译失败
【发布时间】:2019-02-22 23:28:37
【问题描述】:

以前不错的 cordova 应用程序现在编译失败,出现以下错误和变体(总是重复 com/google/android/gms/ 的条目...某事...)

    :app:transformClassesWithJarMergingForRelease FAILED

     FAILURE: Build failed with an exception.

     * What went wrong: Execution failed for task 
 ':app:transformClassesWithJarMergingForRelease'.
    com.android.build.api.transform.TransformException: java.util.zip.
  ZipException: duplicate entry:
     com/google/android/gms/tagmanager/Container$FunctionCallMacroCallback.class

我在 Stackoverflow 上查看了许多其他类似错误的案例,并应用了对其他人有用的解决方案:

  • 我已安装插件“cordova-android-support-gradle-release 2.0.1”并将其设置为与 android support v4 版本匹配:
<plugin name="cordova-android-support-gradle-release" spec="^2.0.1">
    <variable name="ANDROID_SUPPORT_VERSION" value="24.1.1" />
  • 我检查了应用程序和 android build.gradle 文件中是否存在重复编译的 google 服务。只有一个:
dependencies {
    implementation fileTree(dir: 'libs', include: '*.jar')
    // SUB-PROJECT DEPENDENCIES START
    implementation(project(path: ":CordovaLib"))
    compile "com.google.android.gms:play-services-analytics:11.0.1"
    compile "com.android.support:support-v4:24.1.1+"
    // SUB-PROJECT DEPENDENCIES END
}
  • 我已运行 Cordova Clean
  • 我已经删除了android平台并重新安装了
  • 我已经使用 cordova 命令行构建进行了编译
  • 我已与最新的 Android Studio 版本同步和编译
  • 我已与它编译时使用的最后一个 Android Studio 版本进行同步和编译,预览版 3.2
  • 我已将以下内容添加到应用的 build.gradle defaultConfig 块中:
    minSdkVersion 19
    targetSdkVersion 28
    multiDexEnabled true
  • 我已经更新了我所有的插件:
cordova-launch-review 2.0.2 "Launch Review"
cordova-plugin-compat 1.2.0 "Compat"
cordova-plugin-device 2.0.2 "Device"
cordova-plugin-dialogs 1.3.4 "Notification"
cordova-plugin-file 6.0.1 "File"
cordova-plugin-globalization 1.11.0 "Globalization"
cordova-plugin-google-analytics 1.8.6 "Google Universal Analytics Plugin"
cordova-plugin-googleplayservices 19.0.3 "Google Play Services for Android"
cordova-plugin-inappbrowser 3.0.0 "InAppBrowser"
cordova-plugin-splashscreen 5.0.3-dev "Splashscreen"
cordova-plugin-statusbar 2.4.2 "StatusBar"
cordova-plugin-whitelist 1.3.3 "Whitelist"
cordova-plugin-x-socialsharing 5.4.4 "SocialSharing"
es6-promise-plugin 4.2.2 "Promise"
  • 我已经下载并安装了支持库

以 Ada Lovelace 的名义,我错过了什么??????

更新编辑:

我从 /platforms/android 目录运行 ./gradlew :app:dependencies 并得到了这个:

+--- com.google.android.gms:play-services-analytics:11.0.1
|    +--- com.google.android.gms:play-services-analytics-impl:[11.0.1] -> 11.0.1
|    |    +--- com.google.android.gms:play-services-base:[11.0.1] -> 11.0.1
|    |    |    +--- com.google.android.gms:play-services-basement:[11.0.1] -> 11.0.1
|    |    |    |    \--- com.android.support:support-v4:25.2.0 -> 24.1.1
|    |    |    |         \--- com.android.support:support-annotations:24.1.1
|    |    |    \--- com.google.android.gms:play-services-tasks:[11.0.1] -> 11.0.1
|    |    |         \--- com.google.android.gms:play-services-basement:[11.0.1] -> 11.0.1 (*)
|    |    \--- com.google.android.gms:play-services-basement:[11.0.1] -> 11.0.1 (*)
|    +--- com.google.android.gms:play-services-base:[11.0.1] -> 11.0.1 (*)
|    +--- com.google.android.gms:play-services-basement:[11.0.1] -> 11.0.1 (*)
|    \--- com.google.android.gms:play-services-tagmanager-v4-impl:[11.0.1] -> 11.0.1
|         +--- com.google.android.gms:play-services-analytics-impl:[11.0.1] -> 11.0.1 (*)
|         +--- com.google.android.gms:play-services-base:[11.0.1] -> 11.0.1 (*)
|         \--- com.google.android.gms:play-services-basement:[11.0.1] -> 11.0.1 (*)
+--- com.android.support:support-v4:24.1.1+ -> 24.1.1 (*)
\--- project :CordovaLib

我的 /platforms/android/app/libs 目录中唯一的库是: google-play-services.jar

【问题讨论】:

  • 您的libs 目录中是否有rogue 库(不需要/错误地存在)(看看)?试试 ./gradlew :app:dependencies 看看可能有什么冲突(重复)。
  • cool @brianfit 我会在我 24 小时没醒的时候去看看;O) 你在安全的手中......
  • 非常感谢 Jon,我不知道我是怎么错过这个命令的。我将输出作为更新编辑放入问题中。老实说,我不知道如何解析它来判断什么是有效的,什么是无效的——我看到对 play-services-basement 的多次引用,例如但作为非重复条目的子分支。
  • ADA 摇滚! (大多数 {by a long way} 第一批程序员都是女性)

标签: android cordova gradle cordova-plugins


【解决方案1】:

结果证明,Dan Wilson 的用于 cordova 的 Google Analytics 插件与 Android 之间存在已知的不兼容性

重要提示如果此插件的最新版本(0.8.0+)不是 在 Cordova 5.0+ 上为您工作,请尝试 Issues 123 中的建议。 Google Play Services 一直很 令人困惑的集成,但最近几个月它已被简化。 这个插件使用了新的更简单的方式(包括它作为一个框架 而不是捆绑它,这可能与其他插件捆绑冲突 它),但如果你之前安装了这个插件,一些旧文件可能 还在流连忘返。

修复,as outlined here,是安装 Android 支持存储库,就像我已经完成的那样,并更新我已经完成的 Google Play 服务和 Google 存储库,并且:

从 /platforms/android/app/libs 中删除 google 服务 jar

解决了。 @Jon-Goodwin 我恢复了线路

cordova.system.library.2=com.android.support:support-v4:24.1.1+

到 /platforms/android/app/project.properties 文件并成功编译,因此删除 jar 文件似乎已经消除了冲突。只要 google-play-services.jar 文件从 /platforms/android/app/libs 中消失,该应用程序似乎可以在有和没有它的情况下编译和运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    相关资源
    最近更新 更多