Android 模块与 Google 构建期间播放冲突

Android Module with Google Play Conflict during build

我正在使用 Google 分析模块和 Ti.CloudPush。但问题是,在使用 5.2.0.GA 构建应用程序时,出现以下错误:



    [ERROR] :  Failed to run dexer:
    [ERROR] :  
    [ERROR] :  Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/dynamic/LifecycleDelegate;
    [ERROR] :  Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/security/ProviderInstaller;
    [ERROR] :  Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/security/ProviderInstaller$ProviderInstallListener;
    [ERROR] :  Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/security/ProviderInstaller;
    [ERROR] :  Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/auth/AccountChangeEventsResponse;
    [ERROR] :  Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/auth/GoogleAuthUtil;
    [ERROR] :  Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/auth/UserRecoverableAuthException;
    [ERROR] :  Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/auth/AccountChangeEvent;
    [ERROR] :  Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/auth/GoogleAuthException;
    [ERROR] :  
    [ERROR] :  UNEXPECTED TOP-LEVEL EXCEPTION:
    [ERROR] :  java.lang.RuntimeException: Translation has been interrupted
    [ERROR] :      at com.android.dx.command.dexer.Main.processAllFiles(Main.java:608)
    [ERROR] :      at com.android.dx.command.dexer.Main.runMonoDex(Main.java:311)
    [ERROR] :      at com.android.dx.command.dexer.Main.run(Main.java:277)
    [ERROR] :      at com.android.dx.command.dexer.Main.main(Main.java:245)
    [ERROR] :      at com.android.dx.command.Main.main(Main.java:106)
    [ERROR] :  Caused by: java.lang.InterruptedException: Too many errors
    [ERROR] :      at com.android.dx.command.dexer.Main.processAllFiles(Main.java:600)
    [ERROR] :      ... 4 more

似乎与 Google 播放库冲突。当我做进一步分析时,CloudPush 模块随附的 Google Play 库约为 700KB,而 Android SDK 中 extras 文件夹中的播放库约为 5MB。

所以现在的问题是,如果需要移除CloudPush模块中的一个,那么应该移除哪个,或者有没有其他方法可以解决问题。

更新 1(2016 年 3 月 1 日)

从 6.5 版本开始,我们可以为各自的需求创建单独的筒仓。因此,基础是 ~700KB,整个包是 ~5MB。现在,剩下的问题是如何解决两个独立模块使用 Google Play 服务的问题。

更新 2(2016 年 3 月 1 日)

有google-play-services-analytics.jar似乎符合要求。至于能不能用,还需考察。如果能整合,那将是一个很好的选择。

更新 3(2016 年 3 月 3 日)

按照Fokke的建议,我会尝试从TiCloudPush中删除JAR文件,只保留一个在Google Analytics模块中并尝试一下。此外,与它一起,我将尝试将 JAR 保留在 TiCloudPush 中,并仅将 analytics.jar 放入分析模块中以查看其效果。收到回复后会更新。

更新 4(2016 年 3 月 5 日)

我尝试在构建过程中使用 google-play-services-analytics.jar 和 CloudPush 模块,但它仍然给出 dex 错误。

更新 5(2016 年 3 月 6 日)

如果我从 CloudPush 模块中删除 google-play-services-base.jar 那么 dex 错误就解决了。 google-play-services-base.jar 与 google-play-services-analytics.jar 冲突,即使它们来自同一版本。看起来除了从除一个模块之外的所有模块中删除所有 google 播放服务 JAR 引用并将整个(更大版本的 JAR)保留在该模块中似乎是目前唯一的解决方案。

更新 6(2016 年 3 月 7 日)

看来我使用的 google-play-services-analytics.jar 版本不正确。如果我使用在这里找到的正确版本 (https://github.com/benbahrenburg/Ti.GA/tree/master/Android/lib),那么 dex 问题就会得到解决。因此,Ti 模块保持不变,我只需将此模块添加到第 3 方分析 jar 中。

Titanium 目前不能很好地处理重复库: https://jira.appcelerator.org/browse/MOD-1985

在修复此问题之前,您必须手动从任一模块中删除 jar。

这些 JIRA 票证包含一些信息,您可以使用这些信息来决定保留哪个 JAR: https://jira.appcelerator.org/issues/?jql=text%20~%20%22google%20play%20services%20conflict%22

这是因为任何两个外部模块使用相同的 .jar 文件。 我解决了这个问题,方法是找到每个模块安装的文件夹,然后从模块 folder.Then 的任何人中删除那个公共 jar 重建解决方案,它将 work.In 我的情况是 ti.map 模块和 gcm push通知模块。