【发布时间】:2017-08-03 16:00:06
【问题描述】:
我这几天一直在为一个问题苦苦挣扎,希望有人能帮助我...
我尝试将 gitlab ci 用于我的基本 android 应用程序项目。
根据下面的教程Setting up GitLab CI for Android projects,我写了一个.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/
我的第一个困难——正如有人在教程的 cmets 中提到的——是我无法在 docker 容器中管理和启用硬件加速。
目前,我在启动 AVD 时添加了“-no-accel”选项以进一步执行脚本。
但主要问题是'adb shell input keyevent 82'以及以下安装命令失败。
模拟设备正在运行,但显然缺少许多服务,如下所示:
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]
在我的桌面上使用 Android Studio 本地启动的 AVD 实际运行 91 个服务时,仅启动了 17 个服务。
包管理器(包:[android.content.pm.IPackageManager])是缺失的服务之一...
谁能告诉我发生了什么以及该怎么做?
亲切的问候,
劳伦特
【问题讨论】:
-
如果您托管自己的跑步者,您可以使用硬件加速。您只需要与 docker 共享正确的资源。
-
您好 Jakub,感谢您的提示,但我想让整个过程在云中运行。所以如果我真的找不到解决我目前情况的办法,我会接受你的建议。我在脚本中添加了一个(非常长的)计时器,并尝试使用 ARM 系统映像。然后我又启动了一些服务(21 个而不是 17 个)。然而,像包管理器这样的必需品仍然缺失...... :-(。问候,Laurent
-
嗯,有带 gpu 的云解决方案,但价格昂贵。但至少当 Elastic GPU 终于到来时,您会知道还有另一种选择。