如何让runProguard为android-library Gradle插件工作?

时间:2013-09-30 18:00:54

标签: android gradle proguard android-library android-gradle

我想在我的Android库的发布版本上运行ProGuard。下面是我项目中的build.gradle文件。

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}

apply plugin: 'android-library'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 18
    buildToolsVersion "18.0.1"

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 18
    }

    sourceSets {
        main {
            java {
                srcDir 'src/main/java'
            }
            resources {
                srcDir 'src/../lib'
            }
        }
    }

    buildTypes {
        release {
            runProguard true
            proguardFile getDefaultProguardFile('proguard-android.txt')
        }
    }
}

运行gradlew cleangradlew build会返回以下错误:

> Could not find method buildTypes() for arguments [build_25r1m0a3etn5cudtt5odlegprd$_run_closure2_closure10@5f3306ad] on project

似乎插件android-library缺少buildTypes方法。如果我将apply plugin更改为android,则gradlew会成功运行。但是,这是一个图书馆项目,我想保持这样。我的gradle.build的其他部分(这里没有提到)依赖于项目是一个库。

有没有办法让android-library插件在构建时运行ProGuard?

1 个答案:

答案 0 :(得分:2)

release中取出buildTypes,解决了我的问题:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}

apply plugin: 'android-library'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 18
    buildToolsVersion "18.0.1"

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 18
    }

    sourceSets {
        main {
            java {
                srcDir 'src/main/java'
            }
            resources {
                srcDir 'src/../lib'
            }
        }
    }

    release {
        runProguard true
        proguardFile getDefaultProguardFile('proguard-android.txt')
        proguardFile 'proguard-android.txt'
    }
}

另请注意,我在proguardFile下添加了另一个release。这解决了解决初始buildTypes问题后我遇到的另一个问题。