【发布时间】:2015-11-10 14:54:01
【问题描述】:
我希望有人能回答我认为基本的 Gradle/Proguard 问题。
我有一个非常基本的 Android 项目。此项目包含名为 app 的主应用模块和名为 AndroidSupport 的 Android 支持库的库模块。
我希望仅在 AndroidSupport 上运行 Proguard(即不在整个应用程序上),因为当应用程序是 Proguard 时,我无法在应用程序上运行仪器测试。
我希望我可以自己缩小AndroidSupport,这样我就不需要Proguard 我的应用程序代码(从而避免测试不运行的问题)。
这是我的app build.gradle。请注意,Proguard 已禁用:
apply plugin: 'com.android.application'
android {
compileSdkVersion 22
buildToolsVersion "22.0.1"
defaultConfig {
applicationId "com.example.androidsupportlibproject"
minSdkVersion 9
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
buildTypes {
debug {
minifyEnabled false //Proguard DISABLED
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile project(':AndroidSupport')
}
我的AndroidSupport 模块已启用 Proguard:
apply plugin: 'com.android.library'
android {
compileSdkVersion 22
buildToolsVersion "22.0.1"
defaultConfig {
minSdkVersion 9
targetSdkVersion 22
}
buildTypes {
release {
minifyEnabled true //Proguard ENABLED
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:support-v4:22.2.0'
compile 'com.android.support:appcompat-v7:22.2.0'
compile 'com.android.support:recyclerview-v7:22.2.0'
compile 'com.android.support:support-annotations:22.2.0'
}
我的AndroidSupport 模块proguard-rules.pro 看起来像:
-dontobfuscate
-keep class android.support.v4.** { *; }
-keep interface android.support.v4.app.** { *; }
当app 应用程序启用了Proguard 并且AndroidSupport 禁用了Proguard 时,我可以使用consumerProguardFiles proguard-rules.pro 来缩小AndroidSupport。
但是当我使用上面粘贴的配置时,我得到以下错误:
Error:Execution failed for task ':AndroidSupport:proguardRelease'.
java.io.IOException: The output jar is empty. Did you specify the proper '-keep' options?`
有谁知道这种设置是否可行?仅在依赖库模块上启用 Proguard,而不在应用程序本身上启用?
提前致谢!
【问题讨论】:
标签: android debugging gradle proguard android-support-library