为什么 proguard 运行 在我的调试 multidex 构建中?

Why is proguard running in my debug multidex build?

配置

Gradle 构建脚本:

buildscript {
    repositories {
        maven { url "https://plugins.gradle.org/m2/" }
    }

    dependencies {
        classpath "com.android.tools.build:gradle:2.1.3"
    }
}

Android DSL 配置:

android {
    defaultConfig {
        multiDexEnabled true
    }

    signingConfigs {
        debug {

        }

        release {

        }
    }

    buildTypes {
        debug {
            versionNameSuffix ".debug"
        }

        release {
            signingConfig signingConfigs.release
            minifyEnabled true
            proguardFile getDefaultProguardFile("proguard-android.txt")
            proguardFile "proguard-project.txt"
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    dexOptions {
        jumboMode true
        javaMaxHeapSize "4g"
    }

    dataBinding {
        enabled = true
    }
}

来自gradlew assembleDebug的输出:

:app:compileDebugNdk UP-TO-DATE
:app:compileDebugSources
:app:prePackageMarkerForDebug
:app:transformClassesWithJarMergingForDebug
:app:collectDebugMultiDexComponents UP-TO-DATE
:app:transformClassesWithMultidexlistForDebug
ProGuard, version 5.2.1
Reading program jar [/<>/build/intermediates/transforms/jarMerging/debug/jars/1/1f/combined.jar]
Reading library jar [/<>/build-tools/23.0.3/lib/shrinkedAndroid.jar]
Preparing output jar [/<>/build/intermediates/multi-dex/debug/componentClasses.jar]
  Copying resources from program jar [/<>/build/intermediates/transforms/jarMerging/debug/jars/1/1f/combined.jar]
:app:transformClassesWithDexForDebug
:app:mergeDebugJniLibFolders UP-TO-DATE
:app:transformNative_libsWithMergeJniLibsForDebug UP-TO-DATE
:app:processDebugJavaRes UP-TO-DATE
:app:transformResourcesWithMergeJavaResForDebug UP-TO-DATE
:app:validateDebugSigning
:app:packageDebug
:app:zipalignDebug
:app:assembleDebug

BUILD SUCCESSFUL

Total time: 1 mins 0.285 secs

我试过:

buildTypes {
    debug {
        debuggable true
        minifyEnabled false
    }

    release {
        debuggable false
        minifyEnabled true
    }
}

参考文献:

您需要在 debug 构建类型中指定 minifyEnabled false。当您创建一个新项目时,它通常默认存在。你好像已经删除了它。

当使用 multidex 将您的 类 分成多个 dex 文件时,Android 插件将在内部使用 ProGuard 来确定哪个 类 必须保留在主要 classes.dex.

此执行与您自己的规则或 minifyEnabled 标志无关,可以安全地忽略,尽管日志输出可能很烦人。要禁止显示日志消息,您可以将以下内容添加到 build.gradle:

tasks.whenTaskAdded { task ->
  if (task.name.startsWith("transformClassesWithMultidexlistFor")) {
    task.logging.level = LogLevel.ERROR
  }
}