CI/CD for Android
📚 Learn more about Android action features, integrations and alternatives.
With Buddy, you can create a pipeline that builds, tests, and deploys Android applications on a push to Git. The configuration is super simple and takes 10 to 15 minutes.
Image loading...
1. Select your Git repository
For the purpose of this guide, we created a simple project in Android Studio. The project was pushed to a Git repository to allow Buddy to access its files.
Image loading...
Buddy supports all popular Git hosting providers, including GitHub, Bitbucket, and GitLab. You can also use your own private Git server, or host code directly on Buddy:
Image loading...
Here's how the project looks in the Code tab:
Image loading...
2. Add a new delivery pipeline
With the project attached, we can configure the deployment pipeline. Enter the pipeline's name, select the trigger mode, and define the branch from which Buddy should fetch your code:
Image loading...
Trigger modes
- Manual (on click) — recommended for Production
- On push (automatic) — recommended for Development
- Recurrently (on time interval) — recommended for Staging/Testing
3. Add actions
In this example, we'll add 4 actions that will perform the following tasks:
- Build your Android application
- Sign app with your key
- Upload APK to Google Play
- (Optional) Send notification to Slack
3.1 Build your Android application
Look up and click Build APK on the action list to add it to the pipeline:
Image loading...
The Run tab lets you determine the commands to execute. The default commands are:
bashexport ANDROID_HOME="/opt/android/sdk" export PATH=$PATH:/opt/android/sdk/cmdline-tools/tools/bin if [ ! -d "$ANDROID_HOME/cmdline-tools" ]; then curl -o sdk.zip https://dl.google.com/android/repository/commandlinetools-linux-7583922_latest.zip unzip sdk.zip rm sdk.zip mkdir "$ANDROID_HOME/cmdline-tools" mv cmdline-tools "$ANDROID_HOME/cmdline-tools/tools" yes | "$ANDROID_HOME/cmdline-tools/tools/bin/sdkmanager" --licenses fi chmod +x gradlew #./gradlew assembleDebug ./gradlew assembleRelease
$$$$$$$$$$$$$$$
Image loading...
Once you add the action, you can run the pipeline and check the logs if everything has passed in order:
Image loading...
3.2 Sign your application (APK)
To save the upload key in Buddy, switch to the Variables tab and click Add variable → Asset:
Image loading...
Configure the asset details:
- enter the name – you will use it in the signing action as the
$ASSET_ID
- upload the key from your disk
- make sure that the asset is allowed to be copied to action containers
Image loading...
With the key safely stored, you can now look up the Sign APK on the action list:
Image loading...
Add the action to the pipeline and fill the main tab with required data:
- APK to sign path: the path in the pipeline filesystem with your APK build
- Key store path: the
$ASSET_ID
of the key that you saved in Buddy - Key store password: the password that you provided when creating the key
Image loading...
3.3 Deploy APK to Google Play
Now, we can deploy the signed package to the Google store. Before adding the publishing action, however, you need to configure a few things in Google:
Enable Google Play Android Developer API in your gcloud project:
Image loading...
Create a service account in Google Cloud with a private key in the
.json
format:Image loading...
Image loading...
Invite the created user to your Google Play account and grant them
Releases
permissions to allow publishing to Google Play:Image loading...
With everything prepared, you can finally add the Google Play Publish APK action to the pipeline:
Image loading...
The action requires an integration with Google Play Store. When adding the integration, upload the key generated in the associated service account:
Image loading...
In the action details, select the signed package in the pipeline filesystem, define the development track (alpha, beta, production, etc.), and enter the app ID:
Image loading...
3.4 (Optional) Send notification to Slack
You can configure Buddy to send your team a message after a new package is released. In this example we'll use Slack:
Image loading...
Last modified on Sep 23, 2024