Моя компания много занимается разработкой для Android, и нам мешают длинные циклы компиляции, dex, упаковки и развертывания. Учитывая текущее состояние виртуальной машины Dalvik и инструментов, возможно ли создать что-то вроде JRebel для Android?
Внедрение замены горячего кода для Dalvik
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
:
- Приведение макета — в настоящее время довольно нестабильно и требует
Android 5+
- Скачать из Facebook. Сам не пробовал, но бенчмарки говорят, что работает быстрее, чем
Gradle
сборки. Стоит попробовать.
person
Veaceslav Gaidarji
schedule
14.08.2015
protify стабилен и чрезвычайно быстр, но для его запуска требуется немного смекалки (github.com/pfn/protify< /а>).
- person pfn; 01.10.2015
Не могли бы вы определить в секундах очень быстро? Меня интересует время перезарядки.
- person Veaceslav Gaidarji; 01.10.2015
Менее 1 секунды для тривиального приветствия, мир. 10-20 секунд для большого приложения с 20 мегабайтами ресурсов, 100kloc и 60 библиотеками
- person pfn; 01.10.2015