Я пытаюсь создать исполняемый файл под платформой Windows для Java-программы, используя JNI, C/C++ и API-интерфейс, я уже создал файл jar для моей программы, который включает все зависимости. Я хочу встроить его в exe-файл, мне удалось запустить простой основной класс (присутствующий в файловой системе) с использованием API-интерфейса JNI, я планирую добавить файл jar в качестве ресурса в программу C/C++. Но я не знаю, как запустить этот файл jar. Один вариант - создать временный файл jar в файловой системе и запустить его с помощью java. Но я не хочу раскрывать свой файл jar всем по соображениям безопасности. Как я могу запустить jar файл на лету, используя JNI?Создание java-исполняемого файла с использованием JNI?
ответ
Компиляция Java с исполняемым файлом с GCJ не работает все время, существуют ограничения в отношении использования отражения и других элементов, таких как классы пользовательского интерфейса, Look at this page.
Если вы конвертируете Java-код в библиотеку или просто другой модуль, вы можете ссылаться на него и просто запускать его без использования JVM.
Отражение должно отлично работать со стратегией, которую проводит ОП. –
@ Kevin Day - Думаю, ты поманил меня за то, что положил туда отражение. Вы не следовали моей ссылке, чтобы указать на GCJ. Я отредактировал мой пост, чтобы сделать его более явным :( –
Ярмарка «Ну, подумайте, что динг отменил ;-) –
Моя первоначальная реакция заключалась в том, что я был бы шокирован, если бы вы могли заставить это работать, и чтобы оно было исполнено. Но потом я начал об этом думать, и, возможно, вы могли бы это сделать, используя специальный загрузчик классов. Если вы вставляете jar в exe в качестве ресурса, это будет точно так же, как наличие байтов jar в определенном смещении в любом файле (независимо от exe или нет).
Итак, вот потенциальная стратегия: реализовать пользовательский загрузчик классов, который принимает путь exe и смещение ресурса jar в этом файле. Это будет использовать пользовательскую версию ZipFile, которая использует фиксированное смещение индекса для своих чтений (к сожалению, не будет возможности использовать сам ZipFile, но если вы захватите источник ZipFile, это будет довольно очевидно, где вы будете необходимо добавить смещение).
Проблема с загрузкой здесь (как загрузить пользовательский загрузчик классов?) - но я думаю, что это возможно сделать со стороны JNI. В основном вы должны хранить файл .class для загрузчика в качестве отдельного ресурса в exe, полностью загружать его в память, а затем конструировать с помощью вызовов JNI. Это будет хлопот, но это просто для одного класса, а затем вы можете позволить Java runtime взять на себя все остальное.
Звучит как интересный проект (хотя, как указывают другие, в том, что вы делаете, не так много безопасности ... Я полагаю, что вы можете зашифровать встроенную банку и добавить код расшифровки в загрузчик классов, но вы должны решить, как далеко вы хотите это сделать).
- 1. Создание файла заголовка с помощью JNI с использованием «javah»
- 2. Создание QMainWindow из Java с использованием JNI
- 3. java.lang.UnsatisfiedLinkError с использованием JNI
- 4. Создание файла с использованием fopen()
- 5. Создание файла XML с использованием файла XSD
- 6. JNI Создание потоков
- 7. создание JVM из метода JNI
- 8. Создание Android Studio JNI static lib для чтения JNI
- 9. Swing прозрачность с использованием JNI
- 10. Android Spotify: Создание .so файла spotifywrapper с использованием JNI в Android дает неопределенной ссылку ошибке
- 11. DLL с использованием классов Java JNI
- 12. Создание проекта maven с внешними библиотеками JNI
- 13. Создание нескольких копий библиотеки JNI с Java
- 14. Динамическое создание WebView с C++ через JNI
- 15. Создание целочисленного объекта в JNI
- 16. Создание Java-класса из JNI
- 17. Создание файла excel с использованием Titanium
- 18. Создание excutable jar файла с использованием eclipse
- 19. Создание массивов структур с использованием текстового файла
- 20. Создание файла нижнего колонтитула с использованием php
- 21. Создание файла с использованием оператора if
- 22. Создание нового файла с использованием JTextField
- 23. Создание 2D-массива с использованием указателя файла
- 24. Создание файла EDI с использованием SMOOKS
- 25. Создание .so файла с использованием кода :: blocks
- 26. Создание файла EAR с использованием Maven
- 27. копирование и создание файла с использованием C#
- 28. Создание пользовательского выходного файла с использованием cin
- 29. Создание саморасширяющегося исполняемого файла с использованием PHP
- 30. Создание файла MHT с использованием Redemption
«Я не хочу раскрывать свой файл jar для всех по соображениям безопасности». Поместив его в exe и отправив exe кому-то, вы разоблачаете его. –
Да, но exe не может быть декомпилирован так легко, как bytecode – Xinus
Но если вы просто упаковываете JAR-файл внутри .exe, для его устранения не требуется «декомпиляция». – Nate