我使用Apache Cordova 4来构建我的Android项目,添加了两个Cordova插件:com.admob.google 4.0.7和com.danielcwilson.plugins.googleanalytics
当我执行
$cordova build
我收到以下错误:
意外的顶级例外:com.android.dex.DexException:多个dex文件定义Lcom / google / android / gms / analytics / internal / Command $ 1;在com.android.dx.merge.DexMerger.mergeClassDefs的com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:552)的com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:594) (dexMerger.java:533)位于com.android的com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:170)com.android.dx.merge.DexMerger.merge(DexMerger.java:188) . dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439)位于com.android.dx.com上的com.android.dx.command.dexer.Main.runMonoDex(Main.java:287) . 在com.android.dx.command.Main.main(Main.java:103)的com.android.dx.command.dexer.Main.main(Main.java:199)上运行(Main.java:230):dexDebug失败
我发现这是一个多重依赖的问题,但我能解决这个问题吗?当我删除其中一个插件构建工作正常 .
谢谢!
4 回答
我是
com.admob.google
的开发者(现在已被移至cordova-admob
,并且将被保留)您也可以使用与
cordova-admob
无冲突的分析插件:https://github.com/appfeel/analytics-google如果您想使用adId:https://github.com/appfeel/analytics-google-adid
我与Facebook插件和com.danielcwilson.plugins.googleanalytics有同样的多Dex问题
我能够通过在danielcwilson的plugin.xml中创建自定义规则来解决问题:
为了使更改生效,您必须添加和删除分析插件,这将扼杀您所做的任何本地更改 . 为了防止这种情况,从源代码中提取并在下面进行更改或使用我的分支分支:
我的叉子:https://github.com/diego-link-eggy/google-analytics-plugin
解决方案:在plugins / cordova-plugin-google-analytics中,我创建了一个pixme-play-services-analytics-exclude-v4.gradle文件,其中包含:
在plugin.xml中注释掉旧框架引用并将其替换为刚创建的gradle规则:
然后删除并添加分析插件以使更改生效 .
这个答案来自于阅读此处发布的解决方案:Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat
和Cordova插件规范在这里找到:http://cordova.apache.org/docs/en/5.1.1/plugin_ref_spec.md.html#Plugin%20Specification
我设法以另一种方式解决这个问题:
我提取了平台/ android / com.google.play.services / [App Name] -google-play-services_lib / libs / google-play-services.jar
我删除了冲突的类
我用CLI jar重新创建了jar
我用新版本替换了google-play-services.jar
对我来说,这是因为我更新了我的整个项目,并从之前的版本安装了cordova-plugin-googleplayservices .
删除插件修复了我的问题(确保它不会在构建时重新安装,因为我有几次这个问题,直到我意识到):