@@ -79,6 +79,10 @@ ba_log "Detected Codename One version $CN1_VERSION"
7979
8080WORK_DIR=" $TMPDIR /cn1-hello-android"
8181rm -rf " $WORK_DIR " ; mkdir -p " $WORK_DIR "
82+ ARTIFACTS_DIR=" $WORK_DIR /artifacts"
83+ mkdir -p " $ARTIFACTS_DIR "
84+ TEST_LIST_FILE=" $ARTIFACTS_DIR /tests.txt"
85+ > " $TEST_LIST_FILE "
8286
8387GROUP_ID=" com.codenameone.examples"
8488ARTIFACT_ID=" hello-codenameone"
@@ -191,6 +195,25 @@ done < <(find "$APP_DIR" -type f -name pom.xml -print0)
191195# 5) Build with the property set so any lingering refs resolve to the local snapshot
192196EXTRA_MVN_ARGS+=(" -Dcodenameone.version=${CN1_VERSION} " )
193197
198+ # --- Record discovered unit tests ---
199+ while IFS= read -r -d ' ' TEST_FILE; do
200+ REL_PATH=" ${TEST_FILE# $APP_DIR / } "
201+ REL_PATH=" ${REL_PATH#*/ src/ test/ java/ } "
202+ CLASS_NAME=" ${REL_PATH% .java} "
203+ CLASS_NAME=" ${CLASS_NAME// \/ / .} "
204+ if [ -n " $CLASS_NAME " ]; then
205+ echo " $CLASS_NAME " >> " $TEST_LIST_FILE "
206+ fi
207+ done < <( find " $APP_DIR " -path " */src/test/java/*.java" -print0)
208+
209+ if [ ! -s " $TEST_LIST_FILE " ]; then
210+ rm -f " $TEST_LIST_FILE "
211+ ba_log " Warning: no unit test sources were discovered"
212+ else
213+ ba_log " Recorded unit test classes:"
214+ sed ' s/^/[build-android-app] /' " $TEST_LIST_FILE "
215+ fi
216+
194217# (Optional) quick non-fatal checks
195218xmlstarlet sel -N " $NS " -t -v " /mvn:project/mvn:properties/mvn:codenameone.version" -n " $ROOT_POM " || true
196219xmlstarlet sel -N " $NS " -t -c " /mvn:project/mvn:build/mvn:plugins" -n " $ROOT_POM " | head -n 60 || true
@@ -282,4 +305,59 @@ export JAVA_HOME="$ORIGINAL_JAVA_HOME"
282305
283306APK_PATH=$( find " $GRADLE_PROJECT_DIR " -path " */outputs/apk/debug/*.apk" | head -n 1 || true)
284307[ -n " $APK_PATH " ] || { ba_log " Gradle build completed but no APK was found" >&2 ; exit 1; }
285- ba_log " Successfully built Android APK at $APK_PATH "
308+ FINAL_APP_APK=" $ARTIFACTS_DIR /${ARTIFACT_ID} -debug.apk"
309+ cp " $APK_PATH " " $FINAL_APP_APK "
310+ ba_log " Successfully built Android APK at $APK_PATH "
311+ ba_log " Copied Android APK to $FINAL_APP_APK "
312+
313+ ba_log " Building Android unit test APK"
314+ rm -rf " $APP_DIR /android/target"
315+ xvfb-run -a " ${MAVEN_CMD[@]} " -q -f " $APP_DIR /pom.xml" package \
316+ -DskipTests \
317+ -Dcodename1.platform=android \
318+ -Dcodename1.buildTarget=android-source \
319+ -Dcodename1.arg.build.unitTest=1 \
320+ -Dopen=false \
321+ " ${EXTRA_MVN_ARGS[@]} "
322+
323+ GRADLE_PROJECT_DIR=$( find " $APP_DIR /android/target" -maxdepth 2 -type d -name " *-android-source" | head -n 1 || true)
324+ [ -n " $GRADLE_PROJECT_DIR " ] || { ba_log " Failed to locate generated Android project for unit tests" >&2 ; exit 1; }
325+
326+ ba_log " Invoking Gradle build for unit test project in $GRADLE_PROJECT_DIR "
327+ chmod +x " $GRADLE_PROJECT_DIR /gradlew"
328+ ORIGINAL_JAVA_HOME=" $JAVA_HOME "
329+ export JAVA_HOME=" $JAVA17_HOME "
330+ (
331+ cd " $GRADLE_PROJECT_DIR "
332+ if command -v sdkmanager > /dev/null 2>&1 ; then
333+ yes | sdkmanager --licenses > /dev/null 2>&1 || true
334+ elif [ -x " $ANDROID_SDK_ROOT /cmdline-tools/latest/bin/sdkmanager" ]; then
335+ yes | " $ANDROID_SDK_ROOT /cmdline-tools/latest/bin/sdkmanager" --licenses > /dev/null 2>&1 || true
336+ fi
337+ ./gradlew --no-daemon assembleDebug
338+ )
339+ export JAVA_HOME=" $ORIGINAL_JAVA_HOME "
340+
341+ UNIT_TEST_APK_PATH=$( find " $GRADLE_PROJECT_DIR " -path " */outputs/apk/debug/*.apk" | head -n 1 || true)
342+ [ -n " $UNIT_TEST_APK_PATH " ] || { ba_log " Gradle unit test build completed but no APK was found" >&2 ; exit 1; }
343+ FINAL_TEST_APK=" $ARTIFACTS_DIR /${ARTIFACT_ID} -tests-debug.apk"
344+ cp " $UNIT_TEST_APK_PATH " " $FINAL_TEST_APK "
345+ ba_log " Successfully built Android unit test APK at $UNIT_TEST_APK_PATH "
346+ ba_log " Copied Android unit test APK to $FINAL_TEST_APK "
347+
348+ TESTS_METADATA=$( find " $APP_DIR " -name tests.dat | head -n 1 || true)
349+ if [ -n " $TESTS_METADATA " ]; then
350+ cp " $TESTS_METADATA " " $ARTIFACTS_DIR /tests.dat"
351+ ba_log " Copied test metadata to $ARTIFACTS_DIR /tests.dat"
352+ else
353+ ba_log " Warning: tests.dat metadata file not found"
354+ fi
355+
356+ if [ -n " ${GITHUB_OUTPUT:- } " ]; then
357+ {
358+ echo " artifact_dir=$ARTIFACTS_DIR "
359+ echo " app_apk=$( basename " $FINAL_APP_APK " ) "
360+ echo " test_apk=$( basename " $FINAL_TEST_APK " ) "
361+ echo " package_name=$PACKAGE_NAME "
362+ } >> " $GITHUB_OUTPUT "
363+ fi
0 commit comments