Nova Flow OS
KDE Developer Platform
KDE Developer Platform
  • KDE Developer Platform
    • Getting started
      • Building KDE software
        • KDE software
        • Where to find the development team
        • Learning more
        • Choose what to work on
        • Source code cross-referencing
        • Installing build dependencies
        • Set up a development environment
        • Building KDE software with kdesrc-build
        • Basic troubleshooting
        • Tips and tricks
        • IDE Configuration
          • Setting up an IDE for KDE development
          • Visual Studio Code
          • Qt Creator
          • Kate
          • KDevelop
          • CLion
          • Sublime Text
        • Building KDE software manually
        • Building KDE software with distrobox and podman
      • Kirigami
        • KDE is ours
        • Setting up and getting started
        • Explaining pages
        • Layouts, ListViews, and Cards
        • Adding actions
        • Adding a dialog
        • Using separate files
        • Next steps
        • Colors and themes in Kirigami
        • Typography
        • Actions based components
        • Page rows and page stacks
        • Scrollable pages and list views
        • Cards
        • Drawers
        • Chips
        • Dialog types
        • Controls and interactive elements
        • Form layouts
        • Inline messages
        • Action toolbars
        • Progress bars and indicators
        • List views
        • Understanding CMakeLists
        • Figuring out main.cpp
        • Connect logic to your QML user interface
        • Connect models to your QML user interface
        • About page
        • Introduction to Kirigami Addons
        • FormCard About pages
        • Form delegates in your settings pages
      • KXmlGui
        • Getting started with KXmlGui
        • Hello World!
        • Creating the main window
        • Using actions
        • Saving and loading
        • Command line interface
      • Python with Kirigami
        • Apps with QML and Python
        • Your first Python + Kirigami application
        • Creating a Python package
        • Creating a Flatpak
      • Common programming mistakes
      • Adding a new KDE project
    • Features
      • Icons
      • Configuration
        • The KConfig Framework
        • Introduction to KConfig
        • Using KConfig XT
        • KDE Frameworks 6 porting guide
        • Settings module (KCM) development
        • KConfigDialog
      • D-Bus
        • What is D-Bus practically useful for?
        • Introduction to D-Bus
        • Accessing D-Bus interfaces
        • Intermediate D-Bus
        • Creating D-Bus interfaces
        • Using custom types with D-Bus
        • D-Bus autostart services
      • Create your own mouse cursor theme
      • Session management
      • Archives
      • Desktop file
      • KAuth
        • Privilege Escalation
        • Using actions in your applications
      • KIdleTime
      • Akonadi: personal information management
        • Debugging Akonadi Resources
        • Using Akonadi in applications
      • Concurrent programming
      • Solid
      • Sonnet
    • Plasma themes and plugins
      • Getting started
      • Plasma Widget tutorial
        • How to create a plasmoid
        • Setup
        • Porting Plasmoids to KF6
        • Testing
        • QML
        • Plasma's QML API
        • Widget Properties
        • Configuration
        • Translations / i18n
        • Examples
        • C++ API
      • KWin Effects
      • Plasma Desktop scripting
        • Javascript Interaction With Plasma Shells
        • Templates
        • Examples
        • API documentation
        • Configuration keys
      • Plasma Style tutorial
        • Creating a Plasma Style quickstart
        • Understanding Plasma Styles
        • SVG elements and Inkscape
        • Background SVG format
        • System and accent colors
        • Theme elements reference
        • Porting themes to Plasma 5
        • Porting themes to Plasma 6
      • Aurorae window decorations
      • KWin scripting tutorial
        • Quick start
        • KWin scripting API
      • Wallpapers
      • Plasma comic
        • Tutorial
        • Testing and debugging
        • Examples
      • Create a custom Window Switcher
      • KRunner C++ Plugin
        • Basic Anatomy of a Runner
        • KRunner metadata format
    • Applications
      • Creating sensor faces
      • Dolphin
        • Creating Dolphin service menus
      • Kate
        • Kate plugin tutorial
      • KMines
        • Making a KMines theme
      • Writing tests
        • Appium automation testing
    • Packaging
      • Android
        • KDE on Android
        • Building applications for Android
        • Packaging and publishing applications for Android
        • Publishing on Google Play
          • Introduction
          • Packaging your app
          • Adding your app to Google Play
          • Publishing your app
          • Releasing new versions of old apps
        • Porting applications to Android
          • Basic porting
          • Making applications run well on Android
          • Metadata
      • Windows
        • Packaging and publishing applications for Windows
        • Publish your app in the Microsoft Store
          • Packaging your app for the Microsoft Store
          • Submitting your app to the Microsoft Store
      • Plasma Mobile
        • KDE on mobile devices
        • Porting a new device to Plasma Mobile
        • KDE Telephony stack
          • General Overview
          • Kernel layer
          • System daemons
            • General overview
            • Developing Telephony functionality
            • ModemManager Telephony functions
          • Session daemons
          • QML declarative plugin layer
          • KDE application layer
        • Execute applications
      • Distributing KDE software as Flatpak
        • Your first Flatpak
        • Extending your package
        • Nightly Flatpaks and Flathub
        • Testing your Flatpak
    • System administration
      • Shell scripting with KDE dialogs
      • Kiosk: Simple configuration management for large deployment
        • Abstract
        • Introduction to Kiosk
        • Kiosk keys
    • Contribute to the documentation
    • About
      • Readme
      • License
        • Creative Commons Attribution-ShareAlike 4.0 International
        • GNU General Public License 3.0 or later
Powered by GitBook
On this page
  • Packaging the application for Google Play
  • Signing the Android App Bundle
  • Summary
  1. KDE Developer Platform
  2. Packaging
  3. Android
  4. Publishing on Google Play

Packaging your app

Learn how to package your application for Google Play

PreviousIntroductionNextAdding your app to Google Play

Last updated 8 months ago

In this first part of the tutorial you will learn how to create an (AAB) for an application. For new apps Google Play requires the upload of applications as AABs.

We use as example.

Packaging the application for Google Play

The CI/CD system already creates APKs for KTrip that can be published on F-Droid or separately, but to publish KTrip on Google Play we need to create an Android App Bundle.

To achieve this, we add the template /gitlab-templates/craft-android-qt6-appbundle.yml to the .gitlab-ci.yml file in the 24.02 release branch of KTrip:

include:
  - project: sysadmin/ci-utilities
    file:
      - /gitlab-templates/craft-android-qt6-apks.yml
      - /gitlab-templates/craft-android-qt6-appbundle.yml

This template adds three jobs to the CI/CD pipeline of KTrip:

  • craft_android_appbundle_qt66 which creates an AAB of KTrip.

  • googleplay_aab_qt66 which publishes the AAB as beta release of KTrip on Google Play.

  • sign_aab_qt66 which signs the AAB so that it can be uploaded manually to Google Play. This job does not run automatically.

The last two jobs are only added for pipelines on mainline branches of mainline repositories. In particular, you won't see them in a merge request pipeline.

Note Mainline branches are the `master` branch and release branches like `release/24.02`.

After successfully running a CI/CD pipeline for the 24.02 branch of KTrip, the craft_android_appbundle_qt66 job will have created an AAB that we can download by browsing the job artifacts. The googleplay_aab_qt66 job will have logged

Branch 'release/24.02' of project 'utilities/ktrip' is not cleared for publishing. Skipping.

We will change this later.

The sign_aab_qt66 job has not run. That's okay. We will run it later.

Note If the application you want to publish on Google Play is based on Qt 5 then include the template `/gitlab-templates/craft-android-appbundle.yml`.

Signing the Android App Bundle

To prepare Google Play for the publication of KTrip we need to upload one AAB manually as we will see in the next section. This AAB needs to be signed with KDE's upload key so that Google Play accepts it.

utilities/ktrip:
  applicationid: org.kde.ktrip
  branches:
    release/24.02:

When we now run a CI/CD pipeline for KTrip on the release/24.02 branch, only after a successful completion of the craft_android_appbundle_qt66 job can we trigger the sign_aab_qt66 job. Once the latter finishes, this job will have signed the AAB that was created by the craft_android_appbundle_qt66 job. Download the signed AAB by browsing the job artifacts and remember where you saved it for the next part of the tutorial.

If the sign_aab_qt66 job logs show the following:

Branch 'release/24.02' of project 'utilities/ktrip' is not cleared for signing. Skipping.

Then we may have to ask sysadmin to restart the aabsigner service so that it loads the updated project settings.

Summary

In this part of the tutorial we have configured the CI/CD system to create an Android App Bundle (AAB) of KTrip on the release/24.02 branch. We have signed the AAB with the help of the CI/CD system and downloaded the signed AAB.

See the for more information about the available CI/CD job templates.

We will now configure our CI/CD system, so that it allows signing the AAB created by the CI/CD pipeline. We want to sign the AAB created for the 24.02 release branch. Project branches are cleared for AAB signing by adding them to the in the ci-utilities repository. To clear the 24.02 release branch of KTrip for AAB signing we add the following to aabsigner-projects.yaml:

See the documentation of the for details.

Android App Bundle
KTrip
documentation of our CI/CD pipelines
project settings of the aabsigner
aabsigner's project settings