Я пишу пользовательский плагин Gradle. У меня есть основной класс, который extends org.gradle.api.Plugin<org.gradle.api.Project>
и 4 других служебных класса. Плагин работает как положено. Теперь я хочу запутать код, прежде чем загружать его в jcenter
. Я попробовал следующий подход.
build.gradle
import proguard.gradle.ProGuardTask
apply plugin: 'groovy'
....
task proguard(type: ProGuardTask, dependsOn: 'jar') {
injars "$buildDir/libs/plugin-1.0-SNAPSHOT.jar"
outjars "$buildDir/libs/plugin-1.0-obfuscated.jar"
configuration 'proguard-rules.pro'
}
....
proguard-rules.pro
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-verbose
-printmapping out.map
-renamesourcefileattribute SourceFile
-keepattributes Exceptions, InnerClasses, Signature, Deprecated, SourceFile, LineNumberTable, EnclosingMethod
-ignorewarnings
-keep class com.myplugin.MyCustomPlugin {
public *;
}
Если я использую указанную выше конфигурацию, банка obfuscated
содержит только класс MyCustomPlugin
. Мои другие служебные классы не были включены в obfuscated
jar.
Если я использую
-keep class com.myplugin.** {
public *;
}
Все классы включены в obfuscated
банку. Но запутывание не произошло для служебных классов.
AFAIK, Классы с атрибутом -keep class
не будут запутаны, а все остальные классы должны быть запутаны. ИДК, почему не работает.
Я пропустил какие-либо параметры в proguard
задании Gradle или proguard-rules.pro
?