Обфускация в Java 9+

Для правильной обфускации Proguard должен знать о всех классах в Java. До Java 9 можно было добавить rt.jar в libraryjars, но теперь единого файла со всеми классами нет, они хранятся в jmod-файлах.
Данный Gradle-таск решает эту проблему.
  1. task proguard(dependsOn: jar, type: proguard.gradle.ProGuardTask) {
  2.     configuration "proguard-rules.pro"
  3.     injars "dist/app.jar"
  4.     outjars "dist/app-obf.jar"
  5.  
  6.     if (System.getProperty('java.version').startsWith('1.')) {
  7.         libraryjars "${System.getProperty('java.home')}/lib/rt.jar"
  8.     } else {
  9.         def jmods = files { file("${System.getProperty('java.home')}/jmods").listFiles() }
  10.         jmods.each {
  11.             libraryjars it, jarfilter: '!**.jar', filter: '!module-info.class'
  12.         }
  13.     }
  14. }

Реклама

Мы в соцсетях

tw tg yt gt