483483
484484chmod +x " $GRADLE_PROJECT_DIR /gradlew"
485485
486- ba_log " Inspecting Gradle application identifiers"
487- if APP_PROPERTIES_RAW=$( cd " $GRADLE_PROJECT_DIR " && ./gradlew -q :app:properties 2> /dev/null) ; then
488- printf ' %s\n' " $APP_PROPERTIES_RAW " | grep -E ' ^(applicationId|testApplicationId|namespace):' | \
489- sed ' s/^/[build-android-app] props: /'
490- APP_ID=$( printf ' %s\n' " $APP_PROPERTIES_RAW " | awk -F' : ' ' /^applicationId:/{print $2; exit}' )
491- NS_VALUE=$( printf ' %s\n' " $APP_PROPERTIES_RAW " | awk -F' : ' ' /^namespace:/{print $2; exit}' )
492- PROPS_MODIFIED=0
493- if [ -n " $APP_ID " ] && [ " $APP_ID " != " $PACKAGE_NAME " ]; then
494- ba_log " Patching applicationId -> $PACKAGE_NAME "
495- awk -v appid=" $PACKAGE_NAME " '
496- BEGIN{inDc=0;done=0}
497- /^\s*defaultConfig\s*\{/ {inDc=1}
498- inDc && /^\s*applicationId\s+/ {print " applicationId \""appid"\""; done=1; next}
499- inDc && /^\s*}/ {
500- if(!done){print " applicationId \""appid"\""; done=1}
501- inDc=0
502- }
503- {print}
504- ' " $APP_BUILD_GRADLE " > " $APP_BUILD_GRADLE .tmp" && mv " $APP_BUILD_GRADLE .tmp" " $APP_BUILD_GRADLE "
505- PROPS_MODIFIED=1
506- fi
507- if [ -z " $NS_VALUE " ] || [ " $NS_VALUE " != " $PACKAGE_NAME " ]; then
508- ba_log " Patching namespace -> $PACKAGE_NAME "
509- awk -v ns=" $PACKAGE_NAME " '
510- BEGIN{inAndroid=0;done=0}
511- /^android\s*\{/ {inAndroid=1}
512- inAndroid && /^\s*namespace\s+/ {print " namespace \""ns"\""; done=1; next}
513- inAndroid && /^\s*}/ {
514- if(inAndroid && !done){print " namespace \""ns"\""; done=1}
515- inAndroid=0
516- }
517- {print}
518- ' " $APP_BUILD_GRADLE " > " $APP_BUILD_GRADLE .tmp" && mv " $APP_BUILD_GRADLE .tmp" " $APP_BUILD_GRADLE "
519- PROPS_MODIFIED=1
520- fi
521- if [ " $PROPS_MODIFIED " -eq 1 ]; then
522- if APP_PROPERTIES_RAW=$( cd " $GRADLE_PROJECT_DIR " && ./gradlew -q :app:properties 2> /dev/null) ; then
523- printf ' %s\n' " $APP_PROPERTIES_RAW " | grep -E ' ^(applicationId|testApplicationId|namespace):' | \
524- sed ' s/^/[build-android-app] props (post-patch): /'
525- else
526- ba_log " Warning: unable to re-query :app:properties after patch" >&2
527- fi
528- fi
529- APP_ID=$( printf ' %s\n' " $APP_PROPERTIES_RAW " | awk -F' : ' ' /^applicationId:/{print $2; exit}' )
530- NS_VALUE=$( printf ' %s\n' " $APP_PROPERTIES_RAW " | awk -F' : ' ' /^namespace:/{print $2; exit}' )
531- if [ -n " $APP_ID " ] && [ " $APP_ID " != " $PACKAGE_NAME " ]; then
532- ba_log " ERROR: applicationId=$APP_ID does not match Codename One package $PACKAGE_NAME " >&2
533- exit 1
534- fi
535- if [ -n " $NS_VALUE " ] && [ " $NS_VALUE " != " $PACKAGE_NAME " ]; then
536- ba_log " ERROR: namespace=$NS_VALUE does not match Codename One package $PACKAGE_NAME " >&2
537- exit 1
538- fi
539- else
540- ba_log " Warning: unable to query :app:properties via Gradle" >&2
541- fi
542-
543486GRADLE_UPDATE_OUTPUT=" $( " $SCRIPT_DIR /update_android_ui_test_gradle.py" " $APP_BUILD_GRADLE " ) "
544487if [ -n " $GRADLE_UPDATE_OUTPUT " ]; then
545488 while IFS= read -r line; do
@@ -1075,34 +1018,6 @@ if [ "$ASSEMBLE_EXIT_CODE" -ne 0 ]; then
10751018 exit 1
10761019fi
10771020
1078- APP_APK=" $( find " $GRADLE_PROJECT_DIR /app/build/outputs/apk/debug" -maxdepth 1 -name ' *-debug.apk' | head -n1 || true) "
1079- TEST_APK=" $( find " $GRADLE_PROJECT_DIR /app/build/outputs/apk/androidTest/debug" -maxdepth 1 -name ' *-debug-androidTest.apk' | head -n1 || true) "
1080-
1081- if [ -z " $APP_APK " ] || [ ! -f " $APP_APK " ]; then
1082- ba_log " App APK not found after assemble tasks" >&2
1083- stop_emulator
1084- exit 1
1085- fi
1086- if [ -z " $TEST_APK " ] || [ ! -f " $TEST_APK " ]; then
1087- ba_log " androidTest APK not found after assemble tasks" >&2
1088- stop_emulator
1089- exit 1
1090- fi
1091-
1092- MERGED_MANIFEST=" $APP_MODULE_DIR /build/intermediates/packaged_manifests/debug/AndroidManifest.xml"
1093- if [ -f " $MERGED_MANIFEST " ]; then
1094- if grep -q " android:name=\" ${PACKAGE_NAME// ./ \\ .} .${MAIN_NAME} Stub\" " " $MERGED_MANIFEST " ; then
1095- grep -n " ${PACKAGE_NAME// ./ \\ .} .${MAIN_NAME} Stub" " $MERGED_MANIFEST " | sed ' s/^/[build-android-app] merged-manifest: /' || true
1096- else
1097- ba_log " ERROR: merged manifest missing ${MAIN_NAME} Stub declaration"
1098- sed -n ' 1,200p' " $MERGED_MANIFEST " | sed ' s/^/[build-android-app] merged-manifest: /'
1099- stop_emulator
1100- exit 1
1101- fi
1102- else
1103- ba_log " Merged manifest not found at $MERGED_MANIFEST "
1104- fi
1105-
11061021adb_install_retry () {
11071022 local serial=" $1 " apk=" $2 " tries=5
11081023 local attempt
@@ -1121,6 +1036,135 @@ adb_install_retry() {
11211036 return 1
11221037}
11231038
1039+ ba_log " Inspecting Gradle application identifiers"
1040+
1041+ APP_PROPERTIES_RAW=$( cd " $GRADLE_PROJECT_DIR " && ./gradlew -q :app:properties 2> /dev/null || true)
1042+ if [ -n " $APP_PROPERTIES_RAW " ]; then
1043+ printf ' %s\n' " $APP_PROPERTIES_RAW " | grep -E ' ^(applicationId|testApplicationId|namespace):' | sed ' s/^/[build-android-app] props: /'
1044+ fi
1045+
1046+ APP_ID=" $( printf ' %s\n' " $APP_PROPERTIES_RAW " | awk -F' : ' ' /^applicationId:/{print $2; exit}' ) "
1047+ NS_VALUE=" $( printf ' %s\n' " $APP_PROPERTIES_RAW " | awk -F' : ' ' /^namespace:/{print $2; exit}' ) "
1048+
1049+ if [ -f " $APP_BUILD_GRADLE " ]; then
1050+ if [ -n " $APP_ID " ] && [ " $APP_ID " != " $PACKAGE_NAME " ]; then
1051+ ba_log " Patching applicationId -> $PACKAGE_NAME "
1052+ awk -v appid=" $PACKAGE_NAME " '
1053+ BEGIN{inDc=0;had=0}
1054+ /^\s*defaultConfig\s*\{/ {inDc=1}
1055+ inDc && /^\s*applicationId\s+/ {printf " applicationId \"%s\"\n", appid; had=1; next}
1056+ inDc && /^\s*}/ {
1057+ if(!had){printf " applicationId \"%s\"\n", appid; had=1}
1058+ inDc=0
1059+ }
1060+ {print}
1061+ ' " $APP_BUILD_GRADLE " > " $APP_BUILD_GRADLE .tmp" && mv " $APP_BUILD_GRADLE .tmp" " $APP_BUILD_GRADLE "
1062+ fi
1063+
1064+ if [ -z " $NS_VALUE " ] || [ " $NS_VALUE " != " $PACKAGE_NAME " ]; then
1065+ ba_log " Patching namespace -> $PACKAGE_NAME "
1066+ awk -v ns=" $PACKAGE_NAME " '
1067+ BEGIN{inAndroid=0;had=0}
1068+ /^android\s*\{/ {inAndroid=1}
1069+ inAndroid && /^\s*namespace\s+/ {printf " namespace \"%s\"\n", ns; had=1; next}
1070+ inAndroid && /^\s*}/ {
1071+ if(inAndroid && !had){printf " namespace \"%s\"\n", ns; had=1}
1072+ inAndroid=0
1073+ }
1074+ {print}
1075+ ' " $APP_BUILD_GRADLE " > " $APP_BUILD_GRADLE .tmp" && mv " $APP_BUILD_GRADLE .tmp" " $APP_BUILD_GRADLE "
1076+ fi
1077+ fi
1078+
1079+ SRC_SETS=(main debug release)
1080+ FQCN=" ${PACKAGE_NAME} .${MAIN_NAME} Stub"
1081+ for SS in " ${SRC_SETS[@]} " ; do
1082+ MANIFEST_PATH=" $APP_MODULE_DIR /src/$SS /AndroidManifest.xml"
1083+ if [ ! -f " $MANIFEST_PATH " ]; then
1084+ mkdir -p " $( dirname " $MANIFEST_PATH " ) "
1085+ cat > " $MANIFEST_PATH " << EOF
1086+ <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="$PACKAGE_NAME ">
1087+ <application/>
1088+ </manifest>
1089+ EOF
1090+ ba_log " Created $MANIFEST_PATH "
1091+ fi
1092+
1093+ grep -q ' <application' " $MANIFEST_PATH " || sed -i ' s#</manifest># <application/>\n</manifest>#' " $MANIFEST_PATH "
1094+
1095+ if grep -q ' <manifest[^>]*package=' " $MANIFEST_PATH " ; then
1096+ sed -i ' 0,/<manifest[^>]*package=/ s/package="[^"]*"/package="$PACKAGE_NAME"/' " $MANIFEST_PATH "
1097+ else
1098+ sed -i ' 0,/<manifest/ s#<manifest#<manifest package="$PACKAGE_NAME"#' " $MANIFEST_PATH "
1099+ fi
1100+
1101+ if ! grep -q " android:name=\" $FQCN \" " " $MANIFEST_PATH " ; then
1102+ sed -i " /<\/application>/i \n <activity android:name=" $FQCN " android:exported=" false" />" " $MANIFEST_PATH "
1103+ ba_log " Declared $FQCN in $MANIFEST_PATH "
1104+ fi
1105+ done
1106+
1107+ ba_log " Rebuilding :app after identifier and manifest patches"
1108+ set +e
1109+ (
1110+ cd " $GRADLE_PROJECT_DIR "
1111+ ./gradlew --no-daemon :app:assembleDebug :app:assembleDebugAndroidTest -x lint -x test
1112+ )
1113+ PATCH_EXIT=$?
1114+ set -e
1115+ if [ " $PATCH_EXIT " -ne 0 ]; then
1116+ ba_log " Gradle assemble failed after identifier patching"
1117+ stop_emulator
1118+ exit 1
1119+ fi
1120+
1121+ MERGED_MANIFEST=" $APP_MODULE_DIR /build/intermediates/packaged_manifests/debug/AndroidManifest.xml"
1122+ if [ -f " $MERGED_MANIFEST " ]; then
1123+ if grep -q " android:name=\" ${FQCN// ./ \. } \" " " $MERGED_MANIFEST " ; then
1124+ grep -n " ${FQCN// ./ \. } " " $MERGED_MANIFEST " | sed ' s/^/[build-android-app] merged-manifest: /'
1125+ else
1126+ ba_log " ERROR: merged manifest missing $FQCN "
1127+ sed -n ' 1,160p' " $MERGED_MANIFEST " | sed ' s/^/[build-android-app] merged: /'
1128+ stop_emulator
1129+ exit 1
1130+ fi
1131+ else
1132+ ba_log " WARN: merged manifest not found at $MERGED_MANIFEST "
1133+ fi
1134+
1135+ APP_PROPERTIES_RAW=$( cd " $GRADLE_PROJECT_DIR " && ./gradlew -q :app:properties 2> /dev/null || true)
1136+ if [ -n " $APP_PROPERTIES_RAW " ]; then
1137+ printf ' %s\n' " $APP_PROPERTIES_RAW " | grep -E ' ^(applicationId|testApplicationId|namespace):' | sed ' s/^/[build-android-app] props (post-patch): /'
1138+ APP_ID=" $( printf ' %s\n' " $APP_PROPERTIES_RAW " | awk -F' : ' ' /^applicationId:/{print $2; exit}' ) "
1139+ NS_VALUE=" $( printf ' %s\n' " $APP_PROPERTIES_RAW " | awk -F' : ' ' /^namespace:/{print $2; exit}' ) "
1140+ if [ -n " $APP_ID " ] && [ " $APP_ID " != " $PACKAGE_NAME " ]; then
1141+ ba_log " ERROR: applicationId=$APP_ID does not match Codename One package $PACKAGE_NAME " >&2
1142+ stop_emulator
1143+ exit 1
1144+ fi
1145+ if [ -n " $NS_VALUE " ] && [ " $NS_VALUE " != " $PACKAGE_NAME " ]; then
1146+ ba_log " ERROR: namespace=$NS_VALUE does not match Codename One package $PACKAGE_NAME " >&2
1147+ stop_emulator
1148+ exit 1
1149+ fi
1150+ else
1151+ ba_log " Warning: unable to query :app:properties after patching" >&2
1152+ fi
1153+
1154+ APP_APK=" $( find " $GRADLE_PROJECT_DIR /app/build/outputs/apk/debug" -maxdepth 1 -name ' *-debug.apk' | head -n1 || true) "
1155+ TEST_APK=" $( find " $GRADLE_PROJECT_DIR /app/build/outputs/apk/androidTest/debug" -maxdepth 1 -name ' *-debug-androidTest.apk' | head -n1 || true) "
1156+
1157+ if [ -z " $APP_APK " ] || [ ! -f " $APP_APK " ]; then
1158+ ba_log " App APK not found after identifier patch assemble" >&2
1159+ stop_emulator
1160+ exit 1
1161+ fi
1162+ if [ -z " $TEST_APK " ] || [ ! -f " $TEST_APK " ]; then
1163+ ba_log " androidTest APK not found after identifier patch assemble" >&2
1164+ stop_emulator
1165+ exit 1
1166+ fi
1167+
11241168ba_log " Installing app APK: $APP_APK "
11251169if ! adb_install_retry " $EMULATOR_SERIAL " " $APP_APK " ; then
11261170 dump_emulator_diagnostics
@@ -1135,6 +1179,10 @@ if ! adb_install_retry "$EMULATOR_SERIAL" "$TEST_APK"; then
11351179 exit 1
11361180fi
11371181
1182+ " $ADB_BIN " -s " $EMULATOR_SERIAL " shell pm list instrumentation | sed " s/^/[build-android-app] instrumentation: /" || true
1183+ " $ADB_BIN " -s " $EMULATOR_SERIAL " shell pm list packages | grep -E " ${PACKAGE_NAME// ./ \. } |${PACKAGE_NAME// ./ \. } \.test" | sed " s/^/[build-android-app] package: /" || true
1184+ " $ADB_BIN " -s " $EMULATOR_SERIAL " shell cmd package resolve-activity --brief " $PACKAGE_NAME /$FQCN " | sed " s/^/[build-android-app] resolve-stub (pre-test): /" || true
1185+
11381186APP_PACKAGE_PATH=" $( " $ADB_BIN " -s " $EMULATOR_SERIAL " shell pm path " $PACKAGE_NAME " 2> /dev/null | tr -d ' \r' || true) "
11391187if [ -n " $APP_PACKAGE_PATH " ]; then
11401188 printf ' %s\n' " $APP_PACKAGE_PATH " | sed ' s/^/[build-android-app] app-apk: /'
0 commit comments