构建期间带有Google Play冲突的Android模块

时间:2016-03-01 18:52:24

标签: android appcelerator appcelerator-titanium

我正在使用Google Analytics模块和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$1;
    [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 Play库存在冲突。当我做进一步分析时,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 play服务JAR引用,并且保持该模块中的整个(更大版本JAR)似乎是目前唯一的解决方案。

更新6(2016年3月7日)

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

这是因为任何两个使用相同.jar文件的外部模块。 我通过找到每个模块安装文件夹然后从模块文件夹中的任何一个删除该公共jar解决了这个问题。然后重建解决方案它将工作。在我的情况下我遇到问题rs1816072= G C TC No Call 35 45 42 54 rs183961= G C TC No Call 3 75 22 54 模块和gcm推送通知模块。 / p>