无法使用Gitlab-CI在Docker容器中运行Android应用程序

我一直在为一个问题挣扎了好几天,希望有人能帮助我…

我尝试使用我的基本android应用程序项目的gitlab ci。

基于下面的教程为Android项目设置GitLab CI ,我写了一个.gitlab-ci.yml脚本:

image: openjdk:8-jdk variables: ANDROID_COMPILE_SDK: "25" ANDROID_BUILD_TOOLS: "25.0.1" ANDROID_SDK_TOOLS: "25.2.3" before_script: - apt-get --quiet update --yes - apt-get --quiet install --yes wget tar unzip lib32stdc++6 lib32z1 libqt5widgets5 - wget --quiet --output-document=tools.zip https://dl.google.com/android/repository/tools_r${ANDROID_SDK_TOOLS}-linux.zip - unzip tools.zip -d /sdk - rm tools.zip - echo y | /sdk/tools/android --silent update sdk --no-ui --all --filter android-${ANDROID_COMPILE_SDK} - echo y | /sdk/tools/android --silent update sdk --no-ui --all --filter platform-tools - echo y | /sdk/tools/android --silent update sdk --no-ui --all --filter build-tools-${ANDROID_BUILD_TOOLS} - echo y | /sdk/tools/android --silent update sdk --no-ui --all --filter extra-android-m2repository - echo y | /sdk/tools/android --silent update sdk --no-ui --all --filter extra-google-google_play_services - echo y | /sdk/tools/android --silent update sdk --no-ui --all --filter extra-google-m2repository - export ANDROID_HOME=/sdk - export PATH=$PATH:$ANDROID_HOME/platform-tools/ - chmod +x ./gradlew stages: - test functionalTests: stage: test script: - echo y | /sdk/tools/android --silent update sdk --no-ui --all --filter sys-img-x86-google_apis-${ANDROID_COMPILE_SDK} - echo no | /sdk/tools/android create avd -n test -t android-${ANDROID_COMPILE_SDK} --abi google_apis/x86 - /sdk/tools/emulator64-x86 -avd test -no-accel -no-window -no-audio & - adb wait-for-device - ./gradlew assembleDebug - ./gradlew assembleDebugAndroidTest - adb devices - adb shell service list - adb shell input keyevent 82 # Unlock device to allow install... - adb install -r app/build/outputs/apk/app-debug.apk - adb install -r app/build/outputs/apk/app-debug-androidTest.apk - adb shell am instrument -w -r -e debug false -e class com.example.myfirstapp.ManageItemListTest com.example.myfirstapp.test/android.support.test.runner.AndroidJUnitRunner artifacts: paths: - app/build/outputs/ 

我的第一个难题 – 正如本教程的评论中提到的那样 – 我无法在Docker容器中pipe理和启用硬件加速。

现在,我在启动AVD时添加了“-no-accel”选项,以便进一步执行脚本。

但主要问题是'adb shell input keyevent 82'以及下面的安装命令失败。

仿真的设备正在运行,但显然缺less大量的服务,如下所示:

 Found 17 services: 0 media.camera: [android.hardware.ICameraService] 1 media.resource_manager: [android.media.IResourceManagerService] 2 media.player: [android.media.IMediaPlayerService] 3 media.sound_trigger_hw: [android.hardware.ISoundTriggerHwService] 4 media.radio: [android.hardware.IRadioService] 5 media.audio_policy: [android.media.IAudioPolicyService] 6 media.drm: [android.media.IMediaDrmService] 7 media.extractor: [android.media.IMediaExtractorService] 8 media.audio_flinger: [android.media.IAudioFlinger] 9 drm.drmManager: [drm.IDrmManagerService] 10 media.codec: [android.media.IMediaCodecService] 11 gpu: [android.ui.IGpuService] 12 SurfaceFlinger: [android.ui.ISurfaceComposer] 13 android.service.gatekeeper.IGateKeeperService: [] 14 android.security.keystore: [android.security.IKeystoreService] 15 android.hardware.fingerprint.IFingerprintDaemon: [] 16 batteryproperties: [android.os.IBatteryPropertiesRegistrar] 

只有17个服务启动时,91实际上运行在我的桌面上使用Android Studio本地启动的AVD。

包pipe理器(包:[android.content.pm.IPackageManager])是缺less的服务之一…

有人可以告诉我发生了什么事,做什么?

亲切的问候,

洛朗

我终于find了一个使用ARM系统映像的解决scheme。 但是,还必须等待所有必需的服务启动。 以下是对任何感兴趣的人的新脚本:

 image: openjdk:8-jdk variables: ANDROID_COMPILE_SDK: "25" ANDROID_BUILD_TOOLS: "25.0.1" ANDROID_SDK_TOOLS: "25.2.3" before_script: - apt-get --quiet update --yes - apt-get --quiet install --yes wget tar unzip lib32stdc++6 lib32z1 libqt5widgets5 - wget --quiet --output-document=tools.zip https://dl.google.com/android/repository/tools_r${ANDROID_SDK_TOOLS}-linux.zip - unzip tools.zip -d /sdk - rm tools.zip - echo y | /sdk/tools/android --silent update sdk --no-ui --all --filter android-${ANDROID_COMPILE_SDK} - echo y | /sdk/tools/android --silent update sdk --no-ui --all --filter platform-tools - echo y | /sdk/tools/android --silent update sdk --no-ui --all --filter build-tools-${ANDROID_BUILD_TOOLS} - echo y | /sdk/tools/android --silent update sdk --no-ui --all --filter extra-android-m2repository - echo y | /sdk/tools/android --silent update sdk --no-ui --all --filter extra-google-google_play_services - echo y | /sdk/tools/android --silent update sdk --no-ui --all --filter extra-google-m2repository - export ANDROID_HOME=/sdk - export PATH=$PATH:$ANDROID_HOME/platform-tools/ - chmod +x ./gradlew stages: - test functionalTests: stage: test script: - echo y | /sdk/tools/android --silent update sdk --no-ui --all --filter sys-img-armeabi-v7a-google_apis-${ANDROID_COMPILE_SDK} - echo no | /sdk/tools/android create avd -n test -t android-${ANDROID_COMPILE_SDK} --abi google_apis/armeabi-v7a - /sdk/tools/emulator64-arm -avd test -no-audio -gpu off -no-boot-anim -no-window & - adb wait-for-device - OUT=`adb shell service list | grep IPackageManager 2>&1 &` # Now wait for other services startup - until [[ $OUT =~ .*IPackageManager.* ]]; do - sleep 20 - OUT=`adb shell service list | grep IPackageManager 2>&1 &` - done - ./gradlew assembleDebug - ./gradlew assembleDebugAndroidTest - adb shell input keyevent 82 # Unlock device to allow install... - adb install -r app/build/outputs/apk/app-debug.apk - adb install -r app/build/outputs/apk/app-debug-androidTest.apk - adb shell am instrument -w -r -e debug false -e class com.example.myfirstapp.ManageItemListTest com.example.myfirstapp.test/android.support.test.runner.AndroidJUnitRunner artifacts: paths: - app/build/outputs/ 

对于这个基本的例子,整个执行花了超过25分钟完成(与我的testing失败,但这是另一个故事… ;-))。 有硬件加速将是很好的…

亲切的问候,

洛朗