| Атрибуты |
name | Name; required Уникальное имя для этого целевого устройства. |
cache | Integer; required Размер кэша эмулятора в мегабайтах. Минимальное значение — 16 мегабайт. |
default_properties | Label; optional Единственный файл свойств, который будет помещен в /default.prop эмулятора. Это позволяет автору правил дополнительно настроить эмулятор, чтобы он больше походил на реальное устройство (в частности, контролировать строки UserAgent и другое поведение, которое может привести к тому, что приложение или сервер будут вести себя по-разному на конкретном устройстве). Свойства в этом файле будут переопределять только для чтения свойства, обычно устанавливаемые эмулятором, такие как ro.product.model. |
horizontal_resolution | Integer; required Горизонтальное разрешение экрана в пикселях для эмуляции. Минимальное значение — 240. |
platform_apks | List of labels; optional Список APK-файлов, которые будут установлены на устройстве во время загрузки. |
ram | Integer; required Объем оперативной памяти в мегабайтах для эмуляции устройства. Это относится ко всему устройству, а не только к конкретному приложению, установленному на устройстве. Минимальное значение — 64 мегабайта. |
screen_density | Integer; required Плотность эмулируемого экрана в точках на дюйм. Минимальное значение — 30 т/дюйм. |
system_image | Label; required Группа файлов, содержащая следующие файлы: - system.img: системный раздел
- kernel-qemu: ядро Linux, которое загрузит эмулятор
- ramdisk.img: образ initrd для использования при загрузке
- userdata.img: начальный раздел userdata
- source.properties: файл свойств, содержащий информацию об изображениях
Эти файлы являются частью Android SDK или предоставляются сторонними разработчиками (например, Intel предоставляет изображения x86). |
vertical_resolution | Integer; required Вертикальное разрешение экрана в пикселях для эмуляции. Минимальное значение — 240. |
vm_heap | Integer; required Размер кучи виртуальной машины в мегабайтах, которую Android будет использовать для каждого процесса. Минимальное значение — 16 мегабайт. |
android_ndk_repository
android_ndk_repository(name, api_level, path, repo_mapping)
Настраивает Bazel для использования Android NDK для поддержки построения Android-целей с нативным кодом.
Обратите внимание, что для построения для Android также требуется правило android_sdk_repository в вашем файле WORKSPACE.
Для получения дополнительной информации ознакомьтесь с полной документацией по использованию Android NDK с Bazel.
Примеры
android_ndk_repository(
name = "androidndk",
)
Приведенный выше пример найдет ваш Android NDK из $ANDROID_NDK_HOME и определит наивысший уровень API, который он поддерживает.
android_ndk_repository(
name = "androidndk",
path = "./android-ndk-r20",
api_level = 24,
)
Приведенный выше пример будет использовать Android NDK, расположенный в вашей рабочей области в ./android-ndk-r20. Он будет использовать библиотеки уровня API 24 при компиляции вашего JNI-кода.
cpufeatures
Android NDK содержит библиотеку cpufeatures, которая может использоваться для определения процессора устройства во время выполнения. Следующий пример демонстрирует, как использовать cpufeatures с Bazel.
# jni.cc
#include "ndk/sources/android/cpufeatures/cpu-features.h"
...
# BUILD
cc_library(
name = "jni",
srcs = ["jni.cc"],
deps = ["@androidndk//:cpufeatures"],
)
Аргументы
| Атрибуты |
name | Name; required Уникальное имя для этой цели. |
api_level | Integer; optional; nonconfigurable; default is 0 Уровень API Android, по которому необходимо выполнять сборку. Если не указано, будет использоваться наивысший установленный уровень API. |
path | String; optional; nonconfigurable Абсолютный или относительный путь к Android NDK. Должен быть указан либо этот атрибут, либо переменная окружения $ANDROID_NDK_HOME. Android NDK можно скачать со сайта разработчика Android. |
repo_mapping | Dictionary: String -> String; optional Словарь, сопоставляющий локальное имя репозитория с глобальным именем репозитория. Это позволяет контролировать разрешение зависимостей рабочей области для зависимостей этого репозитория. Например, запись "@foo": "@bar" объявляет, что всякий раз, когда этот репозиторий зависит от "@foo" (например, от зависимости от "@foo//some:target"), он должен фактически разрешать эту зависимость в глобально объявленном репозитории "@bar" ("@bar//some:target"). |
android_sdk_repository
android_sdk_repository(name, api_level, build_tools_version, path, repo_mapping)
Настраивает Bazel для использования локального Android SDK для поддержки построения Android-целей.
Примеры
Минимальное требование для настройки Android SDK для Bazel — разместить правило
android_sdk_repository с именем «androidsdk» в вашем файле
WORKSPACE и установить переменную среды
$ANDROID_HOME на путь к вашему Android SDK. По умолчанию Bazel будет использовать самый высокий уровень Android API и версию инструментов сборки, установленные в Android SDK.
android_sdk_repository(
name = "androidsdk",
)
Для обеспечения воспроизводимости сборок атрибуты path, api_level и build_tools_version могут быть установлены на определенные значения. Сборка завершится неудачей, если в Android SDK не установлен указанный уровень API или версия инструментов сборки.
android_sdk_repository(
name = "androidsdk",
path = "./sdk",
api_level = 19,
build_tools_version = "25.0.0",
)
В приведенном выше примере также показано использование пути рабочей области к Android SDK. Это полезно, если Android SDK является частью вашей рабочей области Bazel (например, если он добавлен в систему контроля версий).
Поддержка библиотек
Библиотеки поддержки доступны в диспетчере Android SDK как «Android Support Repository». Это версионированная набор общих Android библиотек, таких как библиотеки поддержки и AppCompat, упакованные как локальный репозиторий Maven. android_sdk_repository генерирует цели Bazel для каждой из этих библиотек, которые могут быть использованы в зависимостях android_binary и android_library целей.
Названия сгенерированных целей получены из координат Maven библиотек в Android Support Repository, отформатированных как @androidsdk//${group}:${artifact}-${version}. Следующий пример показывает, как android_library может зависеть от версии 25.0.0 библиотеки v7 appcompat.
android_library(
name = "lib",
srcs = glob(["*.java"]),
manifest = "AndroidManifest.xml",
resource_files = glob(["res/**"]),
deps = ["@androidsdk//com.android.support:appcompat-v7-25.0.0"],
)
Аргументы
| Атрибуты |
name | Name; required Уникальное имя для этой цели. |
api_level | Integer; optional; nonconfigurable; default is 0 Уровень API Android, по которому выполняется сборка по умолчанию. Если не указано, используется наивысший установленный уровень API. Уровень API, используемый для данной сборки, может быть изменен флагом android_sdk. android_sdk_repository создает цель android_sdk для каждого уровня API, установленного в SDK, с именем @androidsdk//:sdk-${level}, независимо от того, указан ли этот атрибут. Например, чтобы выполнить сборку по другому уровню API: bazel build --android_sdk=@androidsdk//:sdk-19 //java/com/example:app. Чтобы просмотреть все цели android_sdk сгенерированные android_sdk_repository
, вы можете выполнить bazel query "kind(android_sdk, @androidsdk//...)". |
build_tools_version | String; optional; nonconfigurable Версия инструментов сборки Android для использования из Android SDK. Если не указано, используется последняя установленная версия инструментов сборки. Bazel требует инструментов сборки версии 30.0.0 или выше. |
path | String; optional; nonconfigurable Абсолютный или относительный путь к Android SDK. Должен быть указан либо этот атрибут, либо переменная окружения $ANDROID_HOME. Android SDK можно скачать со сайта разработчика Android. |
repo_mapping | Dictionary: String -> String; optional Словарь, сопоставляющий локальное имя репозитория с глобальным именем репозитория. Это позволяет контролировать разрешение зависимостей рабочей области для зависимостей этого репозитория. Например, запись "@foo": "@bar" объявляет, что всякий раз, когда этот репозиторий зависит от "@foo" (например, от зависимости от "@foo//some:target"), он должен фактически разрешать эту зависимость в глобально объявленном репозитории "@bar" ("@bar//some:target"). |