未明确编写脚本的 buildType 的 minifyEnabled 的默认值是啥?

Posted

技术标签:

【中文标题】未明确编写脚本的 buildType 的 minifyEnabled 的默认值是啥?【英文标题】:What is the default for minifyEnabled for buildType not explicitly scripted?未明确编写脚本的 buildType 的 minifyEnabled 的默认值是什么? 【发布时间】:2015-07-03 00:20:33 【问题描述】:

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

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

在 Android Studio 环境中,这在 build.gradle 脚本中被翻译成以下内容(由导入,而不是由我):

buildTypes 
    release 
        minifyEnabled true
        proguardFiles 'proguard.cfg'
    

我明白这意味着“在release build, enable Proguard's minify, using proguard.cfg”

然而,问题在于 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()
    

我在这里找不到任何可以解释在调试版本中强制执行 minify 的内容。


更新 2: 怀疑应用程序的构建 (debug) 与其所依赖的模块 (release?) 不匹配,我还检查了左侧的 Build Variant 视图控制板。全部显示debug


更新 3:看来我点击了a bug/limitation in Android-Gradle?

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

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

【问题讨论】:

【参考方案1】:

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

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

非常欢迎提出解决此错误的建议或修复通知。

【讨论】:

【参考方案2】:

用于调试构建的 minifyEnabled 的默认值是什么?

对于所有构建类型,minifyEnabled 的默认值为 false。 Reference.

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

这怎么可能?

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


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

通过将以下内容添加到其build.gradle 来构建库项目的所有变体:

android 
    publishNonDefault true

在应用项目中,选择构建类型特定的依赖项

dependencies 
    releaseCompile project(path: ':theotherproject', configuration: 'release')
    debugCompile project(path: ':theotherproject', configuration: 'debug')

【讨论】:

非常感谢。我认为默认值是false,但something is minifying my non-release build 对我来说是个谜。我如何找到负责缩小我的调试版本的原因?我是 Android Studio 和 Gradle 的新手,此时我正在黑暗中摸索。有什么建议吗?暂时 +1,一旦我对正在发生的事情有了更好的了解,就会接受。 我刚刚发布了一个更新,以防万一这可以提供更多见解。我还在黑暗中摸索。谢谢。 是的。 Android Gradle 插件中的一个错误:code.google.com/p/android/issues/detail?id=52962

以上是关于未明确编写脚本的 buildType 的 minifyEnabled 的默认值是啥?的主要内容,如果未能解决你的问题,请参考以下文章

4.1Android Stuido配置你的Build Variant

三 脚本编写与运行

iPhone 应用程序启动图像未显示在 iPad mini 中

Bash 脚本未在 Cron 中正确执行

Android Gradle 插件BuildType 编译类型配置 ① ( BuildType 编译类型简介 | BuildType#applicationIdSuffix 包名后缀配置 )

ADB连接到华为G Play Mini,未连接,其他设备(acer,samsung)连接良好