Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Caching Android SDK in Travis CI

I have few open sourced libraries on which I have setup Travis CI. They run fine, except that it takes them 25+ minutes to check a build. Most of the time is wasted in downloading dependencies and Android SDK platforms.

I currently have the following in my .travis.yml

language: android
jdk:
  - oraclejdk8
before_install:
- chmod +x gradlew
env:
  global:
   - ANDROID_API_LEVEL=24
   - EMULATOR_API_LEVEL=21
   - ANDROID_BUILD_TOOLS_VERSION=24.0.1
   - ANDROID_ABI=google_apis/armeabi-v7a
   - ADB_INSTALL_TIMEOUT=20 # minutes (2 minutes by default)

android:
  components:
    - tools
    - tools
    - platform-tools
    - build-tools-$ANDROID_BUILD_TOOLS_VERSION
    - android-$ANDROID_API_LEVEL
    - android-$EMULATOR_API_LEVEL
    - extra
    - add-on
    - extra-google-m2repository
    - extra-android-m2repository
    # Google Play Services
    - extra-google-google_play_services
    # Support library
    - extra-android-support

    - addon-google_apis-google-$ANDROID_API_LEVEL
    - addon-google_apis-google-$EMULATOR_API_LEVEL

    - sys-img-armeabi-v7a-addon-google_apis-google-$ANDROID_API_LEVEL
    - sys-img-armeabi-v7a-addon-google_apis-google-$EMULATOR_API_LEVEL

before_cache:
  - rm -f $HOME/.gradle/caches/modules-2/modules-2.lock
cache:
  directories:
    - $HOME/.gradle/wrapper
    - $HOME/.gradle/native
    - $HOME/.gradle/daemon
    - $HOME/.gradle/caches/jars-1
    - $HOME/.gradle/caches/2.3

before_script:
  - echo no | android create avd --force -n test -t android-21 --abi armeabi-v7a
  - emulator -avd test -no-skin -no-audio -no-window &
  - android-wait-for-emulator
  - adb shell input keyevent 82 &

script:
  - gradle clean check

As you can see I have already cached few gradle directories, but it's still not caching Android SDK platforms. I am sure I am missing few directories which I still need to cache.

Is there any way I can make the builds faster by caching those SDK platforms and dependencies?

like image 672
noob Avatar asked Oct 27 '16 23:10

noob


1 Answers

It's not recommended caching SDK tools but it's possible, I did it in the past, I'll search for a sample

Please, meanwhile, remove these unnecessary lines to speed up it and say me if it works.

    - extra
    - add-on
    # Google Play Services
    - extra-google-google_play_services
    # Support library
    - extra-android-support
    - addon-google_apis-google-$ANDROID_API_LEVEL
    - sys-img-armeabi-v7a-addon-google_apis-google-$ANDROID_API_LEVEL

You only need to install the repositories, one emulator and specific components, not a list like this:

- add-on
- extra


Installing Archives:
  Preparing to install archives
  Downloading GPU Debugging tools, revision 1.0.3
  Installing GPU Debugging tools, revision 1.0.3
    Installed GPU Debugging tools, revision 1.0.3
  Downloading Android Support Repository, revision 29
  Installing Android Support Repository, revision 29
    Installed Android Support Repository, revision 29
  Downloading Android Support Library, revision 23.2.1
  Installing Android Support Library, revision 23.2.1
    Installed Android Support Library, revision 23.2.1
  Downloading Google AdMob Ads SDK, revision 11 (Obsolete)
  Installing Google AdMob Ads SDK, revision 11 (Obsolete)
    Installed Google AdMob Ads SDK, revision 11 (Obsolete)
  Downloading Google Analytics App Tracking SDK, revision 3 (Obsolete)
  Installing Google Analytics App Tracking SDK, revision 3 (Obsolete)
    Installed Google Analytics App Tracking SDK, revision 3 (Obsolete)
  Downloading Android Auto Desktop Head Unit emulator, revision 1.1
  Installing Android Auto Desktop Head Unit emulator, revision 1.1
    Installed Android Auto Desktop Head Unit emulator, revision 1.1
  Downloading Google Cloud Messaging for Android Library, revision 3 (Obsolete)
  Installing Google Cloud Messaging for Android Library, revision 3 (Obsolete)
    Installed Google Cloud Messaging for Android Library, revision 3 (Obsolete)
  Downloading Google Play services for Froyo, revision 12 (Obsolete)
  Installing Google Play services for Froyo, revision 12 (Obsolete)
    Installed Google Play services for Froyo, revision 12 (Obsolete)
  Downloading Google Play services, revision 29
  Installing Google Play services, revision 29
    Installed Google Play services, revision 29
  Downloading Google Repository, revision 25
  Installing Google Repository, revision 25
    Installed Google Repository, revision 25
  Downloading Google Play APK Expansion library, revision 1
  Installing Google Play APK Expansion library, revision 1
    Installed Google Play APK Expansion library, revision 1
  Downloading Google Play Licensing Library, revision 1
  Installing Google Play Licensing Library, revision 1
    Installed Google Play Licensing Library, revision 1
  Downloading Google Play Billing Library, revision 5
  Installing Google Play Billing Library, revision 5
    Installed Google Play Billing Library, revision 5
  Downloading Android Auto API Simulators, revision 1
  Installing Android Auto API Simulators, revision 1
    Installed Android Auto API Simulators, revision 1
  Downloading Google Web Driver, revision 2
  Installing Google Web Driver, revision 2
    Installed Google Web Driver, revision 2
  Done. 15 packages installed.

November 19, 2013
Do you accept the license 'google-gdk-license-35dc2951' [y/n]: y
Installing Archives:
  Preparing to install archives
  Downloading Google APIs, Android API 23, revision 1
  Installing Google APIs, Android API 23, revision 1
    Installed Google APIs, Android API 23, revision 1
  Downloading Google APIs, Android API 21, revision 1
  Installing Google APIs, Android API 21, revision 1
    Installed Google APIs, Android API 21, revision 1
  Downloading Google APIs (x86 System Image), Android API 19, revision 18
  Installing Google APIs (x86 System Image), Android API 19, revision 18
    Installed Google APIs (x86 System Image), Android API 19, revision 18
  Downloading Google APIs, Android API 19, revision 18
  Installing Google APIs, Android API 19, revision 18
    Installed Google APIs, Android API 19, revision 18
  Downloading Glass Development Kit Preview, Android API 19, revision 11
  Installing Glass Development Kit Preview, Android API 19, revision 11
    Installed Glass Development Kit Preview, Android API 19, revision 11
  Downloading Google APIs, Android API 18, revision 4
  Installing Google APIs, Android API 18, revision 4
    Installed Google APIs, Android API 18, revision 4
  Downloading Google APIs, Android API 17, revision 4
  Installing Google APIs, Android API 17, revision 4
    Installed Google APIs, Android API 17, revision 4
  Downloading Google APIs, Android API 16, revision 4
  Installing Google APIs, Android API 16, revision 4
    Installed Google APIs, Android API 16, revision 4
  Downloading Google APIs, Android API 15, revision 3
  Installing Google APIs, Android API 15, revision 3
    Installed Google APIs, Android API 15, revision 3
  Downloading Google APIs, Android API 10, revision 2 (Obsolete)
  Installing Google APIs, Android API 10, revision 2 (Obsolete)
    Installed Google APIs, Android API 10, revision 2 (Obsolete)

Update: I found this build where I was caching SDK tools extras using a custom path like this:

cache:
  apt: true
  directories:
    - ${TRAVIS_BUILD_DIR}/gradle/caches/
    - ${TRAVIS_BUILD_DIR}/gradle/wrapper/dists/
    - ${TRAVIS_BUILD_DIR}/android-sdk/extras/

env:
  global:
    - GRADLE_USER_HOME=${TRAVIS_BUILD_DIR}/gradle
    - ANDROID_HOME=${TRAVIS_BUILD_DIR}/android-sdk
    - SDK=${TRAVIS_BUILD_DIR}/android-sdk
    - PATH=${GRADLE_USER_HOME}/bin/:${SDK}/:${SDK}/tools/:${SDK}/platform-tools/:${PATH}

before_install:
  - echo "WARNING delete this when fixed"; export OLD_SDK=/usr/local/android-sdk-23.0.2;
                                           mkdir -p ${SDK};
                                           cp -u -R ${OLD_SDK}/platforms ${SDK}/platforms;
                                           cp -u -R ${OLD_SDK}/system-images ${SDK}/system-images;
                                           cp -u -R ${OLD_SDK}/tools ${SDK}/tools || echo "CP ERROR"

You don't need to do it and directly save into the cache the default path where repositories reside:

/usr/local/android-sdk/extras

You don't want to save the full sdk tools to cache including all the system images.

The cache’s purpose is to make installing language-specific dependencies easy and fast, so everything related to tools like Bundler, pip, Composer, npm, Gradle, Maven, is what should go into the cache.

Large files that are quick to install but slow to download do not benefit from caching, as they take as long to download from the cache as from the original source:

  • Android SDKs
  • Debian packages
  • JDK packages
  • Compiled binaries

Default environment variables:

TRAVIS_BUILD_DIR: The absolute path to the directory where the repository being built has been copied on the worker.

like image 188
albodelu Avatar answered Oct 20 '22 10:10

albodelu