Можно ли защитить Proguard модуль библиотеки Android, но не модуль приложения?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Можно ли защитить Proguard модуль библиотеки Android, но не модуль приложения?

Сообщение Anonymous »

Я надеюсь, что кто-нибудь сможет ответить на, по моему мнению, основной вопрос о Gradle/Proguard.

У меня есть очень простой проект для Android. Этот проект содержит основной модуль приложения с именем app и библиотечный модуль для библиотек поддержки Android с именем AndroidSupport.

Я хочу запускать Proguard исключительно на AndroidSupport (т. е. НЕ во всем приложении), поскольку у меня возникают проблемы с запуском инструментальных тестов приложения, когда оно поддерживает Proguard.
Я надеюсь, что смогу минимизировать AndroidSupport самостоятельно, чтобы мне не нужно было защищать код моего приложения Proguard (и, таким образом, избежать проблемы невыполнения тестов).

Вот мое приложение 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.** { *; }
Когда в приложении включен 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 ТОЛЬКО на зависимом модуле библиотеки, а не на самом приложении?

Заранее спасибо!

Подробнее здесь: https://stackoverflow.com/questions/320 ... ication-mo
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»