@@ -12,10 +12,17 @@ ANDROID_ABI=${ANDROID_ABI:-"arm64-v8a"}
1212BUILD_TYPE=${BUILD_TYPE:- " apk" }
1313SIGN_IOS=${SIGN_IOS:- " false" }
1414
15+ # BUILD_VARIANT controls package name and signing:
16+ # - "pr" = app.status.mobile.pr with PR keystore
17+ # - "release" or unset = app.status.mobile with release keystore
18+ BUILD_VARIANT=${BUILD_VARIANT:- " release" }
19+ export BUILD_VARIANT
20+
1521QMAKE_BIN=" ${QMAKE:- qmake} "
1622QMAKE_CONFIG=" CONFIG+=device CONFIG+=release"
1723
1824echo " Building wrapperApp for ${OS} , ${ANDROID_ABI} "
25+ echo " Build variant: ${BUILD_VARIANT} "
1926
2027mkdir -p " ${BUILD_DIR} "
2128cd " ${BUILD_DIR} "
@@ -26,9 +33,9 @@ DESKTOP_VERSION=$(eval cd "$STATUS_DESKTOP" && git describe --tags --dirty="-dir
2633TIMESTAMP=$(( $(date +% s) * 1000 / 60000 ))
2734
2835if [[ -n " ${CHANGE_ID:- } " ]]; then
29- BUILD_VERSION=" ${CHANGE_ID} .${TIMESTAMP} "
36+ BUILD_VERSION=" ${CHANGE_ID} .${TIMESTAMP} "
3037else
31- BUILD_VERSION=" ${TIMESTAMP} "
38+ BUILD_VERSION=" ${TIMESTAMP} "
3239fi
3340
3441echo " Using version: $DESKTOP_VERSION ; build version: $BUILD_VERSION "
@@ -42,84 +49,102 @@ if [[ "${OS}" == "android" ]]; then
4249 echo " Building for Android 35"
4350 ANDROID_PLATFORM=android-35
4451
52+ # Map BUILD_VARIANT to gradle flavor
53+ if [[ " $BUILD_VARIANT " == " pr" ]]; then
54+ GRADLE_FLAVOR=" pr"
55+ OUTPUT_NAME=" StatusPR"
56+ else
57+ GRADLE_FLAVOR=" production"
58+ OUTPUT_NAME=" Status"
59+ fi
60+
61+ echo " Using Gradle flavor: $GRADLE_FLAVOR "
62+ echo " Target name: $OUTPUT_NAME "
63+
4564 " $QMAKE_BIN " " $CWD /../wrapperApp/Status.pro" " $QMAKE_CONFIG " -spec android-clang ANDROID_ABIS=" $ANDROID_ABI " APP_VARIANT=" ${APP_VARIANT} " VERSION=" $DESKTOP_VERSION " -after
4665
4766 # Build the app
4867 make -j" $( nproc) " apk_install_target
4968
50- if [[ " $BUILD_TYPE " == " aab" ]]; then
51- if [[ -z " $KEYSTORE_PATH " || -z " $KEYSTORE_PASSWORD " || -z " $KEY_ALIAS " || -z " $KEY_PASSWORD " ]]; then
52- echo " Error: AAB builds require signing credentials"
53- echo " Required: KEYSTORE_PATH, KEYSTORE_PASSWORD, KEY_ALIAS, KEY_PASSWORD"
54- exit 1
55- fi
69+ # aux-mode copies dependencies AND generates libs.xml
70+ echo " Preparing Android build..."
71+ androiddeployqt \
72+ --input " $BUILD_DIR /android-${OUTPUT_NAME} -deployment-settings.json" \
73+ --output " $BUILD_DIR /android-build" \
74+ --android-platform " $ANDROID_PLATFORM " \
75+ --verbose \
76+ --aux-mode
77+
78+ # Build with gradle directly to use product flavors
79+ CUSTOM_ANDROID=" $CWD /../android/qt${QT_MAJOR} "
80+ ANDROID_BUILD=" $BUILD_DIR /android-build"
81+
82+ # Override with custom Android files (manifest, gradle for flavors, src)
83+ # Keep Qt-generated res/ (including libs.xml) but add our custom resources
84+ cp " $CUSTOM_ANDROID /AndroidManifest.xml" " $ANDROID_BUILD /"
85+ cp " $CUSTOM_ANDROID /build.gradle" " $ANDROID_BUILD /"
86+ cp " $CUSTOM_ANDROID /settings.gradle" " $ANDROID_BUILD /"
87+ cp " $CUSTOM_ANDROID /gradle.properties" " $ANDROID_BUILD /"
88+
89+ # Copy custom res files (icons, styles, etc.) but preserve Qt-generated libs.xml
90+ if [[ -d " $CUSTOM_ANDROID /res" ]]; then
91+ # Copy everything except values/libs.xml (Qt generates that)
92+ find " $CUSTOM_ANDROID /res" -type f ! -name " libs.xml" -exec sh -c '
93+ src="$1"
94+ rel="${src#' " $CUSTOM_ANDROID /res/" ' }"
95+ dest="' " $ANDROID_BUILD /res/" ' $rel"
96+ mkdir -p "$(dirname "$dest")"
97+ cp "$src" "$dest"
98+ ' _ {} \;
99+ fi
56100
57- if [[ ! -f " $KEYSTORE_PATH " ]]; then
58- echo " Error: Keystore file not found at $KEYSTORE_PATH "
59- exit 1
60- fi
101+ if [[ -d " $CUSTOM_ANDROID /src" ]]; then
102+ mkdir -p " $ANDROID_BUILD /src"
103+ cp -r " $CUSTOM_ANDROID /src/" * " $ANDROID_BUILD /src/"
104+ fi
105+
106+ cd " $BUILD_DIR /android-build"
61107
62- echo " Building AAB..."
63- androiddeployqt \
64- --input " $BUILD_DIR /android-Status-deployment-settings.json" \
65- --output " $BUILD_DIR /android-build" \
66- --aab \
67- --release \
68- --android-platform " $ANDROID_PLATFORM "
108+ if [[ " $BUILD_TYPE " == " aab" ]]; then
109+ echo " Building AAB with flavor: $GRADLE_FLAVOR ..."
110+ gradle " bundle${GRADLE_FLAVOR^} Release" --no-daemon
69111
70- OUTPUT_FILE=" $BUILD_DIR /android-build/build/outputs/bundle/release /android-build-release.aab"
112+ OUTPUT_FILE=" $BUILD_DIR /android-build/build/outputs/bundle/${GRADLE_FLAVOR} Release /android-build- ${GRADLE_FLAVOR} -release.aab"
71113 if [[ ! -f " $OUTPUT_FILE " ]]; then
72114 echo " Error: Could not find generated AAB file at $OUTPUT_FILE "
115+ echo " Looking for AAB files..."
116+ find " $BUILD_DIR /android-build/build/outputs" -name " *.aab" 2> /dev/null
73117 exit 1
74118 fi
75119
76- # Sign the AAB file (androiddeployqt --sign does not work for AAB files)
77- " $CWD /android/sign.sh" " $OUTPUT_FILE "
78-
79120 ANDROID_OUTPUT_DIR=" bin/android/qt6"
80121 BIN_DIR_ANDROID=${BIN_DIR:- " $CWD /$ANDROID_OUTPUT_DIR " }
81122 mkdir -p " $BIN_DIR_ANDROID "
82- cp " $OUTPUT_FILE " " $BIN_DIR_ANDROID /Status .aab"
83- echo " Build succeeded. Signed AAB is available at $BIN_DIR_ANDROID /Status .aab"
123+ cp " $OUTPUT_FILE " " $BIN_DIR_ANDROID /${OUTPUT_NAME} .aab"
124+ echo " Build succeeded. AAB is available at $BIN_DIR_ANDROID /${OUTPUT_NAME} .aab"
84125 else
85- # APK build
86- NEEDS_SIGNING=" false"
87- if [[ -n " $KEYSTORE_PATH " && -n " $KEYSTORE_PASSWORD " && -n " $KEY_ALIAS " && -n " $KEY_PASSWORD " ]]; then
88- if [[ -f " $KEYSTORE_PATH " ]]; then
89- NEEDS_SIGNING=" true"
90- fi
91- fi
126+ echo " Building APK with flavor: $GRADLE_FLAVOR ..."
127+ echo " Contents of android-build directory:"
128+ ls -la
129+ gradle " assemble${GRADLE_FLAVOR^} Release" --no-daemon --info --stacktrace
92130
93- if [[ " $NEEDS_SIGNING " == " true" ]]; then
94- echo " Building signed APK..."
95- androiddeployqt \
96- --input " $BUILD_DIR /android-Status-deployment-settings.json" \
97- --output " $BUILD_DIR /android-build" \
98- --apk " $BUILD_DIR /android-build/Status.apk" \
99- --release \
100- --android-platform " $ANDROID_PLATFORM " \
101- --sign " $KEYSTORE_PATH " " $KEY_ALIAS " \
102- --storepass " $KEYSTORE_PASSWORD " \
103- --keypass " $KEY_PASSWORD "
104- else
105- echo " Building unsigned APK..."
106- androiddeployqt \
107- --input " $BUILD_DIR /android-Status-deployment-settings.json" \
108- --output " $BUILD_DIR /android-build" \
109- --apk " $BUILD_DIR /android-build/Status.apk" \
110- --android-platform " $ANDROID_PLATFORM "
131+ OUTPUT_FILE=" $BUILD_DIR /android-build/build/outputs/apk/${GRADLE_FLAVOR} /release/android-build-${GRADLE_FLAVOR} -release.apk"
132+ if [[ ! -f " $OUTPUT_FILE " ]]; then
133+ # Try alternative path
134+ OUTPUT_FILE=" $BUILD_DIR /android-build/build/outputs/apk/${GRADLE_FLAVOR} /release/android-build-${GRADLE_FLAVOR} -release-unsigned.apk"
135+ fi
136+ if [[ ! -f " $OUTPUT_FILE " ]]; then
137+ echo " Error: Could not find generated APK file"
138+ echo " Looking for APK files..."
139+ find " $BUILD_DIR /android-build/build/outputs" -name " *.apk" 2> /dev/null
140+ exit 1
111141 fi
112142
113143 ANDROID_OUTPUT_DIR=" bin/android/qt6"
114144 BIN_DIR_ANDROID=${BIN_DIR:- " $CWD /$ANDROID_OUTPUT_DIR " }
115145 mkdir -p " $BIN_DIR_ANDROID "
116- cp ./android-build/Status.apk " $BIN_DIR_ANDROID /Status.apk"
117-
118- if [[ " $NEEDS_SIGNING " == " true" ]]; then
119- echo " Build succeeded. Signed APK is available at $BIN_DIR_ANDROID /Status.apk"
120- else
121- echo " Build succeeded. Unsigned APK is available at $BIN_DIR_ANDROID /Status.apk"
122- fi
146+ cp " $OUTPUT_FILE " " $BIN_DIR_ANDROID /${OUTPUT_NAME} .apk"
147+ echo " Build succeeded. APK is available at $BIN_DIR_ANDROID /${OUTPUT_NAME} .apk"
123148 fi
124149else
125150 " $QMAKE_BIN " " $CWD /../wrapperApp/Status.pro" " $QMAKE_CONFIG " -spec macx-ios-clang CONFIG+=" $SDK " VERSION=" $DESKTOP_VERSION " -after
0 commit comments