# https://github.com/andstatus/todoagenda/blob/aa2bc56effa379e145eecb104cc5bac33975b7aa/.travis.yml # Based on https://travis-ci.org/ankidroid/Anki-Android/builds/624268367 # See also https://travis-ci.community/t/is-android-28-emulator-supported/1718/6 language: shell os: linux # ignored on non-linux platforms, but bionic is required for nested virtualization dist: bionic stages: - install - test - cache env: global: - COMPILE_API=29 - ANDROID_BUILD_TOOLS=29.0.2 - ABI=x86_64 - ADB_INSTALL_TIMEOUT=8 - ANDROID_HOME=${HOME}/android-sdk - ANDROID_TOOLS_URL="https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip" - EMU_FLAVOR=default # use google_apis flavor if no default flavor emulator - GRAVIS="https://raw.githubusercontent.com/DanySK/Gravis-CI/master/" - JDK="1.8" - TOOLS=${ANDROID_HOME}/tools # PATH order is incredibly important. e.g. the 'emulator' script exists in more than one place! - PATH=${ANDROID_HOME}:${ANDROID_HOME}/emulator:${TOOLS}:${TOOLS}/bin:${ANDROID_HOME}/platform-tools:${PATH} jobs: - API=29 before_install: # This section may run on all platforms, and may run for unit tests or for coverage finalization # It should not make assumptions about os platform or desired tool installation # Set up JDK 8 for Android SDK - Java is universally needed: codacy, unit tests, emulators - curl "${GRAVIS}.install-jdk-travis.sh" --output ~/.install-jdk-travis.sh - export TARGET_JDK="${JDK}" - JDK="1.8" - source ~/.install-jdk-travis.sh # Set up Android SDK - this is needed everywhere but coverage finalization, so toggle on that - wget -q "${ANDROID_TOOLS_URL}" -O android-sdk-tools.zip - unzip -q android-sdk-tools.zip -d ${ANDROID_HOME} - rm android-sdk-tools.zip - mkdir ~/.android # avoid harmless sdkmanager warning - echo 'count=0' > ~/.android/repositories.cfg # avoid harmless sdkmanager warning - yes | sdkmanager --licenses >/dev/null # accept all sdkmanager warnings - echo y | sdkmanager --no_https "platform-tools" >/dev/null - echo y | sdkmanager --no_https "tools" >/dev/null # A second time per Travis docs, gets latest versions - echo y | sdkmanager --no_https "build-tools;${ANDROID_BUILD_TOOLS}" >/dev/null # Implicit gradle dependency - gradle drives changes - echo y | sdkmanager --no_https "platforms;android-${COMPILE_API}" >/dev/null # We need the API of the current compileSdkVersion from gradle.properties install: # In our setup, install only runs on matrix entries we want full emulator tests on # That only happens currently on linux, so this section can assume linux + emulator is desired # Download required emulator tools - echo y | sdkmanager --no_https "platforms;android-$API" >/dev/null # We need the API of the emulator we will run - echo y | sdkmanager --no_https "emulator" >/dev/null - echo y | sdkmanager --no_https "system-images;android-$API;$EMU_FLAVOR;$ABI" >/dev/null # install our emulator # Set up KVM on linux for hardware acceleration. Manually here so it only happens for emulator tests, takes ~30s - sudo -E apt-get -yq --no-install-suggests --no-install-recommends install bridge-utils libpulse0 libvirt-bin qemu-kvm virtinst ubuntu-vm-builder - sudo adduser $USER libvirt - sudo adduser $USER kvm # Create an Android emulator - echo no | avdmanager create avd --force -n test -k "system-images;android-$API;$EMU_FLAVOR;$ABI" -c 10M - | EMU_PARAMS="-verbose -no-snapshot -no-window -camera-back none -camera-front none -selinux permissive -qemu -m 2048" EMU_COMMAND="emulator" # This double "sudo" monstrosity is used to have Travis execute the # emulator with its new group permissions and help preserve the rule # of least privilege. sudo -E sudo -u $USER -E bash -c "${ANDROID_HOME}/emulator/${EMU_COMMAND} -avd test ${AUDIO} ${EMU_PARAMS} &" # Wait for emulator to be ready - ./.wait_for_emulator.sh - adb shell input keyevent 82 & # Switch back to our target JDK version to build and run tests - JDK="${TARGET_JDK}" - source ~/.install-jdk-travis.sh script: - ./gradlew :app:lintGoogleplayRelease - ./gradlew :app:jacocoTestReportGoogleplayDebug - ./gradlew -Pcoverage :app:createGoogleplayDebugAndroidTestCoverageReport before_cache: - rm -f $HOME/.gradle/caches/modules-2/modules-2.lock - curl "${GRAVIS}.clean_gradle_cache.sh" --output ~/.clean_gradle_cache.sh - bash ~/.clean_gradle_cache.sh > /dev/null cache: directories: - $HOME/.gradle/caches/ - $HOME/.gradle/wrapper/ after_success: - bash <(curl -s https://codecov.io/bash)