Hey everyone,
I just recently wanted to give Gitlab CI a try. It is the CI part of the Gitlab hosting solution. They just recently announced that you can use their shared runners that they are now running on DigitalOcean’s servers for free!
So I currently have an Android project that I want to have built on one their free shared runners. I wasn’t able to find a straight forward solution for a .gitlab-ci.yml file that works for Android projects.
So, this is what I now successfully use for building my Android project on Gitlab CI’s free shared runners:
image: java:openjdk-8-jdk
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_r24.4.1-linux.tgz
- tar --extract --gzip --file=android-sdk.tgz
- echo y | android-sdk-linux/tools/android --silent update sdk --no-ui --all --filter android-23
- 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-23.0.2
- 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
- chmod u+x ./gradlew
build:
script:
- ./gradlew assemble lint
artifacts:
paths:
- app/build/outputs/
Let’s analyse it:
At first we have image: java:openjdk-8-jdk . This instructs Gitlab CI to load a Docker image with OpenJDK 8 configured. This is because I make use of RetroLambda -> we need Java 8.
Next we update the system via apt-get and install some dependecies.
Next we download and unzip the current Android SDK.
Once unzipped, we can use the Android SDK Manager to install all of our needed Android SDK components.
Next we need to set the ANDROID_HOME environment variable.
Finally, we need to make the Gradle Wrapper script executable.
Then in the script: block, we define the actual command that will be executed. Here we can also add tests etc (you know the Gradle commands available…)
And that’s it. Now, whenever you push new commits to your repository, Gitlab will automatically perform a build on Gitlab CI’s free shared runners hosted on DigitalOcean.
After a successful build, we set the archives/files that we want to save for later download. Which, in this case, are just all file in the build/outputs/ folder. That includes Lint results, APKs, etc…
I hope this helps a lot of Android devs to setup their Android projects with Gitlab-CI