2017-03-13 1 views
2

Gitlab-CI와 도커 컨테이너에 안드로이드 응용 프로그램을 실행할 수 없습니다... 지금 며칠 문제로 어려움을 겪고있다 그리고 나는 누군가가 나를 도울 수있을 것입니다 희망

내가 시도 기본 안드로이드 응용 프로그램 프로젝트에 gitlab ci를 사용합니다. 다음 튜토리얼 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/ 

나의 첫번째 어려움 - 튜토리얼의 의견에 언급 된 사람과 같이 -이다 내가 관리 할 수있는 방법이 없다는 것을 및 도커 컨테이너에서 하드웨어 가속을 활성화합니다.

지금은 스크립트를 추가로 실행하기 위해 AVD를 시청할 때 '-no-accel'옵션을 추가했습니다.

하지만 문제는 'adb 쉘 입력 키 이벤트 82'와 다음 설치 명령이 실패한다는 것입니다.

에뮬레이션 된 장치가 실행되고 있지만, 다음과 같이 분명히 서비스를 많이 누락되었습니다 (91)가 실제로 로컬 안드로이드 스튜디오 내 바탕 화면에 시작 AVD에 출마 할 때

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 서비스가 시작됩니다.

패키지 관리자 (패키지 : [android.content.pm.IPackageManager])

는 사람이 무슨 일을 말해 줄래 무엇을 할 ... 누락 된 서비스 중 하나입니다?

종류와 관련,

로랑

+0

, ...

종류와 관련 하드웨어 가속을 가지고 좋은 것입니다. 도커와 올바른 리소스를 공유하기 만하면됩니다. –

+0

안녕하세요 Jakub, 팁 주셔서 감사합니다하지만 전 과정을 구름에서 실행하고 싶습니다. 그래서 현재 상황에 대한 해결책을 찾지 못하면 제안을 받아 보겠습니다. 스크립트에 (매우 긴) 타이머를 추가했으며 ARM 시스템 이미지로 시도했습니다. 그런 다음 몇 가지 서비스가 시작되었습니다 (17 개 대신 21 개). 패키지 관리자와 같은 필요한 사람은 아직 :-(... 누락 그러나 . 안부, 로랑 –

+0

음이 GPU와 클라우드 솔루션은 그러나 그들은 비싸다.하지만 적어도 당신은 거기에 알 Elastic GPU가 마침내 도착했을 때의 대안. –

답변

2

나는 마지막으로 ARM 시스템 이미지를 사용하여 솔루션을 발견했다. 하지만 필요한 모든 서비스가 시작될 때까지 기다려야합니다. 이하는 관심있는 사람들을위한 새로운 스크립트입니다

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 개 이상의 분이었다 (내 테스트가 실패하지만 그건 또 다른 이야기로 ... ;-)). 당신이 당신의 자신의 주자를 호스팅하는 경우 당신은 하드웨어 가속을 가질 수

로랑

+0

몇 가지 추가 정보 ... ARM AVD에서 x86 테스트를 통과하는 동안 UI 테스트가 실패합니다. gitlab-ci로 테스트를 성공적으로 실행하려면 내 ARM 이미지를 Android 버전 25에서 19로 다운 그레이드해야했습니다. gitlab-ci 프로젝트에서 하드웨어 가속 활성화를 요청하는 개선 요청을 열었습니다 : https : // gitlab. co.kr/gitlab-org/gitlab-ci-multi-runner/issues/2242 –