Idea插件开发中使用ProGuard混淆代码
2020-02-01 本文已影响0人
不废的废柴
配置gradle插件
gradle配置ProGuard插件
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'net.sf.proguard:proguard-gradle:6.2.2'
}
}
添加混淆task
// idea 依赖所在目录
def ideaPath = "xxx"
task proguard(type: proguard.gradle.ProGuardTask, dependsOn: jar) {
// 输出混淆前->混淆后的映射
printmapping "$buildDir/mapping.txt"
// 混淆规则文件
configuration 'proguard-rules.pro'
// 项目依赖jar
libraryjars configurations.runtimeClasspath.collect()
// jdk 依赖,区分jdk8 前后版本
if (System.getProperty('java.version').startsWith('1.')) {
libraryjars "${System.getProperty('java.home')}/lib/rt.jar"
} else {
libraryjars "${System.getProperty('java.home')}/jmods/java.base.jmod", jarfilter: '!**.jar', filter: '!module-info.class'
libraryjars "${System.getProperty('java.home')}/jmods/java.desktop.jmod", jarfilter: '!**.jar', filter: '!module-info.class'
}
// 如果使用了插件,附加插件jar
libraryjars fileTree("$ideaPath/plugins/java/lib").filter { !it.name.startsWith("debugger") }.collect()
// idea 依赖的jar
libraryjars files("$ideaPath/lib")
def f = jar.archiveFile.get().asFile
def p = new File(f.parent, "tmp.jar")
def outPath = f.absolutePath
if (p.exists()) {
p.delete()
}
if (f.exists()) {
f.renameTo(p)
}
// 混淆输入
injars p
// 混淆输出
outjars file(outPath)
}
配置task依赖关系
prepareSandbox.dependsOn("proguard")
配置混淆文件
保证plugin.xml中使用到的class不会被混淆就可以了
如果有design文件,保证使用class的不被混淆
一般的ui只需要添加下面这个keep就可以了
-keep class * extends javax.swing.JComponent
最后运行 runIde 就可以看到混淆后的执行效果了