Как я могу скомпилировать Dalvik для локального запуска Linux?
Каковы минимальные шаги, необходимые (включая получение исходного кода) для компиляции и запуска только виртуальной машины Dalvik в Linux?
Дальвик работает на Android. Насколько нам известно, авторы Dalvik беспокоятся о том, как он работает на Android.
Различные группы указали, что они работают над тем, чтобы получить Dalvik вне Android. Вы, вероятно, лучше всего находите и разговариваете с ними.
Другими словами, нет официальных инструкций того типа, который вы ищете.
Используйте sabayon Linux. Это дистрибутив, который может запускать программы для Android и все версии Linux.
На самом деле, это довольно андроид, работающий на Dalvik, и базовая система уже Linux.
Я предполагаю, что запущенная головоломка Dalvik VM на рабочем столе Linux – это вопрос получения источников и их компиляции.
Материал GUI – это нечто другое.
Фактически, я получил Dalvik, работающий над моей начальной установкой ОС.
Сначала загрузите исходное дерево Android AOSP с помощью https://source.android.com/source/downloading.html . Подождите, пока он будет загружен (2 часа для меня клонирование только текущих коммитов и ветка Marshmallow)
После запуска build/envsetup.sh то время как в исходном дереве запустите lunch full_x86-eng . Затем введите make -jN (замените N числом ядер).
ПОДОЖДИТЕ. Это заняло у меня около часа на ноутбуке AMD-4500M. Более новые компьютерные компьютеры могут быть такими же низко, как половина и час, а более старые могут занимать полдня.
Измените каталог на !!AOSP-PATH!!/out/host/linux-x86/bin/ и запустите export LD_LIBRARY_PATH=$LD_LIBRARY_PATH. AOSP-PATH!!/out/host/linux-x86/obj/lib/ или
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH. AOSP-PATH!!/out/host/linux-x86/lib
Или export LD_LIBRARY_PATH=$LD_LIBRARY_PATH. AOSP-PATH!!/out/host/linux-x86/lib64
ПОПРОБУЙТЕ ВСЕ ЭТИ
А затем ./dalvikvm —32 . Если вы попытаетесь запустить без опции —32 он сработает (не знаю, почему)
Рабочий зефир Дальвик. Чтобы заставить работать графические приложения, вам нужно будет сделать еще несколько портирования и кодирования, что является еще одним проектом, над которым я работаю.
Мне понадобилось полдня, чтобы понять это.
Рекомендации
Вы не единственная с этой идеей, и это здорово в условиях интернет-сообщества.
Вероятно, это то, что вы ищете: http://www.android-x86.org/ . Эти ребята портировали андроид на x86.
Он по-прежнему работает как ОС, поэтому я не уверен, что вы можете запускать Linux и Android (Linux) вместе без использования VirtualBox.
Получение приложений, предназначенных для Android для работы в Linux, будет сложным. Тем не менее, можно запустить VM Dalvik в Linux. Фактически, этот проект GitHub имеет предварительно скомпилированный двоичный файл Dalvik VM для Linux, готовый к использованию! Проверьте связанное сообщение в блоге для получения информации о том, как был скомпилирован двоичный файл и как его использовать.
Научитесь программировать Java \ C \ C ++ и другие фреймворки
Измените исходный код Android (я думаю, app_process или что-то еще), поэтому он показывает окна на рабочем столе Linux (узнайте API X11 / Wayland)
Ниже приведено простое основание для начала
Получение исходного кода для Android-x86
Сначала следуйте этой странице, чтобы настроить среду сборки. затем
Источник
Как я могу скомпилировать Dalvik для локального запуска в Linux?
каковы минимальные шаги, необходимые (включая извлечение исходного кода) для компиляции и запуска только виртуальной машины Dalvik в Linux?
7 ответов
Dalvik работает на Android. Авторы Dalvik беспокоятся только о том, что он работает на Android, насколько нам известно.
различные группы указали, что они работают над получением Dalvik за пределами Android. Вам, вероятно, лучше всего найти и поговорить с ними.
другими словами, нет никаких официальных инструкций того типа, который вы ищете.
использовать сабайон Linux. Это дистрибутив, который может изначально запускать программы Android и все Linux тоже.
на самом деле, это скорее android работает на Dalvik, а базовая система уже linux.
Я думаю, что запуск голой Dalvik VM на рабочем столе linux box-это просто вопрос получения источников и компиляции.
материал GUI-это что-то другое.
на самом деле, я Далвик работает над моей элементарной установкой ОС.
сначала загрузите исходное дерево Android AOSP с помощью https://source.android.com/source/downloading.html. Подождите, пока он загрузится (2 часа для меня клонирование только текущих коммитов и ветки зефира)
после build/envsetup.sh в то время как в исходном дереве run lunch full_x86-eng . Затем введите make -jN (заменить N на количество ядер).
подождать. Это заняло у меня около 1 часа процессор AMD-4500м ноутбук. Новые ccomputers может быть как полчаса, так и старых может занять полдня.
каталог !!AOSP-PATH!!/out/host/linux-x86/bin/ и работать export LD_LIBRARY_PATH=$LD_LIBRARY_PATH. AOSP-PATH!!/out/host/linux-x86/obj/lib/ или
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH. AOSP-PATH!!/out/host/linux-x86/lib
или export LD_LIBRARY_PATH=$LD_LIBRARY_PATH. AOSP-PATH!!/out/host/linux-x86/lib64
ПОПРОБУЙТЕ ВСЕ ЭТО
и затем ./dalvikvm —32 . Если вы попытаетесь запустить без —32 опция он будет сбой (не знаю, почему)
Рабочий Зефир Dalvik. Чтобы заставить приложения GUI работать, вам нужно будет сделать еще несколько переносов и кодирование-это еще один проект, над которым я работаю.
мне потребовалось полдня, чтобы понять это.
Источник
Android изнутри: сравнение Dalvik и ART
Привет, Хабр! Около полугода назад я публиковал подробный «гайд» по JVM. Пост, в целом, зашел, а в комментариях спросили, не планируется ли “чего-то по андроиду”. Наконец, у меня дошли руки.
В этом посте поговорим о среде выполнения в Android. В частности, я постараюсь кратко, но емко изложить, чем отличается ART и Dalvik, и как со временем улучшились средства разработки в Android. Тема явно не новая, но, надеюсь, придется кстати тем, кто только начинает вникать. Кому интересно — добро пожаловать под кат.
Виртуальная машина
Сначала, давайте разберемся чем отличается JVM от DVM.
Java Virtual Machine — виртуальная машина, способная выполнять байт-код Java независимо от базовой платформы. Она опирается на принцип “Write once, run anywhere”. Байт-код Java может быть запущен на любой машине, способной поддерживать JVM.
Компилятор Java преобразует .java файлы в class-файлы (байт-код). Байт-код передается JVM, который компилирует его в машинный код для исполнения непосредственно на CPU.
- Имеет стековую архитектуру: в качестве структуры данных, куда помещаются и хранятся методы, используется стек. Он работает по схеме LIFO или “Last in — First Out” или “Последним вошел, первым вышел”.
- Может запускать только class-файлы.
- Использует JIT-компилятор.
Dalvik Virtual Machine (DVM) — виртуальная Java машина, разработанная и написанная Дэном Борнштейном (англ. Dan Bornstein) и другими, как часть мобильной платформы Android.
Можно сказать, что Dalvik — это среда для выполнения компонентов операционной системы Android и пользовательских приложений. Каждый процесс выполняется в своём, изолированном адресном пространстве. Когда пользователь запускает приложение (либо операционная система запускает один из своих компонентов), ядро виртуальной машины Dalvik (Zygote Dalvik VM) создает отдельный, защищенный процесс в общей памяти, в котором непосредственно разворачивается VM, как среда для запуска приложения. Другими словами, изнутри Android выглядит как набор виртуальных машин Dalvik, в каждой из которых исполняется приложение.
- Использует архитектуру на основе регистров: структура данных, куда помещаются методы, основана на регистрах процессора. За счет отсутствия операций POP и PUSH, команды в регистровой виртуальной машине выполняются быстрее аналогичных команд стековой виртуальной машины.
- Исполняет байт-код собственного формата: Android dexer (о нем поговорим ниже) преобразует class-файлы в формат .dex, оптимизированные для выполнения на Dalvik VM. В отличие от class-файла, dex-файл содержит сразу несколько классов.
Подробно об архитектуре DVM можно почитать тут.
Android Dexer
Разработчики Android знают, что процесс преобразования Java байткода в .dex байткод для Android Runtime является ключевым шагом в создании APK. Компилятор dex в основном работает “под капотом” в повседневной разработке приложений, но он напрямую влияет на время сборки приложения, на размер файла .dex и производительность во время выполнения.
Как уже упоминалось, сам dex-файл содержит сразу несколько классов. Повторяющиеся строки и другие константы, используемые в нескольких файлах классов, включаются только для экономии места. Байт-код Java также преобразуется в альтернативный набор команд, используемый DVM. Несжатый dex-файл обычно на несколько процентов меньше по размеру, чем сжатый архив Java (JAR), полученный из тех же файлов .class.
Изначально, class-файлы преобразовывались в dex-файлы с помощью встроенного DX-компилятора. Но начиная с Android Studio 3.1 и далее, компилятором по умолчанию стал D8. По сравнению с DX-компилятором, D8 компилирует быстрее и выводит dex-файлы меньшие по размеру, при этом обеспечивая более высокую производительность приложения во время исполнения. Полученный таким образом байт-код dex подвергается минификации с помощью open-source утилиты ProGuard. В итоге, мы получаем тот же dex-файл, но только меньше. Далее этот dex-файл используется для сборки apk и, наконец, для развертывания на устройстве Android.
Но следом за D8 в 2018 году пришел R8, который, по сути, является тем же D8, только с дополнениями.
При работе с Android Studio 3.4 и Android Gradle 3.4.0 plugin или выше, Proguard больше не используется для оптимизации кода во время компиляции. Вместо этого плагин работает по умолчанию с R8, который сам выполняет Code shrinking, Optimisation и Obfuscation. Хотя R8 предлагает только подмножество функций, предоставляемых Proguard, он позволяет совершить процесс преобразования Java байт-кода в dex-байт-код единоразово, что еще больше сокращает время сборки.
R8 и сокращение кода
Как правило, приложения используют сторонние библиотеки, такие как Jetpack, Gson, Google Play Services. Когда мы используем одну из этих библиотек, часто в приложении используется только малая часть каждой отдельной библиотеки. Без Code shrinking, весь код библиотеки сохраняется в вашем приложении.
Бывает так, что для улучшения читаемости и удобства поддержки приложения разработчики используют подробный код. Например, могут быть использованы значимые имена переменных и шаблон проектирования для того, чтобы другим было удобнее разобраться в коде. Но шаблоны, как правило, приводят к бОльшему объему кода, чем это необходимо.
В этом случае R8 приходит на помощь. Он позволяет существенно уменьшить размер приложения, оптимизируя размер даже того кода, который действительно используется приложением.
В качестве примера, ниже преведены цифры из доклада Shrinking Your App with R8, который был представлен на Android Dev Summit ’19:
А вот так выглядело сравнение эффективности R8 на этапе выпуска бета-версии (взято из источника Android Developers Blog):
Детальнее можно ознакомиться в оф документации и докладе.
ART vs DVM в Android
DVM была спроектирована именно для мобильных устройств и использовалась как виртуальная
машина для запуска андроид приложений вплоть до Android 4.4 Kitkat.
Начиная с этой версии, ART был представлен как среда выполнения, а в Android 5.0 (Lollipop) ART полностью заменил Dalvik.
Основное явное отличие ART от DVM состоит в том, что ART использует AOT компиляцию, а DVM — JIT компиляцию. Не так давно ART начал использовать гибрид AOT и JIT. Далее разберем это чуть подробнее.
- Использует JIT компиляцию: всякий раз при запуске приложения,
- компилируется та часть кода, которая необходима для выполнения приложения. Остальная часть кода компилируется динамически. Это замедляет запуск и работу приложений, но уменьшает время установки.
- Ускоряет загрузку устройства, поскольку кеш приложения создается во время выполнения.
- Приложения, работающие на DVM, требуют меньше памяти, чем те, которые работают на ART.
- Уменьшает резерв батареи, увеличивая нагрузку на CPU.
- Dalvik является “устаревшим” и не используется на андроид версиях выше 4.4.
- Использует AOT компиляцию, то есть компилирует весь код во время установки приложения. Это ускоряет запуск и работу приложений, но требует большего времени установки.
- Замедляет загрузку устройства, так как кеш создается во время первой загрузки.
- Ввиду использования подхода AOT компиляции, требует больше памяти в сравнении с приложениями на DVM.
- Увеличивает резерв батареи, сокращая работу процессора из-за отсутствия компиляции при выполнении приложений.
- Улучшенная Garbage Collection или сборка мусора. Во времена использования Dalvik, сборщики мусора должны были осуществить 2 прохода по куче (heap), что и приводило к плохому UX. В случае с ART, такой ситуации нет: он чистит кучу один раз для консолидации памяти.
И небольшая схема Dalvik vs ART:
JIT + AOT в ART
Среда выполнения Android (ART), начиная с Android 7, включает компилятор JIT с профилированием кода. JIT-компилятор дополняет AOT компилятор и повышает производительность во время выполнения, экономит место на диске и ускоряет обновления приложений и системы.
Происходит это по следующей схеме:
Вместо того, чтобы запускать AOT-компиляцию каждого приложения на этапе установки, он запускает приложение под управлением виртуальной машины, используя JIT-компилятор (почти так же, как в Android
Источник