Я надеюсь, что кто-то может ответить на то, что я считаю основным вопросом Gradle/Proguard.Возможно ли Proguard использовать библиотечный модуль Android, но не модуль приложения?
У меня очень простой Android-проект. Этот проект содержит основной модуль приложения с именем app
и библиотечный модуль для библиотек поддержки Android под названием AndroidSupport
.
Я хочу запустить Proguard исключительно на AndroidSupport
(т. Е. НЕ на общем приложении), потому что у меня возникли проблемы с тестированием аппаратуры в приложении, когда это Proguard-ed. Моя надежда состоит в том, что я могу самостоятельно профинансировать 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 ТОЛЬКО на зависимый библиотечный модуль, но не на самом приложении?
Заранее благодарен!
смотрите здесь http://stackoverflow.com/questions/27277433/why-does-gradle-build-my-module-in-release-mode-when-the-app-is-in-debug –