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

Multidex error when using ti.map and ti.goosh module

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

问题是两者都需要 Google Play Services 和 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

有人建议我使用 Google 播放服务创建自己的 .jar 文件,如 here 所述。

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

具体来说:

在此先感谢您的帮助。

这是解决多 dexer 问题时最尴尬的情况(至少对我而言)。您可以通过两种方式感受到帮助:

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

  2. 如果您的唯一目的是支持地图和推送,那么最好的解决方案是坚持使用 Titanium 内置的 CloudPush 和地图模块。 (当我必须支持 Maps & Push together 时,这是我在大多数应用程序中始终喜欢的方式)。

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

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

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