Нет, вы не можете скомпилировать что-нибудь без возможности декомпиляции *1003*. Тем не менее, вы можете сделать некоторые вещи, чтобы сделать процесс более дорогостоящим.
Настоящая хитрость заключается в том, чтобы снизить расходы для вас и дороже для других. Короче говоря, ожидайте, что вы заплатите больше времени / денег / неудобств и поймете, что вы только что усложнили задачу одним способом (это может легко обойтись). Но, с другой стороны, вся индустрия программного обеспечения прекрасно обходилась без абсолютной защиты от декомпиляции.
Подпишите и опечатайте ваши JAR-файлы. Это не позволяет людям добавлять какие-либо элементы в ваши JAR-файлы и не позволяет людям заменять части вашего кода (чтобы лучше понять операционную программу).
Рассмотрим обфускатор имени класса / метода. Это переименует ваши классы и имена методов в эквивалентную структуру, которая содержит маленькие имена, такие как «a.a (..)» вместо «Client.connect (...)». Это усложняет чтение кода другими людьми (в этом случае другие включают вас самих, поэтому, если вы собираетесь отлаживать, это увеличивает ваши затраты на поддержку кода). О, и это нарушает любое отражение, поэтому вы должны предусмотреть обходные пути и исправления для отражения.
Если вы предоставляете какой-либо достойный способ ведения журнала, вам также необходимо запутать ведение журнала, в противном случае нужно только прочитать сообщения журнала, отправленные классом, чтобы выяснить, что класс "h" - это DatabaseConnection, класс "k" - «Пользовательский» объект данных и т. Д.
Встроенные строки в ваших классах всегда можно извлечь. Поэтому, если вы хотите защитить их, вы должны встроить «зашифрованные» строки и «расшифровать» их перед использованием. Это приводит к перегрузке ЦП, и как только известна «дескремблирующая» маршрутизация, можно обойти весь процесс.
Существуют экзотические решения, такие как переписывание вашего кода в эквивалентный код, который выполняет аналогичные операции. Проблема в том, что для того, чтобы конечный результат был полезным, он все равно должен работать идентично оригиналу, но теперь для отладки вывода даже не следует исходному коду.
Часто хочется защитить возможность решения проблемы, а не исходный код. Помните об этом, предоставляя что-то, что работает, часто копирование уже скомпилированных элементов достаточно, чтобы нарушить мышление «этот код - мой». Если вы действительно хотите контролировать свой код, не выпускайте его, настройте сервер и предложите программное решение «в качестве услуги» на своем собственном оборудовании.