diff --git a/cicd/stages/build.yml b/cicd/stages/build.yml
index 5d2bd29e1cab327638e4555ea5c14a71464e24bc..a4dd1e13d2ac9ca4631107bc664f52dcd5919ab2 100644
--- a/cicd/stages/build.yml
+++ b/cicd/stages/build.yml
@@ -1,5 +1,53 @@
 # QDS_CI_BUILD_QT_VERSION_ANDROID and QDS_CI_BUILD_QT_VERSION_WASM are the tags for the docker images.
 # https://git.qt.io/design-studio/maintenance/docker-images/container_registry
+.build-components: &build-components
+  - pushd 3rdparty/qtquickdesigner-components
+  - |
+    cmake \
+    -S . \
+    -G Ninja \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DCMAKE_TOOLCHAIN_FILE=${QDS_CI_JOB_QT_ANDROID_PATH}/lib/cmake/Qt6/qt.toolchain.cmake \
+    -DANDROID_SDK_ROOT=${DOCKER_ENV_ANDROID_SDK_ROOT} \
+    -DANDROID_NDK_ROOT=${DOCKER_ENV_ANDROID_NDK_ROOT} \
+    -DQT_HOST_PATH=${DOCKER_ENV_QT_PATH_LINUX_GCC_64} \
+    -DFLOWVIEW_AUTO_QMLDIR=ON \
+    -DCMAKE_INSTALL_PREFIX=${QDS_CI_JOB_QT_ANDROID_PATH}
+  - cmake --build .
+  - cmake --install .
+  - popd
+
+.build-android-apps: &build-android-apps
+  - |
+    cmake \
+    -S . \
+    -B ${QDS_CI_JOB_BUILD_PATH} \
+    -G Ninja \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DCMAKE_TOOLCHAIN_FILE=${QDS_CI_JOB_QT_ANDROID_PATH}/lib/cmake/Qt6/qt.toolchain.cmake \
+    -DANDROID_SDK_ROOT=${DOCKER_ENV_ANDROID_SDK_ROOT} \
+    -DANDROID_NDK_ROOT=${DOCKER_ENV_ANDROID_NDK_ROOT} \
+    -DQT_HOST_PATH=${DOCKER_ENV_QT_PATH_LINUX_GCC_64} \
+    -DCMAKE_INSTALL_PREFIX=${QDS_CI_JOB_QT_ANDROID_PATH} \
+    -DANDROID_OPENSSL_PATH=${QDS_CI_JOB_OPENSSL_PATH} \
+    -DBUILD_EXAMPLES=OFF
+  - cmake --build ${QDS_CI_JOB_BUILD_PATH} --target aab
+
+.copy-and-sign-apks: &copy-and-sign-apks
+  - cp -r ${QDS_CI_JOB_BUILD_PATH}/src/android-build/build/outputs/apk/release/* ${QDS_CI_JOB_ARTIFACTS_PATH_APP}
+  - cp -r ${QDS_CI_JOB_BUILD_PATH}/tests/android-build/build/outputs/apk/release/* ${QDS_CI_JOB_ARTIFACTS_PATH_TEST}
+  - echo ${QDS_VAR_PASS} | ${DOCKER_ENV_ANDROID_SDK_ROOT}/build-tools/30.0.3/apksigner sign -verbose -ks ${CI_PROJECT_DIR}/cicd/android/android_release.keystore -out ${QDS_CI_JOB_ARTIFACTS_PATH_APP}/android-build-release.apk ${QDS_CI_JOB_ARTIFACTS_PATH_APP}/android-build-release-unsigned.apk
+  - echo ${QDS_VAR_PASS} | ${DOCKER_ENV_ANDROID_SDK_ROOT}/build-tools/30.0.3/apksigner sign -verbose -ks ${CI_PROJECT_DIR}/cicd/android/android_release.keystore -out ${QDS_CI_JOB_ARTIFACTS_PATH_TEST}/android-build-release.apk ${QDS_CI_JOB_ARTIFACTS_PATH_TEST}/android-build-release-unsigned.apk
+  - rm -f ${QDS_CI_JOB_ARTIFACTS_PATH_APP}/android-build-release-unsigned.apk ${QDS_CI_JOB_ARTIFACTS_PATH_TEST}/android-build-release-unsigned.apk
+
+.copy-and-sign-aab: &copy-and-sign-aab
+  - |
+    if [[ -n ${CI_COMMIT_TAG} ]];
+    then
+      cp -r ${QDS_CI_JOB_BUILD_PATH}/src/android-build/build/outputs/bundle/release/* ${QDS_CI_JOB_ARTIFACTS_PATH_APP}
+      /usr/bin/jarsigner -keystore ${CI_PROJECT_DIR}/cicd/android/android_release.keystore ${QDS_CI_JOB_ARTIFACTS_PATH_APP}/android-build-release.aab designviewer -storepass ${QDS_VAR_PASS}
+    fi
+
 build-android:
   extends: .pipeline_common
   stage: build
@@ -18,50 +66,19 @@ build-android:
   variables:
     QDS_CI_JOB_BUILD_PATH: "${QDS_CI_CACHE_PATH}/${QDS_CI_JOB_TARGET_ARCH}/build"
     QDS_CI_JOB_TARGET_PLATFORM: "android"
-    QDS_CI_JOB_ARTIFACTS_PATH: ${QDS_CI_ARTIFACTS_PATH}/${QDS_CI_JOB_TARGET_PLATFORM}/${QDS_CI_JOB_TARGET_ARCH}
+    QDS_CI_JOB_ARTIFACTS_PATH: ${QDS_CI_ARTIFACTS_PATH}/${QDS_CI_JOB_TARGET_ARCH}
     QDS_CI_JOB_ARTIFACTS_PATH_APP: ${QDS_CI_JOB_ARTIFACTS_PATH}/app
     QDS_CI_JOB_ARTIFACTS_PATH_TEST: ${QDS_CI_JOB_ARTIFACTS_PATH}/test
-    QDS_CI_JOB_QT_ANDROID_PATH: "${QDS_CI_QT_PATH}/${QDS_CI_QT_VERSION}/${QDS_CI_JOB_TARGET_PLATFORM}_${QDS_CI_JOB_TARGET_ARCH}"
   artifacts:
-    name: design-viewer-${CI_JOB_ID}-qt${QDS_CI_QT_VERSION}-${QDS_CI_JOB_TARGET_PLATFORM}-${QDS_CI_JOB_TARGET_ARCH}
+    name: qt_ui_viewer-${CI_JOB_ID}-qt${QDS_CI_QT_VERSION}-${QDS_CI_JOB_TARGET_ARCH}
     expose_as: "build-artifacts"
     paths:
       - ${QDS_CI_ARTIFACTS_PATH}
+    expire_in: 1 week
   script:
     - mkdir -p ${QDS_CI_JOB_ARTIFACTS_PATH_APP} ${QDS_CI_JOB_ARTIFACTS_PATH_TEST}
-    - ls -l ${QDS_CI_JOB_OPENSSL_PATH}
-    - pushd 3rdparty/qtquickdesigner-components
-    - export
-    - |
-      cmake \
-      -S . \
-      -G Ninja \
-      -DCMAKE_BUILD_TYPE=Release \
-      -DCMAKE_TOOLCHAIN_FILE=${DOCKER_ENV_QT_PATH_WITH_VERSION}/${QDS_CI_JOB_TARGET_PLATFORM}_${QDS_CI_JOB_TARGET_ARCH}/lib/cmake/Qt6/qt.toolchain.cmake \
-      -DANDROID_SDK_ROOT=${DOCKER_ENV_ANDROID_SDK_ROOT} \
-      -DANDROID_NDK_ROOT=${DOCKER_ENV_ANDROID_NDK_ROOT} \
-      -DQT_HOST_PATH=${DOCKER_ENV_QT_PATH_LINUX_GCC_64} \
-      -DCMAKE_INSTALL_PREFIX=${QDS_CI_JOB_QT_ANDROID_PATH} \
-      -DFLOWVIEW_AUTO_QMLDIR=ON
-    - cmake --build .
-    - cmake --install .
-    - popd
-    - |
-      cmake \
-      -S . \
-      -B ${QDS_CI_JOB_BUILD_PATH} \
-      -G Ninja \
-      -DCMAKE_BUILD_TYPE=Release \
-      -DCMAKE_TOOLCHAIN_FILE=${DOCKER_ENV_QT_PATH_WITH_VERSION}/${QDS_CI_JOB_TARGET_PLATFORM}_${QDS_CI_JOB_TARGET_ARCH}/lib/cmake/Qt6/qt.toolchain.cmake \
-      -DANDROID_SDK_ROOT=${DOCKER_ENV_ANDROID_SDK_ROOT} \
-      -DANDROID_NDK_ROOT=${DOCKER_ENV_ANDROID_NDK_ROOT} \
-      -DQT_HOST_PATH=${DOCKER_ENV_QT_PATH_LINUX_GCC_64} \
-      -DCMAKE_INSTALL_PREFIX=${QDS_CI_JOB_QT_ANDROID_PATH} \
-      -DANDROID_OPENSSL_PATH=${QDS_CI_JOB_OPENSSL_PATH} \
-      -DBUILD_EXAMPLES=OFF
-    - cmake --build ${QDS_CI_JOB_BUILD_PATH} --target all
-    - cp -r ${QDS_CI_JOB_BUILD_PATH}/src/android-build/build/outputs/apk/release/* ${QDS_CI_JOB_ARTIFACTS_PATH_APP}
-    - cp -r ${QDS_CI_JOB_BUILD_PATH}/tests/android-build/build/outputs/apk/release/* ${QDS_CI_JOB_ARTIFACTS_PATH_TEST}
-    - echo designviewer | ${DOCKER_ENV_ANDROID_SDK_ROOT}/build-tools/30.0.3/apksigner sign -verbose -ks ${CI_PROJECT_DIR}/cicd/android/android_release.keystore -out ${QDS_CI_JOB_ARTIFACTS_PATH_APP}/android-build-release.apk ${QDS_CI_JOB_ARTIFACTS_PATH_APP}/android-build-release-unsigned.apk
-    - echo designviewer | ${DOCKER_ENV_ANDROID_SDK_ROOT}/build-tools/30.0.3/apksigner sign -verbose -ks ${CI_PROJECT_DIR}/cicd/android/android_release.keystore -out ${QDS_CI_JOB_ARTIFACTS_PATH_TEST}/android-build-release.apk ${QDS_CI_JOB_ARTIFACTS_PATH_TEST}/android-build-release-unsigned.apk
-    - rm -f ${QDS_CI_JOB_ARTIFACTS_PATH_APP}/android-build-release-unsigned.apk ${QDS_CI_JOB_ARTIFACTS_PATH_TEST}/android-build-release-unsigned.apk
+    - export QDS_CI_JOB_QT_ANDROID_PATH="${DOCKER_ENV_QT_PATH_WITH_VERSION}/android_${QDS_CI_JOB_TARGET_ARCH}"
+    - *build-components
+    - *build-android-apps
+    - *copy-and-sign-apks
+    - *copy-and-sign-aab
diff --git a/cicd/stages/release.yml b/cicd/stages/release.yml
index 9397cbb0dbf345653513f9d3472e43b0b31fb794..3e06feb1098cb14ddf60f2d33d66caff7a8f156b 100644
--- a/cicd/stages/release.yml
+++ b/cicd/stages/release.yml
@@ -8,27 +8,29 @@ create-packages:
     - job: test-x86_64
       optional: false
       artifacts: true
+    - job: build-android
+      optional: false
+      artifacts: true
   variables:
     QDS_PACKAGE_URL: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/qt-ui-viewer/${CI_COMMIT_TAG}"
+    GIT_SUBMODULE_STRATEGY: none
   script:
     - apk add tar curl
-    - cd ${QDS_CI_ARTIFACTS_PATH_APP}
+    - echo ${QDS_CI_ARTIFACTS_PATH}; ls -l ${QDS_CI_ARTIFACTS_PATH}
+    - ls -l ${QDS_CI_ARTIFACTS_PATH}/*
+    - cd ${QDS_CI_ARTIFACTS_PATH}
     - |
-      for platform in $(ls); do
-        echo "Creating packages for platform $platform"
-        cd "$platform"
-        for arch in $(ls); do
-            echo "Running for $platform-$arch. Compressing..."
-            # app folder contains the apk for the app
-            # test folder contains the apk for the tests
-            # we only need to compress the app folder
-            cd "$arch/app"
-            tar -czf "$platform-$arch.tar.gz" *
-            echo "Uploading $platform-$arch.tar.gz to GitLab Package Registry"
-            curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file "${platform}-${arch}.tar.gz" ${QDS_PACKAGE_URL}/qt-ui-viewer-${CI_COMMIT_TAG}-qt${QDS_CI_QT_VERSION}-${platform}-${arch}.tar.gz
-            cd ..
-        done
-        cd ..
+      for arch in $(ls); do
+          echo "Running for ${arch}. Compressing..."
+          # app folder contains the apk for the app
+          # test folder contains the apk for the tests
+          # we only need to compress the app folder
+          current_dir=$(pwd)
+          cd "${arch}/app"
+          tar -czf "${arch}.tar.gz" *
+          echo "Uploading ${arch}.tar.gz to GitLab Package Registry"
+          curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file "${arch}.tar.gz" ${QDS_PACKAGE_URL}/qt-ui-viewer-${CI_COMMIT_TAG}-qt${QDS_CI_QT_VERSION}-${arch}.tar.gz
+          cd ${current_dir}
       done
   artifacts:
     name: qt-ui-viewer-${CI_JOB_ID}-qt${QDS_CI_QT_VERSION}
@@ -50,6 +52,7 @@ create-release:
     QDS_PACKAGE_URL: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/qt-ui-viewer/${CI_COMMIT_TAG}"
     QDS_RELEASE_NAME: "Qt UI Viewer - ${CI_COMMIT_TAG}"
     QDS_RELEASE_DESCRIPTION: "This version is built with Qt-${QDS_CI_QT_VERSION}."
+    GIT_SUBMODULE_STRATEGY: none
   release:
     name: ${QDS_RELEASE_NAME}
     description: ${QDS_RELEASE_DESCRIPTION}
diff --git a/cicd/stages/test.yml b/cicd/stages/test.yml
index 4912a8ba331069d62ff16ab6d39469cd285a1593..9fa8a66e3087c6c47bfbe81f2a1925f1bfed11f6 100644
--- a/cicd/stages/test.yml
+++ b/cicd/stages/test.yml
@@ -17,14 +17,14 @@ test-x86_64:
       export PATH=$PATH:${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/
       export PATH=$PATH:${ANDROID_SDK_ROOT}/emulator
       export PATH=$PATH:${ANDROID_SDK_ROOT}/platform-tools
-    - cd ${QDS_CI_ARTIFACTS_PATH}/android/x86_64/test || exit 1
+    - cd ${QDS_CI_ARTIFACTS_PATH}/x86_64/test || exit 1
     - mkdir -p ${QDS_CI_JOB_TEST_RESULTS_PATH}
     - adb install -r -g android-build-release.apk
-    - adb shell "run-as io.qt.qtuiviewer.test rm -rf /data/data/io.qt.qtuiviewer.test/files/output.junitxml"
-    - adb shell am start -e applicationArguments "'-o output.junitxml,junitxml'" -n io.qt.qtuiviewer.test/org.qtproject.qt.android.bindings.QtActivity
+    - adb shell "run-as io.qt.qtdesignviewer.test rm -rf /data/data/io.qt.qtdesignviewer.test/files/output.junitxml"
+    - adb shell am start -e applicationArguments "'-o output.junitxml,junitxml'" -n io.qt.qtdesignviewer.test/org.qtproject.qt.android.bindings.QtActivity
     - |
       counter=0
-      while [ -z "$(adb shell pidof -s io.qt.qtuiviewer.test)" ]; do
+      while [ -z "$(adb shell pidof -s io.qt.qtdesignviewer.test)" ]; do
         echo "Waiting for test to start"
         sleep 0.1
         counter=$((counter+1))
@@ -33,12 +33,12 @@ test-x86_64:
           exit 1
         fi
       done
-    - PID_OF_TEST=$(adb shell pidof -s io.qt.qtuiviewer.test)
+    - PID_OF_TEST=$(adb shell pidof -s io.qt.qtdesignviewer.test)
     - 'echo "PID of test: ${PID_OF_TEST}"'
     - |
       counter=0
-      while [ -n "$(adb shell pidof -s io.qt.qtuiviewer.test)" ]; do
-        echo "Waiting for test to finish with PID ${PID_OF_TEST}"
+      while [ -n "$(adb shell pidof -s io.qt.qtdesignviewer.test)" ]; do
+        echo "Waiting for test to finish"
         sleep 1
         counter=$((counter+1))
         if [ $counter -gt 180 ]; then
@@ -47,8 +47,8 @@ test-x86_64:
         fi
       done
     - adb logcat -d --pid=${PID_OF_TEST} > ${QDS_CI_JOB_TEST_RESULTS_PATH}/logcat.txt
-    - adb shell "run-as io.qt.qtuiviewer.test cat /data/data/io.qt.qtuiviewer.test/files/output.junitxml" > output.junit.xml
-    - adb uninstall io.qt.qtuiviewer.test
+    - adb shell "run-as io.qt.qtdesignviewer.test cat /data/data/io.qt.qtdesignviewer.test/files/output.junitxml" > output.junit.xml
+    - adb uninstall io.qt.qtdesignviewer.test
     - mv output.junit.xml ${QDS_CI_JOB_TEST_RESULTS_PATH}/test.junit.xml
     - chmod +x ${CI_PROJECT_DIR}/tests/scripts/get_test_result.sh
     - ${CI_PROJECT_DIR}/tests/scripts/get_test_result.sh ${QDS_CI_JOB_TEST_RESULTS_PATH}/test.junit.xml
diff --git a/src/backend/importdummy.qml b/src/backend/importdummy.qml
index f0b1bc230de29f5643a4782b10cd9806d23627c3..cb75b90a43c052262c8814ef6a4cad3d2af710e6 100644
--- a/src/backend/importdummy.qml
+++ b/src/backend/importdummy.qml
@@ -29,7 +29,6 @@ import QtQuickUltralite.Extras
 import QtQuickUltralite.Layers
 
 import FlowView
-
 import Qt.labs.folderlistmodel
 
 import QtWebSockets
diff --git a/src/ui/main.qml b/src/ui/main.qml
index 0093041475f8d50a6a9d9a9caf85addfd71aec25..5d00d420ebce5231a8a7836751d514643989df20 100644
--- a/src/ui/main.qml
+++ b/src/ui/main.qml
@@ -216,7 +216,7 @@ Rectangle {
                     Layout.fillWidth: true
                     checkable: true
                     autoExclusive: true
-                    visible: false;
+                    visible: false
                     onClicked: {
                         stackLayout.currentIndex = 3
                         drawer.close()
diff --git a/tests/android/AndroidManifest.xml b/tests/android/AndroidManifest.xml
index e3ad0a2c7b8c5670e4502a84c2438cd9cc7508a2..0af4173e5fa084b5b996dec260ffd1b2a18d6fe6 100644
--- a/tests/android/AndroidManifest.xml
+++ b/tests/android/AndroidManifest.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="io.qt.qtuiviewer.test"
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="io.qt.qtdesignviewer.test"
     android:installLocation="auto" android:versionCode="1" android:versionName="1">
     <!-- %%INSERT_PERMISSIONS -->
     <!-- %%INSERT_FEATURES -->