android - 如何在 Gradle Android 中禁用 dex 日志记录?

标签 android gradle android-gradle-plugin dex

通常我打开--infoproguardRelease的输出或查看某个任务执行或未执行的原因。

当我运行 assembleRelease--info我从 dexRelease 收到大量垃圾邮件包含数千行,例如:

processing archive I:\build\intermediates\classes-proguard\release\classes.jar...
processing android/support/v7/appcompat/R.class...
ignored resource META-INF/LICENSE.txt
processing android/support/v4/app/Fragment.class...

我认为这些行应该是 --debug水平,但我不知道如何修改。我想像往常一样拥有所有其他输出,但忽略来自 dexRelease 的垃圾邮件.

最佳答案

我终于找到了一种禁用 dex 输出的方法,仅此而已(Android Gradle Plugin ~1.2):

import com.android.build.gradle.api.ApplicationVariant;
import com.android.builder.core.AndroidBuilder;
import java.lang.reflect.Field;

afterEvaluate {
    project.android.applicationVariants.all { ApplicationVariant variant ->
        if (!variant.dex) return;
        Field v = AndroidBuilder.class.getDeclaredField("mVerboseExec")
        v.accessible = true

        boolean originalVerbose;
        variant.dex.doFirst {
            originalVerbose = v.get(variant.androidBuilder)
            v.set(variant.androidBuilder, false)
        }
        variant.dex.doLast {
            v.set(variant.androidBuilder, originalVerbose)
        }
    }
}

这有点 hacky(反射(reflection)),但我发现没有公共(public) API 可以做到这一点,因为 mVerboseExec value 在初始化语句中被初始化并且值被缓存。

关于android - 如何在 Gradle Android 中禁用 dex 日志记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29922803/

相关文章:

android - 在 travis support-v4 21.0 上找不到 android.support.v4.widget.DrawerLayoutImpl 的类文件

gradle - Gradle生成.apk老

android - 错误:未找到Gradle DSL方法:'implementationSdkVersion()'

android - 广播接收器不会收到 Intent

android - Facebook正在寻找什么文件

android - 如何构建 AAR 和示例应用程序

从 5.1.1 升级到 6.4.1 后,gradle 不获取依赖项

android - 更新Android Studio RC 2后出现Gradle Build错误-android-sdk-linux'不存在

android - 在 Android L. 上运行 native 库错误 : only position independent executables (PIE) are supported

java - 错误的 ImageView 正在更新