Каким образом можно скомпилировать Java-код в Android приложении?

Я разрабатываю IDE для Android, предназначенную для Processing, и сейчас мне нужно создать компилятор для скетчей. Однако столкнулся с проблемой: на Android нет javax.tools.JavaCompiler и аналогичных инструментов, и я не знаю, как точно компилировать код во время выполнения. Класс, который я планирую компилировать, должен наследовать PApplet. Я уже разобрался с дексингом и Dalvik. 

Могу ли я каким-то образом включить javax.tools в папку libs? Мне необходимо получить именно байт-код. 

Если вам нужно больше информации, вот ссылка на мой репозиторий: <a href="https://github.com/XedoxDev/PAIDE.git" rel="nofollow">https://github.com/XedoxDev/PAIDE.git</a>
  • 4 декабря 2024 г. 10:53
Ответы на вопрос 1
Компиляция Java-кода на Android имеет свои особенности и ограничения, особенно если вы хотите сделать это во время выполнения. К сожалению, встроенной поддержки для компиляции Java-кода (таких как `javax.tools.JavaCompiler`) на Android нет, так как Android не поддерживает стандартную JVM и некоторые из её библиотек.

Вот несколько подходов, которые вы можете рассмотреть:

### 1. Использование сторонних библиотек

Существует несколько сторонних библиотек, которые обеспечивают возможность компиляции Java-кода на Android:

- **Javac**: Хотя он и не предназначен для работы на Android, вы можете использовать его для компиляции вашего кода на компьютере (или сервере) и затем загружать скомпилированные классы в ваше Android-приложение.
- **Classpath**: Вы можете использовать библиотеки, такие как [javassist](https://www.javassist.org/) или [Cglib](https://github.com/cglib/cglib), которые позволяют создавать и модифицировать классы во время выполнения, но это не совсем то же самое, что и компиляция Java-кода.

### 2. Использование Android NDK

Если вам нужна производительность и вам подходит работа с C/C++, вы можете использовать Android NDK для создания библиотеки, которая будет вызывать функции вашегоJava-кода. Однако это требует значительных усилий и может усложнить проект.

### 3. Сетевое API

Возможно, вам стоит рассмотреть возможность отправки Java-кода на сервер для компиляции и возврата скомпилированного байт-кода в ваше приложение. Это позволит избежать многих ограничений, связанных с компиляцией на Android.

### 4. Использование Android Runtime (ART)

Если вам нужно просто повысить производительность в процессе выполнения, вы можете использовать механизм, который преобразовывает ваш Java-код в байт-код во время выполнения с использованием Android Runtime.

### 5. Модификация исходного кода

Если вашей конечной целью является создание приложений на основе PApplet, вы можете изучить код PApplet и использовать его непосредственно с библиотеками, которые поддерживают кросс-платформенную разработку.

### Ресурсы и ссылки

Если вам нужны примеры или библиотеки, которые могут помочь в этом процессе, вы можете рассмотреть:

- [GraalVM](https://www.graalvm.org/): это многофункциональная виртуальная машина, которая может компилировать Java-код.
- Рассмотрите использование платформы, например, [Processing для Android](https://android.processing.org/), которая может помочь вам в интеграции Processing с Android.

### Заключение

Ваша задача достаточно сложная, и вам, вероятно, придется использовать комбинацию подходов, чтобы достичь желаемого результата. Работа с Java-кодом на Android имеет ограничения, поэтому оцените, какой из методов наиболее подходит для вашей ситуации.
Похожие вопросы