【问题标题】:How to make runProguard work for the android-library Gradle plugin?如何使 runProguard 为 android-library Gradle 插件工作?
【发布时间】:2013-10-06 16:52:45
【问题描述】:

我想在我的 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 更改为androidgradlew 将成功运行。但是,这是一个图书馆项目,我想保留它。我的gradle.build(此处未提及)的其他部分依赖于作为库的项目。

有什么方法可以让android-library 插件在构建时运行 ProGuard?

【问题讨论】:

  • 我认为这个想法是为构成最终应用程序的所有代码运行一次 ProGuard,而不是单独为每个库运行一次。
  • 我正在创建一个用于分发的 SDK jar。我希望公共函数可见,但私有变量和函数不可见。

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


【解决方案1】:

通过将releasebuildTypes 中取出来解决我的问题,如下所示:

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

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

【讨论】:

  • 您能否更具体地说明您在何处添加了其他 proguardFile 以及为什么需要这样做?
  • 我直接把它添加到项目目录的根目录下(build.gradle文件所在的位置。该文件可用于配置各种选项(例如,哪些函数/类/变量不应该) “受保护”)。此处提供手册:proguard.sourceforge.net/index.html
  • 啊,我明白了。我缺少的一点是您 移动 发布块,因此它与 releaseTypes 曾经在 build.gradle 中的级别相同
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-15
  • 1970-01-01
  • 1970-01-01
  • 2015-01-20
  • 2014-12-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多