Я пробовал использовать вещи на Janino на Android и пришел к выводу, что они просто не работают в VM Dalvik.Компиляция строки как кода во время выполнения на Android
Итак, я просто задаю простой вопрос: Android. Можно ли скомпилировать строку, содержащую код во время выполнения, для использования в приложении. Если да, есть ли библиотеки, которые позволяют мне это делать и/или вы можете поделиться примером кода, как это сделать?
Для (очень простой) Например, если у меня был объект строки, содержащее следующее:
public class Adder{
int x;
int y;
public Adder(int x,int y) {
this.x = x;
this.y = y;
}
public int add() { return x+y;}
}
как один гигантская линия строки. Есть ли способ обработать его, чтобы создать экземпляр объекта Adder, чтобы я мог вызвать метод add()
, скажем, через Reflection API?
Редактировать Я пробовал интерпретацию beanshell, но это оказалось слишком медленным. Im ищет что-то немного быстрее, так же, как Janino
Ive просмотрел свою документацию, но понятия не имеет, как я смогу использовать его для компиляции строки кода в качестве кода. Из того, что кажется (по крайней мере, на примере приветствия), я не смогу использовать его для компиляции строк. Я подчеркиваю часть строки, потому что пользователю нужно создать математическое выражение, которое необходимо скомпилировать и оценить до двойника. – sourdesi
Yikes, динамически компилируя введенные пользователем данные, звучит как жесткая гайка для взлома. Вам нужно будет разобрать эту строку для кусков, чтобы построить и использовать метод «уравнения», используя dexmaker. т.е. «2 * 4/6». Вы могли бы определенно использовать dexmaker для динамического построения метода, а затем запустить его, но было бы неплохо попытаться проанализировать «на лету». Если бы у вас был доступ к мосту Java-> JS, вы могли бы использовать что-то вроде mathjs (http://mathjs.org/), но даже это только оценило бы то, что было подано в него, а не проанализировало его. – Durandal
Да, его прослушивали меня уже неделю. Я прошел через все от компиляторов до экспертов по оценке выражений на языках сценариев, и все было слишком медленным или не работало. Я еще не потерял надежду, хотя я нашел способ – sourdesi