Внедрение замены горячего кода для Dalvik

Моя компания много занимается разработкой для Android, и нам мешают длинные циклы компиляции, dex, упаковки и развертывания. Учитывая текущее состояние виртуальной машины Dalvik и инструментов, возможно ли создать что-то вроде JRebel для Android?


person Ahmed Fathalla    schedule 12.05.2013    source источник
comment
1) Определить долго. 2) Что ты сейчас делаешь? (т.е. eclipse/maven/gradle что?)   -  person Morrison Chang    schedule 12.05.2013
comment
Я использую Eclipse, но каждый раз, когда вы создаете проект, возникает задержка в 15-30 секунд, чтобы увидеть изменения, которые могут быть тривиальными (изменения макета). Можно ли использовать динамическую загрузку классов, как в JRebel или Play!, чтобы сделать изменения видимыми немедленно?   -  person Ahmed Fathalla    schedule 12.05.2013
comment
Я склоняюсь к нет, но возможно кто-то меня поправит. Если вы выполняете развертывание на эмуляторе/устройстве, то да, у вас будет некоторое отставание, поскольку оно проходит через adb. У вашего ПК нет прямого доступа к виртуальной машине Dalvik. Помните, что вы выполняете кросс-компиляцию и упаковку, а не развертываете файлы классов на локальном веб-сервере. Если вы редактируете только макет xml, вы можете попробовать использовать инструменты предварительного просмотра макета, чтобы увидеть, как он будет выглядеть. Если я вношу изменения в код, я ожидаю упомянутой задержки.   -  person Morrison Chang    schedule 13.05.2013
comment
На какое аппаратное устройство вы выполняете развертывание? Насколько велик ваш apk? Я предполагаю, что вы используете обычную Android Java и xml. Я не могу ответить на ваш вопрос о горячей замене кода, я не знаю ответа на этот вопрос, но, возможно, есть некоторые другие вещи, которые вы могли бы сделать, чтобы минимизировать цикл сборки и развертывания.   -  person Stephan Branczyk    schedule 13.05.2013
comment
Я думаю, что ответ да, но очень сложно. Например, Google App Inventor удалось реализовать потрясающую функциональность горячей замены кода в реальном времени, но я считаю, что их нижний уровень написан на Scheme/LISP/C, и они написали свою собственную виртуальную машину. Кстати, если ваш apk слишком большой, возможно, вы могли бы просто перестроить части кода, которые были изменены на самом устройстве, без повторной передачи всего apk. code.google.com/p/terminal-ide Это просто идея, Я не проверял эту идею на себе.   -  person Stephan Branczyk    schedule 13.05.2013
comment
Я просмотрел документацию AppInventor и не нашел ничего, связанного с HotSwap appinventor.mit.edu/explore/ content/hellopurr.html, он просто упаковывает код в виде APK.   -  person Ahmed Fathalla    schedule 13.05.2013
comment
@MorrisonChang Но не можем ли мы использовать некоторые методы динамической загрузки классов, чтобы изменить поведение приложения во время его работы и избежать создания нового APK, проверьте это и [это][2]. [1]: android-developers.blogspot. com/2011/07/ [2]: code.google.com/p/dexmaker   -  person Ahmed Fathalla    schedule 13.05.2013
comment
@Ahmed Хотя вы можете динамически загружать классы, stackoverflow.com/questions/3022454/, у меня сложилось впечатление, что он предназначен для загрузки пользовательских компонентов в приложение. но не обязательно перезаписывать существующие компоненты, чтобы сократить время установки, что, я думаю, вы ищете.   -  person Morrison Chang    schedule 13.05.2013
comment
Это не мешает кому-то создавать фреймворк поверх динамической загрузки классов, используя для этого какое-то изменение имен, я просто не уверен, насколько это будет легко/эффективно вместе с такими функциями, как отладка.   -  person Morrison Chang    schedule 13.05.2013


Ответы (2)


JRebel для Android сейчас находится в стадии бета-тестирования, и вы можете подписаться на приглашение. Надеюсь, это будет то, чего мы оба хотим.

person Matt Carron    schedule 14.05.2015

Недавно я получил доступ к бета-версии JRebel для Android. И работает он уже довольно быстро: ~20сек ушло на внесение-перезагрузку проекта после изменений. 20 секунд намного быстрее, чем 2 минуты с Gradle.

Это все еще не живое кодирование для Android, но команда JRebel усердно работает над оптимизацией. Бьюсь об заклад, что стабильная версия JRebel for Android будет близка к живому кодированию.

Кстати, есть альтернативы для JRebel for Android:

  1. Приведение макета — в настоящее время довольно нестабильно и требует Android 5+
  2. Скачать из Facebook. Сам не пробовал, но бенчмарки говорят, что работает быстрее, чем Gradle сборки. Стоит попробовать.
person Veaceslav Gaidarji    schedule 14.08.2015