使用ti.map和ti.goosh模块时出现Multidex错误

时间:2016-08-30 11:58:22

标签: titanium appcelerator titanium-mobile appcelerator-titanium titanium-modules

我正在制作一个使用地图和通知的Appcelerator Titanium应用程序。为了提供我想使用的功能:

  • ti.map(地图的官方Appcelerator Titanium模块),
  • ti.goosh

问题是两者都需要Google Play服务和Appcelerator Titanium不支持multidex,所以在编译期间我总是收到错误:

[ERROR] :  Failed to run dexer:
[ERROR] :  
[ERROR] :  Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/dynamic/zzd$zza$zza;
[ERROR] :  Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/dynamic/zzg$zza;
[ERROR] :  Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/dynamic/zzd;
[ERROR] :  Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/dynamic/zzd$zza;
[ERROR] :  Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/dynamic/zzg;
[ERROR] :  Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/dynamic/zze;
[ERROR] :  Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/playlog/internal/zza;
[ERROR] :  Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/playlog/internal/zzb;
[ERROR] :  Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/playlog/internal/zzd;
[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

我被建议我应该按照here所述使用Google Play服务创建我自己的.jar文件。

不幸的是我无法创建正确的proguard.conf文件,因此我总是遇到类似的错误。

具体来说:

  • 我能够创建proguard.conf文件(但内容必须是错的),
  • 我创建.jar文件,然后用原始文件切换。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

使其工作的唯一方法是创建SDK的特殊版本,为两个模块提供必要的功能。它被描述为medium.com article但它确实很复杂。

幸运的是,来自caffeinalab的人提供了jar libraries如何实现它们的良好描述。

如果您仍有任何问题,请查看this thread,这可以帮助您解决常见错误。

答案 1 :(得分:0)

这是解决多方格问题最令人尴尬的情况(至少对我而言)。您可以通过两种方式获得帮助:

  1. 尝试使用相同版本的Google Play服务为两个模块创建.jar库(请注意可能还需要相同版本的其他问题)

  2. 如果您的唯一目的是支持地图&推送,然后最好的解决方案是坚持使用Titanium内置的CloudPush&地图模块。 (当我必须支持地图和推送时,这是我在大多数应用中总是喜欢的。)