Статьи

Настройка устройств Android с использованием оверлея ресурсов времени выполнения

Все телефоны Android имеют опцию «О телефоне» в меню настроек устройства приложения «Настройки Android». Точно так же все планшеты Android имеют опцию «О планшете». Разве не было бы здорово, если бы разные устройства могли отображать индивидуальную информацию при использовании одного и того же образа системы Android? Что еще более важно, такой механизм может также использоваться для включения информации, которая относится к странам, в которых продаются устройства. Нормативная информация является лишь одним примером этого и может включать в себя правила FCC для США, нормы CE для Европы и правила Telec для Японии.

С технической точки зрения как строка «О настройках», так и графический нормативный информационный ресурс являются встроенными ресурсами приложения «Настройки Android». Несмотря на то, что разработчикам систем рекомендуется создавать наложения устройств, которые имитируют схему пути файловой системы целевого пакета Android без изменения фактического исходного кода, ресурсы заменяются во время сборки, но все равно в конечном итоге получаются различные системные образы для каждой цели сборки, и растущие усилия по обслуживанию, поскольку необходимо поддерживать больше устройств.

С новой платформой Android Runtime Resource Overlay (RRO) Android производители могут совместно использовать один образ системы Android для нескольких моделей устройств, поскольку инфраструктура RRO обеспечивает возможность замены ресурсов приложения во время выполнения. Эта статья познакомит читателя с практическим примером, показывающим, как настроить экран нормативной информации, отображаемый приложением «Настройки Android» на плате MinnowBoard * MAX, на которой выполняется сборка Android-IA.

RRO Введение

В приложениях Android ресурсы — это дополнительные файлы, которые содержат целые числа, строки, растровые изображения, определения макетов и т. Д., Которые должны использоваться кодом Java. Поскольку ресурсы извлекаются из кода приложения, приложение Android может динамически изменять свой внешний вид и поведение в зависимости от текущей конфигурации устройства, например языкового стандарта пользователя, размера экрана или ориентации, поскольку приложение обращается к своим ресурсам, ссылаясь на идентификаторы ресурсов, и Android реализовал систему поиска ресурсов, которая использует текущую конфигурацию устройства для сопоставления идентификатора ресурса скомпилированным двоичным двоичным объектом ресурса с наилучшим соответствием среди всех альтернативных ресурсов.

Sony предоставила платформу Runtime Resource Overlay (RRO) для расширения системы поиска ресурсов Android, чтобы скрывать существующие ресурсы или добавлять ресурсы для новых конфигураций во время работы приложения. Замена ресурсов выполняется во время выполнения без изменения или перекомпиляции исходного кода приложения, поэтому нет необходимости создавать различные пакеты программного обеспечения для каждого продукта при настройке Android для нескольких устройств.

поиск ресурса id с помощью RRO feature.png

Рис. 1. Поиск ресурсов Android с функцией RRO

На рисунке 1 показан путь поиска ресурса в исходной платформе Android и путь после того, как RRO представил среду. Как показано на рисунке 1, платформа RRO принимает наложенные пакеты, которые обеспечивают теневое копирование ресурсов для целевого пакета (например, Настройки APK com.android.settings). Оверлейный пакет — это обычный APK-файл без кода, он содержит альтернативные версии одного или нескольких ресурсов приложения, которые необходимо изменить. Когда система загружает приложение, соответствующие пакеты наложения также загружаются автоматически. Однако во время поиска ресурса Android будет выбирать ресурс с тем же символическим именем в пакетах наложения, что и наиболее подходящий ресурс. Поскольку пакеты наложения могут разрабатываться независимо от целевого приложения, настройки устройства могут быть выполнены с использованием фиксированного целевого приложения, обеспечивая при этом пакеты наложения с различными ресурсами для каждого устройства.

Обратите внимание, что в текущей реализации RRO ресурсы любых приложений могут быть затенены любыми пакетами наложения, что может привести к серьезным последствиям для безопасности. Чтобы ограничить любые недопустимые попытки, только доверенные пакеты, предварительно установленные в папке / vendor / overlay, являются доверенными для добавления ресурсов для новых конфигураций или теневого копирования существующих ресурсов целевого пакета.

Добавить / oem поддержку и перенаправить / vendor / overlay к нему

Android создает символическую ссылку, перенаправляющую папку / vendor в / system / vendor по умолчанию, поскольку пакеты, включенные в образ системы, считаются доверенными. Однако для использования инфраструктуры RRO для настройки сборок, основанных на одном образе системы, пакеты с наложением должны быть предварительно загружены в папку / vendor / overlay . Для этого мы могли бы создать OEM-раздел с именем / oem для размещения всех ресурсов настройки и создать символическую ссылку / system / vendor / overlay, указывающую на / oem / overlay для размещения оверлейных пакетов. В следующих разделах подробно рассматриваются эксперименты RRO с использованием сборки Android-IA * 1 на аппаратной платформе Minnowboard MAX.

В процессе установки образов Android-IA на плату MinnowBoard MAX версия исполняемого файла Fastboot взаимодействует с версией устройства двоичного файла UserFastboot для обеспечения аппаратного устройства [2]. Следующие исправления являются примером кода для добавления возможности прошивать или удалять OEM-раздел из UserFastboot:

* 1 Следующие исправления AOSP необходимо применить к эталонному коду Android-IA 5.1 MR1 для исправления вышестоящей ошибки и правильного включения инфраструктуры RRO.

diff --git a/groups/boot-arch/efi/fstab b/groups/boot-arch/efi/fstab
index ff5aebc..0fabb82 100644
--- a/groups/boot-arch/efi/fstab
+++ b/groups/boot-arch/efi/fstab
@@ -13,4 +13,5 @@
 /dev/block/by-name/android_bootloader2  /bootloader2    emmc    defaults                                   recoveryonly
 /dev/block/by-name/android_persistent   /persistent     emmc    defaults                                   defaults
 /dev/block/by-name/android_metadata     /metadata       emmc    defaults                                   defaults
+/dev/block/by-name/android_oem          /oem            ext4    ro,context=u:object_r:oemfs:s0   wait

  • Устройство / Intel / Mixins / группы / загрузки арка / EFI / Gpt.ini

diff --git a/groups/boot-arch/efi/gpt.ini b/groups/boot-arch/efi/gpt.ini
index 5569df8..715d49e 100644
--- a/groups/boot-arch/efi/gpt.ini
+++ b/groups/boot-arch/efi/gpt.ini
@@ -1,5 +1,5 @@
 [base]
-partitions = bootloader bootloader2 boot recovery misc metadata system cache data persistent
+partitions = bootloader bootloader2 boot recovery misc metadata system cache data persistent oem
 device = {{{device}}}

 [partition.bootloader]
@@ -65,3 +65,9 @@ len = 1
 type = linux
 guid = ebc597d0-2053-4b15-8b64-e0aac75f4db1

+[partition.oem]
+label = android_oem
+len = 100
+type = linux
+guid = ac6d7924-eb71-4df8-b48d-e267b27148f 

Чтобы создать символическую ссылку для перенаправления / vendor / overlay на / oem / overlay в новом добавленном образе раздела OEM, мы добавили следующие инструкции по сборке в AndroidBoard.mk цели сборки minnow_max :

  • Устройство / Intel / baytrail / minnow_max / AndroidBoard.mk
diff --git a/minnow_max/AndroidBoard.mk b/minnow_max/AndroidBoard.mk
index d37eaa3..6e742e2 100644
--- a/minnow_max/AndroidBoard.mk
+++ b/minnow_max/AndroidBoard.mk
@@ -1,3 +1,13 @@
+# Create a symbolic link /system/vendor/overlay pointing to the overlay folder in OEM partition
+VENDOR_OVERLAY_DIR := $(PRODUCT_OUT)/system/vendor/overlay
+OEM_OVERLAY_DIR := /oem/overlay
+
+$(VENDOR_OVERLAY_DIR):
+$(hide) mkdir -p $(dir $@)
+$(hide) ln -sf $(OEM_OVERLAY_DIR) $@
+
+INSTALLED_RADIOIMAGE_TARGET += $(VENDOR_OVERLAY_DIR)

Настройка наложения устройства для приложения «Настройки»

В этом примере мы собираемся настроить нормативную информацию об устройстве Android, отображаемую приложением «Настройки».

В файле манифеста приложения Настройки Android, отображать или нет нормативную информацию, определяется логическим ресурсом config_show_regulatory_info , который по умолчанию отключен. Вместо непосредственного изменения логического ресурса в исходном коде Android, дисциплинированный подход заключается в создании папки наложения устройства, которая имитирует путь к файлу измененных ресурсов целевых пакетов, так что система сборки Android включает измененные ресурсы только для определенного устройства во время время сборки. На рисунке 2 показана структура файла ресурсов, которую мы добавили к наложению цели сборки minnow_max , чтобы включить отображение нормативной информации.

Figure2.png

Рисунок 2. Структура файла оверлея ресурсов для приложения настроек Android

Следуя инструкциям в Руководстве по сборке ОС [3], чтобы перестроить образ Android и прошить его на плате Minnowboard MAX, вы должны увидеть новую добавленную нормативную информацию из приложения Настройки Android, как показано на рисунке 3.

about.pngfcc.png

Рисунок 3 Снимки экрана: результат наложения устройства

Создайте пакет наложения

Наложение пакетов наложения проще, если вы установили Android Studio, в противном случае вам потребуется установить инструменты Android SDK и вручную создать пакет наложения с помощью инструмента упаковки Android aapt [4]. Инструмент упаковки Android компилирует ресурсы приложения, создает сопоставление сгенерированными двоичными BLOB-объектами и упаковывает двоичные BLOB-объекты в файл APK.

Прежде всего, создайте папку, которая содержит измененные ресурсы и файл манифеста AndroidManifest.xml, в котором указывается имя пакета целевого приложения, которое нужно наложить, и порядок приоритетов, если один и тот же ресурс будет затенен несколькими пакетами наложения. На рисунках 4 показана папка пакета RRO, использованная в этом примере.

Figure4.png

Рисунок 4 Пример содержимого папки пакета оверлеев RRO

Затем сгенерируйте исходный код Java класса R, который содержит идентификаторы всех оверлейных ресурсов, и создайте исходный пакет APK с помощью следующих команд:

$ cd regulatory_info  # where the source of overlay package build folder
$ mkdir -p gen/com/intel/irda/settings_overlay  # this must match the overlay package name
$ aapt package -m -J gen/ -M AndroidManifest.xml -S res/ -I <android_sdk_platform_API_folder>/android.jar
$ aapt package -f -M AndroidManifest.xml -S res/ -I <android_sdk_platform_API_folder>/android.jar -F regulatory_info.apk.unaligned

Подпишите пакет своим ключом, поскольку Android требует, чтобы все приложения были подписаны, прежде чем их можно будет установить. Вы можете сослаться на онлайн-документ Android SDK [5], чтобы создать свой собственный ключ подписи.

$ jarsigner -keystore <keystore-filename> regulatory_info.apk.unaligned <key-name>

Наконец, рекомендуется настроить APK для увеличения производительности:

$ zipalign 4 regulatory_info.apk.unaligned regulatory_info.apk

Создать образ OEM-раздела и прошить на устройство

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

$ mkdir -p oem/overlay
$ cp <overlay_build_folder>/regulatory_info.apk ./oem/overlay
$ genext2fs -b 8192 -m 0 -d oem/ oem.img

Используйте команду fastboot для прошивки образа раздела OEM в устройство, перезагрузите устройство после выполнения следующей команды fastboot flash, обновленные нормативные логотипы должны отображаться (рисунок 5) приложением «Настройки» без перекомпоновки образа системы.

$ fastboot -t <device_IP_address> flash oem oem.img
$ fastboot -t <device_IP_address> continue

Перезагрузите устройство и зайдите на страницу нормативной информации приложения «Настройки Android», обновленная нормативная информация будет показана на рисунке 5.

new_about.png

new_regulatory.png

Рисунок 5 Скриншоты результата наложения во время выполнения

Вывод

Android has been porting to a variety of devices, device builders used to customize the Android source code to meet each device’s specific requirements, including those device information which are irrelevant to the integrated hardware components or software features. With the new Runtime Resource Overlay framework, such customizations become less effort for programs such as Intel Reference Design for Android, which shares a single Android binary image amongst a number of supported Intel platforms.

concept.png

References

  1. Sony contributes Runtime Resource Overlay framework to Android

  2. Android* 5.0 Lollipop Bring-up Guide on MinnowBoard MAX

  3. Android* 5.0 Lollipop OS Build Guide

  4. Building Android Application Bundles (APKs) by Hand

  5. Signing Your Applications