This AVD's configuration is missing a kernel file!


#1

Hi,

I am trying to setup CI for Android, and I can’t succeed passing the UI tests. Here is the script I got:

image: openjdk:8-jdk

variables:
  ANDROID_COMPILE_SDK: "26"
  ANDROID_BUILD_TOOLS: "26.0.1"
  ANDROID_SDK_TOOLS: "24.4.1"

before_script:
  - apt-get --quiet update --yes
  - apt-get --quiet install --yes wget tar unzip lib32stdc++6 lib32z1
  - wget --quiet --output-document=android-sdk.tgz https://dl.google.com/android/android-sdk_r${ANDROID_SDK_TOOLS}-linux.tgz
  - tar --extract --gzip --file=android-sdk.tgz
  - echo y | android-sdk-linux/tools/android --silent update sdk --no-ui --all --filter android-${ANDROID_COMPILE_SDK}
  - echo y | android-sdk-linux/tools/android --silent update sdk --no-ui --all --filter platform-tools
  - echo y | android-sdk-linux/tools/android --silent update sdk --no-ui --all --filter build-tools-${ANDROID_BUILD_TOOLS}
  - echo y | android-sdk-linux/tools/android --silent update sdk --no-ui --all --filter extra-android-m2repository
  - echo y | android-sdk-linux/tools/android --silent update sdk --no-ui --all --filter extra-google-google_play_services
  - echo y | android-sdk-linux/tools/android --silent update sdk --no-ui --all --filter extra-google-m2repository
  - export ANDROID_HOME=$PWD/android-sdk-linux
  - export PATH=$PATH:$PWD/android-sdk-linux/platform-tools/
  - chmod +x ./gradlew

stages:
  - unitTests
  - build
  - uiTests

unitTests:
  stage: unitTests
  script:
    - ./gradlew testProdDebug

build:
  stage: build
  script:
    - ./gradlew assembleMockDebug
  artifacts:
    paths:
    - app/build/outputs/

uiTests:
  stage: uiTests
  script:
    - wget --quiet --output-document=android-wait-for-emulator https://raw.githubusercontent.com/travis-ci/travis-cookbooks/0f497eb71291b52a703143c5cd63a217c8766dc9/community-cookbooks/android-sdk/files/default/android-wait-for-emulator
    - chmod +x android-wait-for-emulator
    - echo y | android-sdk-linux/tools/android --silent update sdk --no-ui --all --filter sys-img-x86-google_apis-${ANDROID_COMPILE_SDK}
    - echo no | android-sdk-linux/tools/android create avd -n test -t android-${ANDROID_COMPILE_SDK} --abi google_apis/x86
    - android-sdk-linux/tools/emulator64-x86 -avd test -no-window -no-audio &
    - ./android-wait-for-emulator
    - adb shell input keyevent 82
    - ./gradlew connectedMockDebugAndroidTest
  artifacts:
    paths:
    - app/build/reports/androidTests/

First 2 stages are passing just fine, but when it comes to the last one, it breaks, and here is the log:

    Done. 1 package installed.
$ echo no | android-sdk-linux/tools/android create avd -n test -t android-${ANDROID_COMPILE_SDK} --abi google_apis/x86
Android 8.0.0 is a basic Android platform.
Do you wish to create a custom hardware profile [no]Created AVD 'test' based on Android 8.0.0, Google apis Intel Atom (x86) processor,
with the following hardware config:
hw.lcd.density=240
hw.ramSize=512
vm.heapSize=48
$ android-sdk-linux/tools/emulator64-x86 -avd test -no-window -no-audio &
$ ./android-wait-for-emulator
emulator: ERROR: This AVD's configuration is missing a kernel file!!
emulator: ERROR: ANDROID_SDK_ROOT is undefined

May someone help or give an advice how to solve this?
Thanks in advance!


#2

I’m having the same problem. Could anyone help?

Or maybe did you manage to resolve this @jovche ?


#3

Good day

I encountered the same issue. And have two news for you:

  • the good one is that I found what caused this problem (a kind of);
  • the bad one: I haven’t figured out how to fix it for now.

The issue is caused by two things:

  • as was stated in the error message, we need to declare a new environment variable $ANDROID_SDK_ROOT which will point exactly to the same place as $ANDROID_HOME;
  • after that, there is a small file called kernel-qemu which must be present in a folder with a system image (android-sdk-linux/system-images/android-26/google_apis/x86) but is missing for some mysterious reason;
  • kernel-qemu is the file on absence of which Android emulator is arguing

UPD:

  • kernel-ranchu is present in the folder instead of kernel-qemu;
  • kernel-qemu is a QEMU 2 file format (proof);
  • kernel-qemu is unavailable in Android images newer that API 25 (i.e. is unavailable for API 26, 27 and all future versions) - checked on my local Android Studio installation;
  • looks like QEMU 2 is installed with Android SDK

What all of this means? I don’t know


#4

Maybe you can also create an issue here: https://gitlab.com/greysonp/gitlab-ci-android


#7

I had the same issue when I was creating an android 9 emulator. The error is stating that kernel-qemu is missing and when I checked the installation folder kernel-ranchu was there.

When I updated the SDK tools solved the problem somehow.


#8

I figured out how to solve the undefined error but to replace kernel-ranchu with kernel-qemu am lost

open the .bashrc file if on linux and add export ANDROID_SDK_ROOT= mine was export ANDROID_SDK_ROOT="$HOME/android-sdk-linux:$ANDROID_SDK_ROOT"

The error i currently get is
ERROR: ANDROID_SDK_ROOT is defined (/home/rumone/android-sdk-linux) but cannot find kernel file in /home/rumone/android-sdk-linux/system-images/ sub directories

The sub directories have the kernel-ranchu file, however, I do not how to modify that


#9

@jovche THERE are any solution?


#10

For me Updating the SDK Tools fixed the errors.
Screenshot of errors and update progress