Android 如果使用播放服务编译,NavigationDrawer将失败

Android 如果使用播放服务编译,NavigationDrawer将失败,android,google-play-services,android-coordinatorlayout,android-multidex,Android,Google Play Services,Android Coordinatorlayout,Android Multidex,我能够编译并运行任何问题,一个NavigationDrawer示例 接下来,我加入了一个模块,该模块又包括google play服务库(该模块“地图”已在另一个项目中测试和使用,并且运行良好) 但当我将此模块作为依赖项添加到build.gradle中时,(compile proyect(“:map”),构建失败 信息是: “错误:任务执行失败”:应用程序:transformClassesWithDexForDebug”。 com.android.build.api.transform.Trans

我能够编译并运行任何问题,一个NavigationDrawer示例

接下来,我加入了一个模块,该模块又包括google play服务库(该模块“地图”已在另一个项目中测试和使用,并且运行良好)

但当我将此模块作为依赖项添加到build.gradle中时,
(compile proyect(“:map”)
,构建失败

信息是:

“错误:任务执行失败”:应用程序:transformClassesWithDexForDebug”。 com.android.build.api.transform.TransformException:com.android.ide.common.process.ProcessException:java.util.concurrent.ExecutionException:com.android.dex.DexIndexOverflowException:方法ID不在[0,0xffff]:65536“

我知道发生这个错误是因为方法的数量超过了64K的最大值。因此,我使用“multiDexEnabled true”选项

现在,它编译得非常完美,但在调试模式下运行时,它会抛出一个运行时异常,此时它正试图加载
CoordinatorLayout
布局

这是控制台抛出的内容

java.lang.RuntimeException: Unable to start activity ComponentInfo{net.simplifiedcoding.navigationdrawerexample/net.simplifiedcoding.navigationdrawerexample.MainActivity}: android.view.InflateException: Binary XML file line #11: Binary XML file line #2: Error inflating class android.support.design.widget.CoordinatorLayout
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2426)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2490)
    at android.app.ActivityThread.-wrap11(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1354)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5443)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
    Caused by: android.view.InflateException: Binary XML file line #11: Binary XML file line #2: Error inflating class android.support.design.widget.CoordinatorLayout
    at android.view.LayoutInflater.inflate(LayoutInflater.java:539)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
    at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:284)
    at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)
    at net.simplifiedcoding.navigationdrawerexample.MainActivity.onCreate(MainActivity.java:24)
我还试图将图书馆的声明限制在我打算使用的范围内,以取代

    compile 'com.google.android.gms:play-services:+'

同样的问题。它是生成的,但在加载协调器布局时失败

问题是:

    apply plugin: 'com.android.application'

    android {
        compileSdkVersion 25
        buildToolsVersion "25.0.2"

        defaultConfig {
            applicationId "net.simplifiedcoding.navigationdrawerexample"
            minSdkVersion 16
            targetSdkVersion 25
            versionCode 1
            versionName "1.0"
            multiDexEnabled true
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        testCompile 'junit:junit:4.12'
        compile 'com.android.support:appcompat-v7:24.2.0'
        compile 'com.android.support:design:24.2.0'
        compile project (':map')
    }
是否可以将NavigationDrawer与包含play services库的项目以及multiDexEnabled选项集一起运行(我需要设置此选项,因为我在根项目中有很多方法)

希望它足够清楚

这是NavigationDrawer的build.grade:

    apply plugin: 'com.android.application'

    android {
        compileSdkVersion 25
        buildToolsVersion "25.0.2"

        defaultConfig {
            applicationId "net.simplifiedcoding.navigationdrawerexample"
            minSdkVersion 16
            targetSdkVersion 25
            versionCode 1
            versionName "1.0"
            multiDexEnabled true
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        testCompile 'junit:junit:4.12'
        compile 'com.android.support:appcompat-v7:24.2.0'
        compile 'com.android.support:design:24.2.0'
        compile project (':map')
    }
这是地图项目的build.gradle,包含为NavigationDrawer的依赖项

    apply plugin: 'com.android.library'

    android {
        compileSdkVersion 'Google Inc.:Google APIs:24'
        buildToolsVersion "24.0.2"

        defaultConfig {
            minSdkVersion 15
            targetSdkVersion 25

        }

        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt')
            }
        }
    }

    dependencies {
        //compile 'com.google.android.gms:play-services:+'
        compile 'com.google.android.gms:play-services-maps:+'
        compile 'com.google.android.gms:play-services-location:+'
        compile 'com.google.android.gms:play-services-gcm:+'
        compile 'com.google.android.gms:play-services-plus:+'
    }

除了cricket_007的评论外,您可能还需要检查以下警告:

使用动态依赖项(例如,
palete-v7:23.0.+
)可能会导致意外的版本更新和回归不兼容。我们建议您明确指定库版本(例如,
palette-v7:25.2.0

此外,请检查使用过的版本。如中所述

如果包含多个支持库,则最低SDK版本必须是任何指定库所需的最高版本。例如,如果您的应用程序同时包含和,则您的最低SDK版本必须为17或更高


最后,您可能还需要检查此项,以了解有关设计支持库的更多信息。

永远不要使用
+
作为版本号!你把错误弄混了
CoordinatorLayout
与其他消息无关。我声明最低SDK为18,现在正在工作。非常感谢你!