Я фактически только что выпустил что-то несколько дней назад, что делает именно это (для скомпилированного java. На исходном уровне все, что вы действительно можете сделать, это форматирование трюков). It's part of a multi-project repository I'm working on. Скриншот:
Как это работает: Использование ASM (Bytecode библиотека модификации) классы для чтения и раздели их отладочной информации. Затем вызывается основной класс, указанный в MANIFEST. Каждый тип, который упоминается в классе, добавляется в список и также посещается. Процесс происходит рекурсивно, пока в списке не будет указано все, на что ссылается. Большую часть времени, если вы используете библиотеки, будут классы, на которые никогда не ссылаются. Это не входит в список, и когда ASM перекомпилирует классы, они не включены.
При работе на нем он упал примерно с 700 кб до примерно 150 кб. Большая часть того, что было сброшено, было apache commons и некоторыми моими собственными файлами, которые не использовались сжимателем.
Обфускаторы не предназначены для оптимизации кода. Существуют декомпиляторы, которые создают исходный код из файлов классов. Если у кого-то есть .class-файл, декомпилятор может использоваться для создания исходного кода. Обфускаторы заменяют имена классов/переменных/методов именами без каких-либо чувств, например 'class A' или' public int b() '. Поэтому после декомпиляции вместо плохих имен используются «плохие» имена. Единственная причина этого: путать людей так, что работать с кодом очень сложно, если не невозможно. Но это не имеет никакого отношения к оптимизации. –