Попросите любого разработчика назвать самую сложную задачу разработки для Android, и есть вероятность, что они скажут фрагментацию. Создание приложения, достаточно гибкого для работы с огромным количеством устройств, которые попадают под баннер «Android», является огромной головной болью, с которой большинство разработчиков Android сталкивалось в определенный момент.
Но разработка для фрагментированной платформы имеет свои плюсы! Поскольку существует так много различных Android-устройств, ваше приложение может соединиться с огромной аудиторией — и эта аудитория стала намного больше, поскольку приложения Android теперь могут работать на Chrome OS.
В этой статье я покажу вам, как настроить и запустить ваш последний проект приложения для Android на Chrome OS. И поскольку вы захотите обеспечить наилучшее взаимодействие с пользователем на этой новой платформе, я также расскажу о том, как оптимизировать ваше приложение для Android, чтобы вы действительно могли удивить свою новую аудиторию Chromebook.
Подходит ли мое приложение для Chromebook?
Как разработчик Android, вы должны всегда отдавать предпочтение своему приложению как можно большему количеству людей, не так ли?
Не обязательно.
То, что приложения Android теперь совместимы с Chrome OS, не означает, что все приложения Android автоматически подойдут для этой новой платформы.
Представьте, что вы обнаружили приложение, которое вам нравится, и Google Play показывает, что это приложение совместимо с вашим смартфоном и вашим Chromebook. Вы решаете загрузить приложение на свой ноутбук и сразу же понимаете, что большинство функций приложения зависят от конкретного мобильного оборудования, например, от возможности совершать телефонные звонки и отправлять SMS-сообщения.
Конечный результат? Это приложение практически невозможно использовать в Chrome OS. Вы немедленно удаляете его, чувствуя, что разработчик полностью потратил ваше время, и оставляете им отрицательный отзыв о Google Play в отместку.
Приложение, которое не поддерживает Chrome OS, в худшем случае раздражает пользователей Chromebook, но приложение, которое обеспечивает ужасный пользовательский опыт в Chrome OS, намного хуже.
Прежде чем приступить к подготовке приложения к его дебюту в Chrome OS, подумайте, действительно ли у вашего приложения есть что предложить пользователям Chromebook.
Ваш типичный Chromebook имеет очень разные аппаратные средства от вашего обычного Android-смартфона или планшета. Оборудование будет постоянной темой в этой статье, но сейчас просто взгляните на список функций вашего приложения — какие из этих функций кажутся вам несовместимыми с вашим обычным ноутбуком?
Например, маловероятно, что приложение шагомера, над которым вы работали, когда-либо будет процветать в Chrome OS, поскольку ноутбуки обычно не имеют оборудования, необходимого для измерения шагов (и когда в последний раз вы видели, как кто-то брал их Chromebook) во время утренней пробежки?
Если в вашем приложении есть несовместимые функции, можно ли каким-либо образом изменить эти функции, чтобы сделать их более удобными для Chromebook? Если ответ «нет», то вам нужно будет отключить эти функции, когда ваше приложение работает в Chrome OS, что приводит к другому вопросу: может ли ваше приложение обеспечить хороший пользовательский опыт, даже без этих функций? Если это кажется маловероятным, то ваше приложение может оказаться не совсем подходящим для Chromebook.
Надеемся, что даже если вам действительно нужно отключить или изменить некоторые функции, ваше приложение будет по-прежнему предлагать пользователям Chromebook что-то новое, и в этот момент вы готовы и готовы приступить к обновлению приложения для работы в Chrome OS!
Запуск приложения в Chrome OS
Если вашему приложению требуется оборудование, которое не поддерживается ОС Chrome, пользователи Chromebook не смогут установить ваше приложение. В частности, есть один аппаратный компонент, который присутствует на большинстве (если не на всех) смартфонах и планшетах, но недоступен на всех устройствах Chromebook: сенсорный экран.
Что еще хуже, если вы не укажете иное, Google Play будет предполагать, что вашему Android-приложению требуется сенсорный экран, и в результате не будет установлено ваше приложение на всех устройствах, не поддерживающих сенсорный экран. Если вы собираетесь сделать свое приложение доступным как можно большему количеству пользователей Chromebook, то вам нужно спросить себя: действительно ли моему Android-приложению требуется сенсорный экран?
Для большинства приложений Android ответ — нет. Большинство приложений Android могут прекрасно работать без сенсорного экрана, особенно на устройствах Chromebook, где у пользователя есть полноразмерная клавиатура, трекпад и, возможно, внешняя мышь. Некоторые Chromebook даже поддерживают «поддельный сенсорный экран», который представляет собой дополнительную систему ввода, которая позволяет использовать мышь и клавиатуру для эмуляции основных сенсорных событий.
Поэтому, если у вас нет веских причин не делать этого, вам следует указать, что вашему приложению для работы не требуется сенсорный экран. Это включает в себя открытие манифеста вашего проекта, объявление сенсорного экрана как функции, которую использует ваше приложение ( uses-feature android:name="android.hardware.touchscreen"
), а затем использование android:attribute
для указания того, будет ли ваше приложение:
-
Требуется эта функция для того, чтобы функционировать (
"true"
). -
Предпочитает, чтобы эта функция была доступна, но может функционировать без нее (
"false"
).
В этом случае мы хотим объявить, что сенсорный экран предпочтителен, но не обязателен:
1
|
<uses-feature android:name=»android.hardware.touchscreen» android:required=»false» />
|
После этого Google Play будет использовать объявления вашего проекта для <uses-feature>
и android:required
чтобы определить, совместимо ли ваше приложение с устройством пользователя, и позволит пользователям загружать ваше приложение, только если их устройство соответствует всем его требованиям.
Как только вы заявите, что вашему приложению не требуется сенсорный экран, оно сразу станет доступно большему проценту пользователей Chromebook.
Другие аппаратные соображения
Теперь промойте и повторите для каждой функции, которую использует ваше приложение. Это лучший способ разработки любого приложения для Android, но также важный шаг в оптимизации вашего приложения для пользователей Chromebook.
Чтобы помочь вам подготовить ваше приложение для Chrome OS, команда Android создала удобный список всех аппаратных деклараций, которые обычно не совместимы с Chromebook. Если в этом списке есть какие-либо функции, которые ваше приложение использует, но не требует, то особенно важно, чтобы вы объявили эту функцию в своем манифесте и отметили ее как android:required="false"
.
Однако не устанавливайте автоматически каждую функцию на "false"
поскольку вы хотите, чтобы ваше приложение было доступно как можно большему количеству Chromebook! Подумайте, какой пользовательский интерфейс доставит ваше приложение без доступа к каждому элементу оборудования. Хотя соблазнительно попытаться представить свое приложение как можно большему количеству людей, всегда лучше обеспечить хороший пользовательский опыт для меньшей аудитории, чем средний или плохой пользовательский опыт для огромной аудитории.
На этом этапе вам также следует проверить все разрешения, которые запрашивает ваше приложение, так как некоторые разрешения делают неявные аппаратные запросы. Например, если ваше приложение запрашивает разрешение камеры, Google Play будет считать, что вашему приложению требуется аппаратное обеспечение камеры, и будет препятствовать установке вашего приложения на устройствах, которые не соответствуют этому требованию. Если ваше приложение на самом деле не требует камеры, то это хороший способ упустить потенциальных пользователей! Чтобы этого не происходило, вам нужно объявить эту функцию в манифесте вашего приложения и пометить ее как "false"
.
Если вы придерживаетесь наилучшей практики объявления каждой функции, которую использует ваше приложение, то теоретически вам не нужно беспокоиться о неявных запросах функций, но на всякий случай всегда стоит перепроверить свой проект.
В частности, следующие разрешения делают подразумеваемые запросы функций, которые могут помешать установке вашего приложения в Chrome OS:
-
CALL_PHONE
-
CALL_PRIVILEDGED
-
CAMERA
-
MODIFY_PHONE_STATE
-
PROCESS_OUTGOING_CALLS
-
READ_SMSREAD_SMS
-
RECEIVE_MMS
-
RECEIVE_SMS
-
RECEIVE_WAP_PUSH
-
SEND_SMS
-
WRITE_APN_SETTINGS
-
WRITE_SMS
Если ваше приложение запрашивает какое-либо из этих разрешений, проверьте еще раз, что вы объявили соответствующее оборудование в манифесте вашего проекта, и пометьте каждое объявление как "false"
если вашему приложению на самом деле не требуется это оборудование.
Пока вы работаете над своими запросами к функциям, это может помочь получить предварительный просмотр того, как Google Play будет фильтровать ваше приложение на основе его текущих заявлений об оборудовании и запросов разрешений. Android SDK включает в aapt
инструмент « aapt
», который позволяет вам делать это: вы можете запустить этот инструмент, проверить, как его выходные данные сравниваются с функциями, которые действительно необходимы вашему приложению, и внести необходимые изменения.
Для получения дополнительной информации об использовании aapt ознакомьтесь с официальными документами по Android.
датчиков
Большинство Android-смартфонов и планшетов имеют различные встроенные датчики, которые могут предоставлять вашему приложению ряд данных, включая текущую ориентацию устройства, положение, а иногда даже информацию о состоянии окружающей среды.
Многие датчики, которые вы обычно ожидаете найти на смартфоне или планшете, недоступны в Chrome OS, поэтому, если ваше приложение использует данные с любого датчика, вы должны спланировать реакцию своего приложения, если этот датчик недоступен.
Если все ваше приложение зависит от наличия доступа к определенному датчику, то вы должны предотвратить установку приложения на любое устройство, которое не включает этот датчик. Например, если ваше приложение не может функционировать без данных от датчика акселерометра, вы должны добавить в манифест вашего проекта следующее:
1
|
<uses-feature android:name=»android.hardware.sensor.accelerometer» android:required=»true» />
|
Другой сценарий состоит в том, что ваше приложение не требует определенного датчика, но имеет функции, которые будут использовать данные с датчика, если он доступен. Если это похоже на ваше приложение, то вы должны объявить этот датчик в манифесте, но пометить его как android:required="false"
. Затем ваше приложение может проверить, доступен ли этот датчик во время выполнения, и отключить любые функции, которые зависят от датчика, который отсутствует на устройстве пользователя.
Чтобы определить, какие датчики доступны, вам нужно создать экземпляр класса SensorManager
, затем вызвать метод getSystemService
и передать аргумент SENSOR_SERVICE
:
1
2
3
|
private SensorManager mSensorManager;
…
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
|
Затем вам нужно получить список всех доступных на данный момент датчиков, вызвав метод getSensorListmethod
и используя константу Sensor.TYPE_ALL
:
1
|
List<Sensor> deviceSensors = mSensorManager.getSensorList(Sensor.TYPE_ALL);
|
Вооружившись этой информацией, вы можете затем отключить любые функции приложения, которые зависят от данных от датчиков, которых нет на текущем устройстве.
Изменение размера и поддержка Chrome OS в многооконном режиме
В Chrome OS приложения Android отображаются в отдельных окнах, по которым пользователь может перемещаться, и переключаются между следующими тремя поддерживаемыми размерами:
-
Портрет. Аналогичный размер экрана Nexus 5.
-
Пейзаж. Экран похож на Nexus 7.
-
Развернутое. Приложение использует все доступное пространство экрана.
Когда пришло время протестировать ваше приложение на Chrome OS, вам нужно убедиться, что ваше приложение выглядит хорошо и работает правильно во всех трех поддерживаемых размерах, например, проверяя, что весь текст вашего приложения легко читается и все элементы пользовательского интерфейса остаются доступными независимо от того, поместит ли пользователь ваше приложение в портретный, альбомный или максимизированный режим.
Хотя пользователи Chrome OS могут одновременно просматривать несколько приложений Android, фокус может фокусироваться только на одно приложение, поэтому в целях экономии заряда батареи ваше приложение должно приостанавливать рендеринг всякий раз, когда оно теряет фокус. Единственное исключение — когда ваше приложение имеет контент, который необходимо постоянно обновлять. Например, если вы разрабатываете приложение, которое воспроизводит музыку или видео, вы, вероятно, не захотите, чтобы эта Activity
прекращалась каждый раз, когда ваше приложение теряет фокус.
Если ваша активность должна обновляться все время, пока она onStop
на экране, вам следует приостановить ее в onStop
и возобновить воспроизведение в onStart
, а не использовать обработчики onPause
.
Рассмотрите возможность использования автоматического резервного копирования
Устройства Chromebook спроектированы таким образом, чтобы пользователи могли легко переключаться между устройствами — им просто нужно войти в свою учетную запись Google, и все их приложения и контент будут доступны, независимо от того, пользовались ли они когда-либо ранее именно этим Chromebook.
Поскольку именно такое поведение ожидают пользователи Chromebook, ваше приложение должно вести себя так же, когда оно работает в Chrome OS. Это означает, что вам нужно создавать резервные копии данных вашего приложения в Интернете, а не просто хранить их локально. Самый простой способ — использовать функцию автоматического резервного копирования Android, которая позволяет создавать резервные копии данных вашего приложения в учетной записи Google Drive пользователя.
Если ваше приложение предназначено для Android 6.0 или выше, то по умолчанию включено автоматическое резервное копирование. Однако всегда полезно четко указывать функции, которые использует ваше приложение (в конце концов, нет гарантии, что автоматическое резервное копирование будет включено по умолчанию в будущих версиях Android), поэтому откройте Manifest вашего проекта и добавьте следующее:
1
|
android:allowBackup=»true»
|
Для получения более подробной информации о реализации резервного копирования и восстановления ознакомьтесь с официальной документацией по Android.
Время проверить!
Даже следуя всем этим рекомендациям, вы не можете быть уверены, что ваше приложение будет обеспечивать хорошее взаимодействие с пользователем в Chrome OS, если только вы не протестируете свое приложение на реальном Chromebook.
На момент написания статьи Google рекомендует протестировать приложения, поддерживающие Chromebook, по следующим параметрам:
-
Chromebook на основе ARM.
-
Chromebook на базе Intel x86.
-
Конвертируемый Chromebook (способный менять форму ноутбука и планшета).
-
Chromebook с поддержкой сенсорного экрана.
-
Chromebook с поддержкой «поддельного прикосновения».
Но давайте будем реалистами: вряд ли у вас просто будет доступ к нескольким Chromebook. Когда вы решаете, какой Chromebook (ы) вы должны попробовать протестировать, приложение может помочь вам взглянуть на список Google всех Android-совместимых Chromebook, представленных в настоящее время на рынке .
Прежде чем вы сможете установить приложение Android в Chrome OS, вам нужно перевести Chromebook в режим разработчика и включить установку из неизвестных источников.
Точный процесс перевода Chromebook в режим разработчика зависит от устройства, поэтому если эти инструкции не работают для вашей конкретной модели, вам следует поискать в документации Chromium инструкции по конкретному устройству.
Чтобы войти в режим разработчика:
-
Убедитесь, что ваш Chromebook выключен.
-
Удерживайте клавиши Esc и Refresh, одновременно нажимая кнопку питания вашего устройства. Ваш Chromebook должен загрузиться в экран восстановления.
-
Нажмите клавиши Control-D на клавиатуре Chromebook.
-
При появлении запроса нажмите клавишу ввода.
-
Нажмите клавиши Control-D еще раз.
Теперь ваш Chromebook загрузится в режиме разработчика.
Следующий шаг — включение неизвестных источников. Для этого перейдите в «Настройки Chrome»> «Настройки приложения»> «Безопасность» и выберите « Неизвестные источники» .
Выполнив эти шаги, вы готовы установить APK (пакет приложений Android), который хотите протестировать. Чтобы быстро перенести APK на Chromebook, вы можете:
-
Добавьте свой APK в Google Drive.
-
Скопируйте файл APK в папку « Загрузки » Chromebook, используя внешний диск или SD-карту.
-
Отправьте APK себе по электронной почте.
Затем вам нужно загрузить APK на Chromebook и открыть его с помощью приложения Android File Manager (которое вы найдете, перейдя в « Настройки Chrome»> «Настройки приложения»> «Устройство и USB»> «Обзор» ).
Кроме того, вы можете перенести APK-файл со своего компьютера разработчика на Chromebook с помощью команд Android Debug Bridge (ADB).
Чтобы ADB хорошо играл с Chrome OS, требуется некоторая настройка, но после того, как вы установили соединение, вы можете использовать ADB для набора команд, которые могут оказаться весьма полезными для тестирования вашего Android-приложения. (Для получения дополнительной информации о командах ADB ознакомьтесь с официальной документацией по Android).
Работа с отладочным мостом Android
Настройка ADB — это многоэтапный процесс, поэтому давайте рассмотрим его по одному шагу:
1. Настройте брандмауэр Chrome OS для разрешения входящих подключений ADB.
Запустите Chrome OS Terminal, нажав Control-Alt-T на клавиатуре, а затем введите shell
чтобы получить командную оболочку bash:
1
2
|
crosh> shell
chronos@localhost / $
|
Введите свой пароль, а затем введите в окне терминала следующие команды:
1
|
chronos@localhost / $ sudo /usr/libexec/debugd/helpers/dev_features_rootfs_verification
|
Прочитайте заявление об отказе от ответственности. Если вы готовы продолжить, введите следующую команду:
1
|
chronos@localhost / $ sudo reboot
|
В этот момент ваш Chromebook перезагрузится. После завершения загрузки Chromebook перезапустите терминал и введите:
1
|
chronos@localhost / $ sudo /usr/libexec/debugd/helpers/dev_features_ssh
|
2. Найдите IP-адрес вашего Chromebook:
Для включения отладки ADB требуется IP-адрес вашего Chromebook, поэтому:
-
Нажмите значок « Сеть» в правом нижнем углу главного экрана Chromebook.
-
Выберите сеть, к которой в данный момент подключен Chromebook.
-
Нажмите значок i в правом нижнем углу меню.
В этот момент появится окно с IP-адресом вашего Chromebook. Запишите его, так как оно понадобится вам позже.
3. Включите отладку adb.
На Chromebook выполните следующие действия:
-
Нажмите на значок часов в правом нижнем углу экрана.
-
Выберите Настройки .
-
В разделе « Приложения для Android » нажмите ссылку « Управление приложениями для Android в настройках» .
-
Нажмите Об устройстве .
-
Войдите в режим разработчика, нажав номер сборки семь раз.
-
Нажмите на стрелку в верхнем левом углу окна. Это вернет вас на главный экран настроек .
-
Нажмите Параметры разработчика .
-
Включите отладку ADB и нажмите кнопку ОК .
Затем выполните следующие шаги на своем компьютере разработчика:
Откройте окно терминала и измените каталог ( cd
) так, чтобы он указывал на местоположение вашей программы adb для Android SDK.
1
|
cd /Users/jessicathornsby/Library/Android/sdk/platform-tools
|
Скажите вашей машине разработки, чтобы она прослушивала соединение TCP / IP через порт 22, введя следующую команду adb:
1
|
./adb tcpip 22
|
adb connect
команду adb connect
а затем IP-адрес вашего Chromebook, например:
1
|
./adb connect 100.100.0.10
|
На Chromebook нажмите Разрешить при появлении запроса.
Единственное, что осталось сделать — это вставить APK с вашего компьютера разработчика на Chromebook.
На компьютере разработчика введите команду adb install
, затем укажите путь и имя файла APK, который вы хотите установить, например:
1
|
./adb install Users/jessicathornsby/Documents/app-name.apk
|
Вот и все! Приложение Android установлено на Chromebook и готово к тестированию!
Резюме
В этой статье мы рассмотрели, как обновить приложение для работы на Chromebook, а затем, когда оно сможет работать на этой новой платформе, как оптимизировать его, чтобы повысить удобство работы пользователей.
Возможность получить доступ к своим любимым приложениям на своих смартфонах, планшетах, а теперь и на ноутбуках — это отличная новость для пользователей Chromebook, а для вас, как для разработчика, это означает большую потенциальную аудиторию для ваших приложений для Android — а кому бы это не хотелось?