我正在编写一个自定义的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
jar仅包含MyCustomPlugin
类。我的其他实用程序类未包含在obfuscated
jar中。
如果我使用
-keep class com.myplugin.** {
public *;
}
所有类都包含在obfuscated
jar中。但是,实用程序类没有发生混淆。
AFAIK,不会混淆具有-keep class
属性的类,而必须对所有其他类进行混淆。 IDK,为什么它不起作用。
我是否错过了proguard
gradle任务或proguard-rules.pro
中的任何参数?