【问题标题】:Android Studio: Why am i getting multi dex error on brand new Google Maps API project?Android Studio:为什么我在全新的 Google Maps API 项目中出现多 dex 错误?
【发布时间】:2016-07-01 18:50:01
【问题描述】:

我对 Android 编程比较陌生,我正在尝试创建一个 Google 地图项目。我在 Android Studio 中使用了模板选项,并添加了 API 的密钥。

我没有添加任何我自己的代码并保留模板代码,因为我只是想运行代码并查看它的外观,但是,当我尝试运行它时,我不断收到多 dex 错误在模拟器上导致构建失败。收到此错误对我来说很奇怪,因为我根本没有添加任何代码,并且正在使用来自 Android Studio 的 Google 地图模板。

有人知道为什么这个错误会出现在一个全新的项目上吗?我看到的错误贴在下面。

错误:.dex 文件中的方法引用数不能超过 64K。 通过https://developer.android.com/tools/building/multidex.html了解如何解决此问题

错误:任务 ':app:transformClassesWithDexForDebug' 执行失败。

com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle .process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0_91\bin\java.exe'' 以非零退出值 2 结束

【问题讨论】:

  • 您可能正在使用 compile 'com.google.android.gms:play-services:9.2.0' 编译所有播放服务 API... 现在我们可以选择性地编译 API 以避免 dex 限制64K。对于谷歌地图,使用 com.google.android.gms:play-services-maps:9.2.0...
  • ^ 上面的评论就像一个魅力。谢谢。
  • 有趣的是,谷歌甚至搞砸了 DEX 限制,我一直不明白为什么他们不能解决这个问题。

标签: android google-maps android-multidex


【解决方案1】:

引用如下:

您可能正在使用 compile 'com.google.android.gms:play-services:9.2.0' 编译所有 play-services API... 现在我们可以选择性地编译 API 以避免 64K 的 dex 限制。对于 Google 地图,请使用 com.google.android.gms:play-services-maps:9.2.0... – Loki 7 月 1 日 19:01

Loki 的回答很有效,而且非常简单。

【讨论】:

    【解决方案2】:

    setting up google play services

    通过此链接只需在应用程序中添加所需的依赖项。 这将防止 64k 超出错误。

    编码愉快。

    【讨论】:

      【解决方案3】:

      对于那些尝试了以上所有方法但都失败的人。尝试在 build.gradile 文件中将 mini sdk 版本更改为 21。对我来说,它是在 16 上,当我将它更改为 21 时,multidex 错误就永远消失了。

      minSdkVersion 21

      【讨论】:

        【解决方案4】:

        问题是您目前有大量的方法。 dex 只能有 65536 个方法。您可以尝试通过编辑 build.gradle 文件来启用 multiDex。

        android {
                  //stuff
        
        defaultConfig {
            ...
        
               // Enable multiDex support. 
               multiDexEnabled true
            }
        
        }
        
        dependencies {
           compile 'com.android.support:multidex:1.0.0'
        }
        

        此外,哎呀,作为清单中提到的海报,您还需要添加您正在使用 multidex 支持库中的 multidex 类。

        <?xml version="1.0" encoding="utf-8"?>
        <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.android.multidex.dexapp">
        <application
            ...
            android:name="android.support.multidex.MultiDexApplication">
            ...
        </application>
        

        【讨论】:

          【解决方案5】:

          更改您的 Gradle 构建配置以启用 multidex

          android {
              compileSdkVersion 23
              buildToolsVersion "24.0.0 rc2"
          
              defaultConfig {
                  applicationId "com.try.app"
                  minSdkVersion 16
                  targetSdkVersion 23
                  versionCode 1
                  versionName "1.0"
                  multiDexEnabled true
              }
          

          在您的清单中,将 MultiDexApplication 类从 multidex 支持库添加到应用程序元素。

          <?xml version="1.0" encoding="utf-8"?>
          <manifest xmlns:android="http://schemas.android.com/apk/res/android"
              package="com.example.android.multidex.myapplication">
              <application
                  ...
                  android:name="android.support.multidex.MultiDexApplication">
                  ...
              </application>
          </manifest>
          

          注意:访问https://developer.android.com/studio/build/multidex.html了解更多信息。

          【讨论】:

          • Multidex 很糟糕,并且充满了运行时错误,远离这个!
          【解决方案6】:

          在 defaultConfig 中将属性 multiDexEnabled 设置为 true。当方法引用增加 65k 的限制时,会发生此错误。检查 Google Play 服务 API。

              android{
                  ...
                  defaultConfig {
                      ...
                      multiDexEnabled true
                  }
                  ...
              }
          

          这里是开始使用 Google Maps Android API 的好来源

          【讨论】:

            【解决方案7】:

            我按照 Loki 的建议删除了依赖项,它可以工作。

            dependencies {
                compile fileTree(dir: 'libs', include: ['*.jar'])
                testCompile 'junit:junit:4.12'
                compile 'com.android.support:appcompat-v7:24.1.1'
                compile 'com.google.android.gms:play-services-maps:9.4.0'
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2016-12-10
              • 1970-01-01
              • 2020-09-12
              • 1970-01-01
              • 2020-11-08
              • 1970-01-01
              • 2015-09-13
              相关资源
              最近更新 更多