android - 为什么混淆器在我的调试 multidex 构建中运行?

标签 android gradle proguard android-proguard

配置

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

渐变构建脚本:

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

引用资料:

最佳答案

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

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

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

关于android - 为什么混淆器在我的调试 multidex 构建中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39279187/

相关文章:

gradle - 使用 Gradle 将 .ebextensions 添加到 Spring Boot Jar 的简洁方法

android - Android Studio 中的 ProGuard 提供了非常弱的混淆。

Android 应用程序在 Debug模式下工作,但在安装时不工作

java - 为什么在Toast.makeText().show()之前调用BluetoothSocket.connect()?

java - 将 Realm 添加到 Android 应用程序时出现 StackOverflowError

gradle - Gradle和Spock很少需要运行测试

android - Android Gradle-库使用调味包名称调用 Activity

android - Google Play 服务 v23 Proguard 配置

java - 为什么我在尝试删除 Realm 中的对象时收到 ArrayIndexOutOfBoundsException?

java - 无法解析符号 DynamoDBMapper