使用 ti.map 和 ti.goosh 模块时出现 Multidex 错误
Multidex error when using ti.map and ti.goosh module
我正在制作一个使用地图和通知的 Appcelerator Titanium 应用程序。要提供这样的功能,我想使用:
- ti.map(地图的官方 Appcelerator Titanium 模块),
- ti.goosh.
问题是两者都需要 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 文件,所以我总是遇到类似的错误。
具体来说:
- 我可以创建 proguard.conf 文件(但它的内容一定是错误的),
- 我创建了 .jar 文件并将其与原始文件切换。
在此先感谢您的帮助。
这是解决多 dexer 问题时最尴尬的情况(至少对我而言)。您可以通过两种方式感受到帮助:
尝试使用相同版本的 Google Play 服务为两个模块创建 .jar 库(注意可能需要相同版本的其他问题)
如果您的唯一目的是支持地图和推送,那么最好的解决方案是坚持使用 Titanium 内置的 CloudPush 和地图模块。 (当我必须支持 Maps & Push together 时,这是我在大多数应用程序中始终喜欢的方式)。
使其工作的唯一方法是创建特殊版本的 SDK,为两个模块提供必要的功能。它被描述为medium.com article,但它确实是一个复杂的事情。
幸运的是来自 caffeinalab 的人提供了 jar libraries 很好的描述如何实现它们。
如果您还有任何问题,最好查看 this thread,这可以帮助您解决常见错误。
我正在制作一个使用地图和通知的 Appcelerator Titanium 应用程序。要提供这样的功能,我想使用:
- ti.map(地图的官方 Appcelerator Titanium 模块),
- ti.goosh.
问题是两者都需要 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 文件,所以我总是遇到类似的错误。
具体来说:
- 我可以创建 proguard.conf 文件(但它的内容一定是错误的),
- 我创建了 .jar 文件并将其与原始文件切换。
在此先感谢您的帮助。
这是解决多 dexer 问题时最尴尬的情况(至少对我而言)。您可以通过两种方式感受到帮助:
尝试使用相同版本的 Google Play 服务为两个模块创建 .jar 库(注意可能需要相同版本的其他问题)
如果您的唯一目的是支持地图和推送,那么最好的解决方案是坚持使用 Titanium 内置的 CloudPush 和地图模块。 (当我必须支持 Maps & Push together 时,这是我在大多数应用程序中始终喜欢的方式)。
使其工作的唯一方法是创建特殊版本的 SDK,为两个模块提供必要的功能。它被描述为medium.com article,但它确实是一个复杂的事情。
幸运的是来自 caffeinalab 的人提供了 jar libraries 很好的描述如何实现它们。
如果您还有任何问题,最好查看 this thread,这可以帮助您解决常见错误。