【问题标题】:Why is proguard running in my debug multidex build?为什么 proguard 在我的调试 multidex 构建中运行?
【发布时间】:2025-12-23 03:20:12
【问题描述】:

配置

  • Mutlidex 已启用。
  • MinifyEnabled 仅在 release 中为 true

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

参考资料:

【问题讨论】:

  • 您是否尝试过将 minifyEnabled 显式设置为 false 以进行调试构建?

标签: android gradle proguard android-proguard


【解决方案1】:

当使用 multidex 将类拆分为多个 dex 文件时,Android 插件将在内部使用 ProGuard 来确定哪些类必须保留在主 classes.dex 中。

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

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

【讨论】:

  • 感谢您的解释和调查。这确实有效。 level (setLevel) 已弃用。我们现在应该使用什么?
【解决方案2】:

您需要在debug 构建类型中指定minifyEnabled false。当您创建新项目时,它通常默认存在。您似乎已将其删除。

【讨论】:

最近更新 更多