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?
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With