对于未明确编写脚本的buildType,minifyEnabled的默认值是什么?

时间:2015-04-24 11:48:54

标签: android-studio gradle android-gradle proguard minify

我将几个eclipse项目导入Android Studio(v1.1)。

在最初的Eclipse环境中,他们使用Proguard进行发布模式。

在Android Studio环境中,这被转换为build.gradle脚本中的以下内容(由导入,而非我):

buildTypes {
    release {
        minifyEnabled true
        proguardFiles 'proguard.cfg'
    }
}

我理解这意味着“在release版本中,使用proguard.cfg启用Proguard的缩小”

然而,问题是minify似乎也发生在非发布版本(即调试版)中!

这怎么可能?

minifyEnabled的默认调试版本是什么?

更新1:由于以下答案,我现在知道默认值为false。这意味着其他东西正在构建在调试版本中缩小的各种模块。

我发布了整个 build.gradle,用于在调试版本中缩小的其中一个模块:

apply plugin: 'com.android.library'

android {
    compileSdkVersion 8
    buildToolsVersion "21.1.2"

    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 8
    }

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles 'proguard.cfg'
        }
    }
}

项目本身的整个build.gradle(即顶级)是:

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.1.0'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

我无法在这里发现任何可以解释在调试版本上强制缩小的内容。

更新2 :怀疑应用的构建版本(debug)与其所依赖的模块(release?)之间不匹配,我还检查了{{3}在左侧面板上查看。全部显示debug明确。

更新3 :我似乎点击Build Variant了?

当应用程序以debug模式构建时,我确实需要以debug模式构建的所有模块。

我有什么想法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:13)

对于所有构建类型,minifyEnabled的默认值为false,正如@laalto回答的那样。

但是,目前(截至2015-04-24),多模块项目并非如此,其中某些模块(包括应用程序)依赖在其他模块上。这是由于bug #52962导致构建类型传播到库 - 它们始终构建为RELEASE。

欢迎解决此错误或其修复通知的建议。

答案 1 :(得分:12)

  

minifyEnabled的默认调试版本是什么?

对于所有构建类型,minifyEnabled的默认值为falseReference

  

然而,问题是minify似乎也发生在非发布版本(即调试版)中!

     

这怎么可能?

您的调试版本可能会通过其他某个定义或您正在使用的外部构建脚本获得proguard处理。

在您更新的问题中,您有一个库项目和一个使用缩小库的应用程序项目,甚至用于调试版本。这是"功能"。对于解决方案,请考虑issue report中提到的以下内容:

通过将以下内容添加到其build.gradle

来构建库项目的所有变体
android {
    publishNonDefault true
}

在应用程序项目中,使用

选择构建类型特定的依赖项
dependencies {
    releaseCompile project(path: ':theotherproject', configuration: 'release')
    debugCompile project(path: ':theotherproject', configuration: 'debug')
}