为什么? AndroidStudio+Gradle = 46000 方法计数 VS Eclipse+Ant = 43000 方法计数

WHY? AndroidStudio+Gradle = 46000 method count VS Eclipse+Ant = 43000 method count

我正在使用带有 Google Play Services 7.5、Android 21 和支持 v4 库的混淆器编译一个项目。如果我用 android studio 编译它,我的方法数比用 eclipse 编译它要多。我将一个名为 dex-method-count 的程序用于两个程序生成的两个 apk 中,我发现这是原因:

Android工作室+gradle:

    support: 5416
        v4: 2755
            app: 594
            content: 33
            graphics: 96
                drawable: 96
            internal: 74
                view: 74
            media: 123
                session: 60
            os: 13
            text: 17
            util: 166
            view: 1024
                accessibility: 204
            widget: 615
        v7: 2661
            app: 232
            appcompat: 1
            internal: 1757
                app: 77
                text: 3
                transition: 1
                view: 628
                    menu: 536
                widget: 1047
            view: 24
            widget: 647

Eclipse + Ant:

    support: 2073
        v4: 2073
            app: 549
            content: 21
            media: 123
                session: 60
            os: 11
            util: 157
            view: 757
                accessibility: 204
            widget: 455

正如您在第一个选项中看到的,它添加了很多支持 v7 的方法,为什么?如何避免这种情况?

谢谢

PD:我为库和应用程序构建 gradle 个文件:

apply plugin: 'com.android.library'

android {
    compileSdkVersion 'Google Inc.:Google APIs:22'
    buildToolsVersion "22.0.1"

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 10
    }

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
        }
        debug {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
        }
    }
}

dependencies {
    compile 'com.android.support:support-v4:22.2.1'
    compile 'com.google.android.gms:play-services:7.5.0'
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

应用程序:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 'Google Inc.:Google APIs:22'
    buildToolsVersion "22.0.1"

    defaultConfig {
        applicationId "com.example.launcher"
        minSdkVersion 10
        targetSdkVersion 10
    }

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
        }
        debug {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
        }
    }
}

dependencies {
    compile project(':caponateLibrary')
    compile 'com.google.android.gms:play-services:7.5.0'
}

com.google.android.gms:play-services 依赖于 com.google.android:wearablecom.google.android:play-services-cast。每个都依赖于 v7 支持库(分别为 recyclerview-v7mediarouter-v7)。

除非您几乎使用了 Play 服务 SDK 中的所有内容,否则使用更细粒度的依赖项会更好地为您服务(请参阅 "Selectively compiling APIs into your executable" 上的 this page)。这不仅会摆脱一堆 Play 服务膨胀,而且可能会摆脱您的 v7 方法,具体取决于您使用的是哪些 Play 服务。

顺便说一句,compileSdkVersion 'Google Inc.:Google APIs:22' 是没有意义的,除非您仍在使用 Maps V1,这在现阶段是相当令人惊讶的。 compileSdkVersion 22 会是更好的选择。