Dex android что это

Home Office на мобильном устройстве: используем Samsung DeX

Многие компании в настоящее время уже перевели своих сотрудников на удаленную работу. Другие же планируют это сделать в ближайшее время. А можно ли работать из дома, имея в наличии только Android-смартфон или планшет? Конечно, возможно, особенно если это устройство с поддержкой Samsung DeX. Ниже вы найдете краткий обзор платформы и ее пока недолгой истории, а также описание реального кейса использования – тонкий клиент с подключением к удалённому рабочему столу по RDP.

Что такое Samsung DeX

DeX (Desktop Experience) – это Android Desktop, режим запуска Android на внешнем дисплее (или на дисплее самого планшета) в формате десктопной ОС. При подключении DeX запускает графическую оболочку, похожую на привычный рабочий стол десктопа, с возможностью открытия нескольких окон, drag and drop, горячими клавишами клавиатуры и т.д.

DeX доступен для всех смартфонов Galaxy серии S начиная с S8/S8+ и Note, начиная с Note 8, а также планшетов Tab S4 и старше.


Ещё в 2017 для использования режима DeX была необходима объёмная док-станция. Про нее шутили, намекая на сходство с тарелкой для еды. В 2020 необходимое оборудование редуцировалось до небольшого переходника – DeX стал удобнее и доступнее.

Какой выбрать адаптер для DeX

Для работы с DeX понадобится адаптер, подключающий телефон к HDMI-разъёму монитора. На рынке существует несколько вариантов HDMI адаптеров Samsung: от обычного кабеля до полноценной док-станции с возможностью одновременной зарядки, подключения USB периферии и LAN кабеля.

HDMI адаптеры сторонних производителей также могут поддерживать режим DeX, но их использование не гарантирует оптимальное качество изображения и производительность.

Как подключить рабочую станцию

Как только мы определились с адаптером, можно запускать DeX. Для этого:

1. Подключите устройство с помощью адаптера к внешнему экрану (монитору, телевизору или проектору) или запустите режим DeX на своём планшете. Важно: внешний экран должен поддерживать соотношение сторон экрана 16:9 и одно из следующих разрешений FHD (1920×1080), HD+ (1600×900) или WQHD (2560×1440).

2. (Опционально) Подключите клавиатуру и мышь по Bluetooth или через USB порт (если адаптер позволяет такую возможность). Вместо клавиатуры и мыши можно использовать экран устройства как тачпад. Таким образом, возможны 2 сценария использования экрана смартфона в DeX: с тачпадом или с дополнительным экраном:

3. По возможности подключите зарядное устройство (Fast Charge-адаптер, идущий в комплекте с мобильным устройством). DeX-режим более интенсивно использует ресурсы мобильного устройства, а значит, быстрее расходует заряд батареи.

4. Далее следуйте инструкциям на экране устройства.

Выглядеть это будет примерно так:

Более подробно ознакомиться с техническими деталями и спецификациями DeX, включая полный список поддерживаемых устройств, вы можете здесь

Начало работы с DeX

Настало время познакомиться поближе с интерфейсом DeX:

Разберем каждый элемент интерфейса в отдельности:

В правом нижнем углу находится Меню нотификации. Здесь также можно переключиться между режимом DeX и обычным дублированием экрана устройства. Еще через нотификационную панель можно переключить экран девайса в режим тачпада. Это удобно, если у вас нет отдельной мыши, или вам сложно ее подключить (не хватает гнезд на адаптере).

Там же есть и Меню быстрых настроек:

В левом нижнем углу находятся стандартные для Android кнопки Назад, Главный экран и Недавние приложения. А также Меню приложений – доступ ко всем приложениям на устройстве.

В левом нижнем углу — кнопка DeX. Здесь можно получить основную информацию, заблокировать, выключить DeX или активировать режим Dex Labs.

Dex Labs – это набор «экспериментальных» возможностей платформы, позволяющих открывать последнее запущенное приложение при переходе в DeX и принудительно менять размер окна для тех приложений, которые пока не адаптированы для работы в режиме DeX.

Удаленный офис

Мы увидели множество возможностей DeX. Но, главное не это. Нам ведь нужен рабочий инструмент, а не еще одна функция в смартфоне. И среди большого количества адаптированных под DeX приложений, есть категория, которая интересует нас больше всего – это клиенты для подключения к удаленной рабочей станции (VNC, RDP, TeamViewer) или к облачным VDI (Citrix Receiver, VMware Horizon и т.д.)

Читайте также:  Самые лучшие гонки для android

Откроем, для примера, приложение Microsoft Remote Desktop.

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

На удаленном компьютере при этом должен быть установлен пароль для пользователя.
Также необходимо разрешить удаленный доступ в Панели управления Windows.

Далее, покажем настройки на примере Windows 10. Идем в настройки Системы (правая кнопка «Этот компьютер» — Свойства, или Панель управления – Система и безопасность — Система). Слева меню Дополнительные параметры системы – вкладка Удаленный доступ – «Разрешить удаленные подключения к этому компьютеру».
Среди настроек подключения клиента RDP в DeX есть, например, возможность выбора воспроизведения аудио – на удаленной машине или на стороне клиента, т.е. через встроенные динамики устройства или наушники.

Еще клиент дает возможность получить доступ к памяти телефона на удаленном компьютере. Если активировать опцию «Redirect local storage», в Windows можно открыть документы на телефоне прямо из Проводника:

А так выглядит интерфейс RDP клиента в момент после установления соединения. Можно переключаться между разными машинами, либо перейти в режим полного экрана (Fullscreen).

Приложение работает аналогично RDP клиенту в Windows. Поддерживается общий буфер обмена между системами и передача звука.

Таким образом, организовать удаленную работу возможно, имея в наличии только телефон или планшет. Этот вариант можно рассматривать как замену ноутбука или PC, если они используются только в качестве тонкого клиента для доступа к удаленной рабочей станции, либо в поездках, когда нет под рукой полноценной десктопной ОС.

И в качестве заключения, небольшое обзорное видео о DeX:

Автор:
Алексей Клюев,
Lead Engineer
Business Development Team
Samsung R&D Institute, Russia

Источник

Что такое .dex-файлы в Android?

У меня есть некоторые вопросы относительно файлов dex

  • Что такое файл dex в Android?
  • Как работает dex для Android?
  • Как они используются при отладке приложения для Android?
  • Являются ли они похожими на файлы классов java?

Мне нужна конкретная информация, пожалуйста, помогите в этом, и любые реальные примеры приветствуются!

Скомпилированный файл кода приложения Android.

Программы Android скомпилированы в файлы .dex (Dalvik Executable), которые, в свою очередь, заархивированы в один файл .apk на устройстве. .dex файлы могут быть созданы автоматически Android, путем перевода скомпилированных приложений, написанных на языке программирования Java.

О файле .dex:

Одна из самых замечательных особенностей Dalvik Virtual Machine (рабочая лошадка в системе Android) заключается в том, что она не использует байт-код Java. Вместо этого был введен домашний формат DEX, и даже инструкции байт-кода не совпадают с инструкциями байт-кода Java.

Программы Android скомпилированы в .dex (Dalvik Executable), которые, в свою очередь, заархивированы в один файл .apk на устройстве. .dex файлы могут быть созданы путем автоматического перевода скомпилированных приложений, написанных на языке программирования Java.

Формат файла Dex:

Android имеет документацию по Dalvik Executable Format файлу Dalvik Executable Format (файлы .dex ). Вы можете узнать больше в официальных документах: Dex File Format

.dex файлы похожи на файлы классов java, но они работают под управлением DVM .

Вы можете decompile .dex, используя инструмент dexdump , который предоставляется в android-sdk.

Существуют также некоторые обратные инженерные методы, чтобы сделать jar file или java class file из файла .dex .

Файл dex – это файл, который выполняется на VM Dalvik.

Dalvik VM включает в себя несколько функций для оптимизации производительности, проверки и мониторинга, одним из которых является Dalvik Executable (DEX) .

Исходный код Java скомпилирован компилятором Java в .class . Затем инструмент dx (dexer), входящий в состав Android SDK, обрабатывает .class в формате файлов DEX который содержит байт-код Dalvik. Инструмент dx устраняет всю избыточную информацию, присутствующую в классах. В DEX все классы приложения упаковываются в один файл. В следующей таблице приведено сравнение размеров кода для jar-файлов JVM и файлов, обработанных инструментом dex .

В таблице сравниваются размеры кода для системных библиотек, приложений веб-браузера и приложения общего назначения (приложение для будильника). Во всех случаях инструмент dex уменьшает размер кода более чем на 50%.

В стандартных средах Java каждый класс в Java-коде приводит к одному .class файлу. Это означает, что если файл исходного кода Java имеет один открытый класс и два анонимных класса, скажем, для обработки событий, тогда java-компилятор создаст всего три файла .class .

Шаг сборки такой же на платформе Android, что приводит к нескольким файлам .class . Но после создания файлов .class инструмент «dx» используется для преобразования всех файлов .class в один .dex или Dalvik Executable. Это файл .dex который выполняется на VM Dalvik. Файл .dex оптимизирован для использования памяти, и дизайн в первую очередь определяется совместным использованием данных.

Читайте также:  Android тв бокс magicsee n6 plus

Источник

«65К методов хватит всем» или как бороться с лимитом DEX методов в Android

Это произошло внезапно. Только что вы писали код для своего приложения под андроид, вам это нравилось, и вы наслаждались процессом. Вы добавили крутую библиотеку чтобы получить дополнительные возможности и писать более простой код. Но вместо работающего приложения на выходе вы получаете ужасающую надпись:

Unable to execute dex: method ID not in [0, 0xffff]: 65536
Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536

И вы в ступоре, вы неспособны создать DEX файл для APK. Вы не имеете ни малейшего представления о том, что это и как это исправить. И что бы вы не делали, оно будет приводить вас к самому логичному состоянию: ПАНИКА.

Знакомимся с врагом

После того, как вы попробовали все свои обычные трюки (в следующем порядке: чистка проекта, перезапуск IDE, сборка через командную строку, перезагрузка ноутбука, звонок другу и даже десятиминутный перерыв в надежде, что проблема исчезнет сама собой), вы вынуждены признать жестокую правду: проблема все еще здесь. Поэтому было бы неплохо узнать, что стало ее причиной.

В интернете множество постов об этой проблеме: вот один из них, еще один, и еще один; о, а так-же этот и этот тоже. Так что же произошло? По существу, выглядит, что вы столкнулись с чем-то, что часто (и ошибочно) называют Dalvik 65K methods limit. Кратко (спасибо fadden):

Вы можете ссылаться на очень большое число методов в DEX файле, но вызывать можете только первые 65536, потому что это вся память, которая у вас есть для инструкции вызова метода.
[. ] ограничено число методов на которые вы можете сослаться, а не число определенных вами методов. Другими словами, если ваш DEX файл содержит всего несколько методов, но вместе они вызывают 70 000 различных внешне-определенных методов — вы превысите лимит.

Что мы имеем? У вашего приложения слишком много методов, написанных вами или заключенных в библиотечных JAR файлах. По этой причине dx tool не может записать адреса некоторых методов просто потому, что они не помещаются в определенное для этого поле в DEX файле (который в свою очередь содержит скомпилированные Java классы). И именно поэтому проблема должна называться DEX 65K methods limit.

И да, вы все правильно поняли. Эта проблема не исчезнет даже когда андроид перейдет на новый ART рантайм, до тех пор пока Google не решит “поправить” формат DEX или не сменит его на что-то другое.

Давайте посчитаем

Вы наверное удивлены, как вы умудрились зарыть больше 65 000 методов в вашем драгоценном APK. А может и нет. В любом случае, должен быть способ для подсчета этих методов и определения их источника.

Заголовок DEX файла уже содержит информацию о числе ссылок на методы (для ясности, это число представляет уникальные ссылки на методы, а не сумму вызовов для каждого метода). Но мы также хотим видеть, какой пакет добавляет непомерное число этих методов.

Лучший, найденный мной инструмент, был сделан Mihai Parparita, который написал простой bash скрипт, называющийся dex-method-counts. Скрипт очень шустрый и на выходе дает XML, который сопоставляет имя пакета с числом его методов. Другое решение принадлежит Jake Wharton, оно дает точно такой же результат, но требует намного больше времени из-за своей рекурсивной природы (Jake также написал интереснейшую статью по этой теме).

Теперь у нас в руках есть хороший инструмент, так почему бы нам не проверить его на небольшом тестовом приложении? Назовем его SampleApp. Вот код, который содержится в нашей простой Activity:

Я также включил в приложение Google Play Services 5.0.77, хотя я совсем не использую эту библиотеку. Смысл моего поступка прояснится несколькими строками ниже. Теперь давайте проанализируем вывод dex-method-counts (сжатый, для простоты):

Подождите. ЧТО? Я всего лишь определил один метод в моей Activity и уже имею 20 000 методов в моем DEX файле?

Google Play Services: смешанные чувства

Есть ненулевая вероятность что вы знакомы с Google Play Services. Умный ход Google для поддержки API множества своих сервисов, вплоть до Android 2.3 Gingerbread, с новым релизом каждые шесть недель.

Однако все имеет свою цену, которая в данном случае явилась в виде ОГРОМНОГО числа методов которые Play Services несет в себе. Мы говорим приблизительно о 19 000 методов. И при лимите в 65536, это означает, что треть от всех методов, которые мы можем включить, уже исчерпана. Вот так.

Читайте также:  Unlock root для андроид

Теперь, прежде чем мы перейдем к “решению” этой проблемы, я думаю будут уместны небольшие размышления. Некоторые разработчики как внутри, так и вне Google, разделяют общую точку зрения, которая гласит: “Если вы сталкиваетесь с ограничением, то вы плохой, очень плохой разработчик, вы заслуживаете наказания (а также вы должны гореть в аду)”. С более беспристрастной точки зрения это значит, что вы опрометчиво включили слишком много библиотек, то ли потому что вы слишком ленивы, то ли потому что ваше приложение делает слишком много. Лично я не разделяю эту точку зрения. Я считаю, что это просто оправдания для двух простых вещей:

1. Я не хочу признавать проблему / я не хочу исправлять ее.
2. Я не вышел за лимит, значит я крутой разработчик, а ты делаешь что-то не так.

Может быть, лимит был установлен из следующих соображений: “Этот лимит будет определять грань между хорошим и плохим программистом для всех будущих поколений. Да будет так.” Но что-то я в этом сомневаюсь.

Выбросьте все ненужное

В мире где справедливость торжествует, Google осознал глубину проблемы и решил сократить ущерб, который она наносит, разделив гигантский Play Services на модули, которые могут быть включены в зависимости от функциональности, которую использует ваше приложение. Например, если мое приложение не имеет отношения к играм, совершенно не имеет смысла включать в него все Play Games API. Это наиболее разумный ход, который можно предпринять и который возможно осуществить.

Однако Google не понимает в полной мере проблему, так что лучше мы найдем другой путь решения самостоятельно. Как было сказано, мы будем выбрасывать части google-play-services.jar, те части API, которые нам точно не понадобятся.

Для этого есть пара способов. Вы можете делать это вручную, но помните, что вам придется делать это каждые шесть недель.

Вы можете положиться на библиотеку JarJar, которая позволяет удалять желаемые пакеты из jar файла. Ясно и просто.

Если же вы, как и я, предпочитаете старую добрую командную строку, то вы можете использовать скрипт, который я использую для своих проектов, который называется (вы не поверите) strip_play_services.sh. Управлять работой скрипта можно с помощью конфигурационного файла strip.conf, который идет в комплекте. С помощью него вы можете выбрать модули Play Services Library, которые следует отключить. По существу скрипт делает следующее:

1. Извлекает контент из файла google-play-services.jar
2. Проверяет существует ли strip.conf, и если существует, то использует его для конфигурации, если же нет, то создает новый, записывая туда все модули из Play Services Library
3. Основываясь на strip.conf, удаляет ненужные модули из библиотеки
4. Перепаковывает оставшиеся модули в google-play-services-STRIPPED.jar файл

Вот простая конфигурация файла strip.conf:

actions=true
ads=true
analytics=true
appindexing=true
appstate=true
auth=true
cast=true
common=true
drive=false
dynamic=true
games=false
gcm=true
identity=true
internal=true
location=false
maps=false
panorama=false
plus=true
security=true
tagmanager=true
wallet=false
wearable=true

И все. Теперь для примера давайте посчитаем число методов нашего тестового приложения еще раз и посмотрим, что изменилось:

Это уже что-то. Подбирая подходящую конфигурацию, основываясь на нуждах вашего приложения, вы можете управлять “толщиной” Google Play Services и оставлять больше места для методов, которые вам (возможно) действительно нужны.

Но вы также должны быть очень осторожны. Play Services Library собрана очень хорошо (в плане модульности), и вы можете безопасно удалить модуль “games” не затронув при этом модуль “maps”. Но если вы удалите модуль, который используется другими (внутренний, проще говоря), то ничего не будет работать. Используйте метод проб и ошибок!

Есть ли другой путь?

Конечно есть. Запуск ProGuard для вашего приложения может помочь, так как он удаляет ненужные методы из вашего кода и в дополнение уменьшает размер APK. Но не ожидайте большого сокращения, этого не произойдет.

Другое решение заключается в создании второго DEX файла, который содержит часть вашего кода, доступ к которому вы будете осуществлять через интерфейсы/reflections и который вы будете грузить через кастомный ClassLoader (подробнее). Это решение может быть более эффективным в некоторых случаях. Однако этот путь очень нетривиален.

Я нашел еще одно решение моего хорошего друга Dario Marcato. Он создал Gradle task для удаления ненужных модулей. Если вы используете Gradle, то обязательно попробуйте!.

Источник

Оцените статью