Мой вывод таков: есть два варианта, ни один из которых не является простым. Варианты, которые, по моему мнению, доступны, описаны ниже. Есть ли более простое решение?
-- Сценарий с двоичным эмулятором x86 ---
Если я хочу использовать двоичный файл x86, конвейер необходима поддержка аппаратной виртуализации (согласно журналам ошибок).
Код: Выделить всё
ERROR | x86 emulation currently requires hardware acceleration!
CPU acceleration status: KVM requires a CPU that supports vmx or svm
Код: Выделить всё
$ echo "Verify KVM support"
Verify KVM support
$ egrep -c '(vmx|svm)' /proc/cpuinfo
0
Код: Выделить всё
$ANDROID_HOME/emulator/emulator -avd Pixel_5_API_30_x86
-no-boot-anim -no-snapshot -gpu -accel off swiftshader_indirect -memory 2048 -no-audio -no-window &
Первый вариант — использовать сторонний экземпляр с поддержкой KVM внутри Gitlab. трубопровод. Это потребует использования экземпляра AWS, поддерживающего вложенную виртуализацию (например, типы экземпляров m5d, c5d или metal), а затем установку и настройку KVM на нем. пример. Я бы предпочел избегать этого маршрута, поскольку он потенциально кажется сложным, и я не совсем уверен, будет ли он по-прежнему работать с образом докера responsenativecommunity/react-native-android.
Второй вариант — использовать двоичный файл ARM, поскольку он не требует аппаратной виртуализации.
-- Сценарий с двоичным эмулятором ARM ---
Проблема с использованием двоичного файла ARM заключается в том, что мне нужен исполнитель Gitlab, который также поддерживает ARM, но он не работает с образом докера Reactnativecommunity/react-native-android в этом задании.
Это часть задания в файле .gitlab-ci.yml:
Код: Выделить всё
android-test:
stage: android-test
image: reactnativecommunity/react-native-android:latest
tags:
- saas-linux-medium-arm64
Код: Выделить всё
ERROR: Job failed: failed to pull image "reactnativecommunity/react-native-android:latest" with specified policies [always]: no matching manifest for linux/arm64/v8 in the manifest list entries (manager.go:251:1s)
Мне кажется, что решением в этом случае будет удаление образа докера responsenativecommunity/react-native-android и вместо этого вручную установите все необходимые компоненты (например, Android SDK, Node JS, JDK, Gradle и React Native CLI). Однако это звучит довольно трудоемко.
--- Мой вопрос:
Есть ли более простой и легкий способ запустить эмулятор Android с использованием двоичных файлов x86 или Arm64? Я искал в Интернете ответы, но не нашел многого, что соответствовало бы моей проблеме. Это потому, что большинство людей не используют Gitlab, а вместо этого используют Bitrise? Или люди просто стиснут зубы и используют одно из двух решений, описанных выше?
Подробнее здесь: https://stackoverflow.com/questions/790 ... ommunity-r