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

Posted

技术标签:

【中文标题】如何使 runProguard 为 android-library Gradle 插件工作?【英文标题】:How to make runProguard work for the android-library Gradle plugin? 【发布时间】: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。我希望公共函数可见,但私有变量和函数不可见。 【参考方案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 中的级别相同

以上是关于如何使 runProguard 为 android-library Gradle 插件工作?的主要内容,如果未能解决你的问题,请参考以下文章

错误:(26, 0) 找不到 Gradle DSL 方法:'runProguard()'

Gradle 和 proguard:找不到参数的方法 runProguard() [true]

android studio 代码混淆错误

ProGuard 阅读库目录

android 如何使LinearLayout内控件的排列方向为自下至上

如何使文本居中 - Eclipse for Android