Попытайтесь видеть, работает ли это:
Вы можете зашифровать / запутать свой байт-код с помощью yGuard или других обфускаторов java-байт-кода .
Распространение, независимое от операционной системы, может быть затруднено. ИМХО лучшее решение - это обычный архив, содержащий несколько скриптов (.bat / .cmd для windows, .sh для linux / OSX) для запуска программы под поддерживаемыми программой Операционными системами.
Запуск java-программы как службы может быть еще сложнее: в Linux это просто, где вам просто нужно написать правильный сценарий запуска, чтобы запустить его в фоновом режиме. Я знаю, что FireDaemon имеет проблемы с запуском java-программ в качестве службы, поэтому запускать ее в качестве службы в Windows может быть сложно (или невозможно). Извините, но я понятия не имею о MacOS X. Может быть так же просто, как Linux, может быть так же невозможно, как Windows.
Как уже говорили другие, вы можете запутать свой код. Это сделает обратное проектирование нетривиальным. Вы также можете скомпилировать свою Java в собственный код, используя (например) GCJ. Это усложнит обратный инжиниринг, но также будет означать, что вам придется создавать разные комплекты дистрибутива для каждой поддерживаемой платформы оборудования / ОС.
Я понимаю, что распространение файла .jar крайне небезопасно.
Вы должны понимать что если вы распространяете программное обеспечение в любой форме для работы на платформе, которую вы не полностью контролируете, то вы не можете сделать ничего технического, чтобы предотвратить обратное проектирование. Ничего.
В конечном счете, вы должны найти компромисс между преимуществами распространения вашего программного обеспечения и рисками, что кто-то перепроектирует его. Один из подходов, который используют люди, - это выяснить, перевешивают ли выгоды риски * затраты, и использовать правовые гарантии (например, соответствующие лицензии на программное обеспечение) для предотвращения обратного проектирования. Другой подход - сказать «удачи вам» потенциальным реверс-инженерам и заработать деньги, предлагая услуги, а не лицензии на программное обеспечение.
Запуск вашего приложения через обфускатор делает реверс-инжиниринг более сложным и дорогостоящим.
Взгляните на Java Service Wrapper , чтобы найти относительно простой способ установки и запуска ваше приложение Java как услуга на нескольких платформах.
Рассматривали ли вы использование компилятора машинного кода, такого как GCJ ? Он не зависит от платформы (вам придется скомпилировать один для каждой целевой платформы), но я не понимаю, как можно распространять независимый от платформы байт-код и при этом скрывать этот байт-код от конечных пользователей.
вы можете запутать его. Это затруднит обратное проектирование вашей программы. Кроме того, я думаю, что вы также можете сделать свои файлы классов исполняемыми (например, .exe для Windows).
РЕДАКТИРОВАТЬ: честно говоря, если безопасность для вашего приложения так важна, лучше вообще избегать java. Например, вы можете использовать компилятор gcc для C ++ (который более или менее независим от платформы, если вы не выполняете системные вызовы). Вам просто нужно скомпилировать его на разных хост-машинах (это то, что ваш исходный вопрос указывает как вашу потребность, но на java).
Существует также qt, но я сам не пробовал.
Вы можете зашифровать jar-файл, но тогда вам нужно будет написать собственный загрузчик классов для загрузки содержимого jar-файла. Это все еще не на 100% защищено от дурака - простой факт в том, что ничто из того, что вы можете сделать, не сделает ваш код на 100% безопасным, если он будет нацелен. См. Это обсуждение здесь.
или вы можете сделать то, что сделал я. Интерфейс java с определенными функциями внутреннего интерфейса, написанными на C ++, скомпилирован в dll, вызываемую через JNI. Интерфейсный интерфейс полностью переносим, с внутренним ворчанием, сделанным родным.