如何使 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 clean
或gradlew 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?
【问题讨论】:
我认为这个想法是为构成最终应用程序的所有代码运行一次 ProGuard,而不是单独为每个库运行一次。 我正在创建一个用于分发的 SDK jar。我希望公共函数可见,但私有变量和函数不可见。 【参考方案1】:通过将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'
另外请注意,我在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]