Android Studio:为什么我在全新的 Google 地图 API 项目上出现多 dex 错误?

Android Studio: Why am i getting multi dex error on brand new Google Maps API project?

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

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

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

错误:.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'' finished with non-zero exit value 2

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

android {
          //stuff

defaultConfig {
    ...

       // Enable multiDex support. 
       multiDexEnabled true
    }

}

dependencies {
   compile 'com.android.support:multidex:1.0.0'
}

另外,哎呀,就像上面在你的清单中提到的海报一样,你还需要补充说你正在使用 multidex 支持库中的 multidex class。

<?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>

更改您的 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 class 从 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 了解更多信息。

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

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

这是开始使用 Google Maps Android API

的好来源

我按照 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'
}

引用如下:

Your probably compiling all of the play-services API's using compile 'com.google.android.gms:play-services:9.2.0'... Now we can selectively compile API's to avoid dex limit of 64K. For Google Maps use com.google.android.gms:play-services-maps:9.2.0... – Loki Jul 1 at 19:01

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

setting up google play services

完成此 link 只需在应用程序中添加所需的依赖项。 这将防止 64k 超出错误。

编码愉快。

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

minSdkVersion 21