Для этого вы можете использовать Avian JVM.( статья в Википедии ).
Вы можете скомпилировать свое приложение в отдельный исполняемый файл, и оно поддерживает различные библиотеки классов: openjdk, реализацию библиотеки классов Android (даже если вы не используете )на Android) и пользовательской библиотеке классов, которая очень ограничена (в основном они добавляют методы к ней, поскольку авторам нужны API для запуска собственных приложений).
В README в репозитории кода есть описание того, как встроить виртуальную машину и сгенерировать «загрузочную» программу на C ++, которая запустит ваше приложение, и обратитесь к разделу «bootimage», если вы хотите, чтобы AOT скомпилировал все методы и сгенерировал двоичное изображение, исключающеенеобходимость JIT-компиляции во время выполнения.
Без загрузочного образа вы можете отправить файлы jar и исполняемый файл, который их «запустит» (исполняемый файл будет содержать виртуальную машину).При загрузочном образе файлы JAR дополнительно будут предварительно скомпилированы в собственный код.
С другой стороны, если вам просто нужен управляемый язык / платформа, вы также можете использовать .NET / MonoАОТ .См. Инструмент mkbundle, включенный в Mono 2.x.