首页 文章

Cordova com.danielcwilson.plugins.googleanalytics与com.admob.google

提问于
浏览
0

我使用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 回答

  • 2

    我是 com.admob.google 的开发者(现在已被移至 cordova-admob ,并且将被保留)

    您也可以使用与 cordova-admob 无冲突的分析插件:https://github.com/appfeel/analytics-google

    cordova plugin add cordova-plugin-analytics
    

    如果您想使用adId:https://github.com/appfeel/analytics-google-adid

    cordova plugin add cordova-plugin-analytics-adid
    
  • 1

    我与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文件,其中包含:

    dependencies {
       compile ('com.google.android.gms:play-services-analytics:+') {       
           exclude module: 'support-v4'
       }
    }
    

    在plugin.xml中注释掉旧框架引用并将其替换为刚创建的gradle规则:

    <platform name="android">
          <!-- <framework src="com.google.android.gms:play-services-analytics:+" /> -->
          <framework src="play-services-analytics-exclude-v4.gradle" custom="true" type="gradleReference" />
    

    然后删除并添加分析插件以使更改生效 .

    cordova plugin rm cordova-plugin-google-analytics
      cordova plugin add https://github.com/diego-link-eggy/google-analytics-plugin
         OR
       cordova plugin add <path to where you cloned source>
    

    这个答案来自于阅读此处发布的解决方案: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

  • 0

    我设法以另一种方式解决这个问题:

    • 我提取了平台/ android / com.google.play.services / [App Name] -google-play-services_lib / libs / google-play-services.jar

    • 我删除了冲突的类

    • 我用CLI jar重新创建了jar

    • 我用新版本替换了google-play-services.jar

  • 3

    对我来说,这是因为我更新了我的整个项目,并从之前的版本安装了cordova-plugin-googleplayservices .

    删除插件修复了我的问题(确保它不会在构建时重新安装,因为我有几次这个问题,直到我意识到):

    cordova plugin rm cordova-plugin-googleplayservices
    

相关问题