diff --git a/.github/workflows/release-android-snapshot-helper.yml b/.github/workflows/release-android-snapshot-helper.yml index 21ce1f92ba..a38e7d9a9b 100644 --- a/.github/workflows/release-android-snapshot-helper.yml +++ b/.github/workflows/release-android-snapshot-helper.yml @@ -72,10 +72,11 @@ jobs: id: package env: RELEASE_ASSET_DIR: ${{ github.workspace }}/.tmp/release-assets + AGENT_DEVICE_ANDROID_HELPER: snapshot run: | set -euo pipefail mkdir -p "${RELEASE_ASSET_DIR}" - sh ./scripts/package-android-snapshot-helper.sh \ + sh ./scripts/package-android-helper.sh \ "${{ steps.meta.outputs.version }}" \ "${{ steps.meta.outputs.tag }}" \ "${RELEASE_ASSET_DIR}" diff --git a/.gitignore b/.gitignore index e5c3a09358..40ae8f1d57 100644 --- a/.gitignore +++ b/.gitignore @@ -40,5 +40,3 @@ android/snapshot-helper/build/ android/snapshot-helper/dist/ android/ime-helper/build/ android/ime-helper/dist/ -android/multitouch-helper/build/ -android/multitouch-helper/dist/ diff --git a/android/ime-helper/README.md b/android/ime-helper/README.md index 894cc027c7..3c5f14e284 100644 --- a/android/ime-helper/README.md +++ b/android/ime-helper/README.md @@ -21,7 +21,7 @@ verified the same way (bundled npm-packaged dist + version-keyed manifest.json), ```sh VERSION="$(node -p 'require("./package.json").version')" -sh ./scripts/build-android-ime-helper.sh "$VERSION" .tmp/android-ime-helper +AGENT_DEVICE_ANDROID_HELPER=ime sh ./scripts/build-android-helper.sh "$VERSION" .tmp/android-ime-helper ``` ## Run diff --git a/android/snapshot-helper/README.md b/android/snapshot-helper/README.md index 3e87d7e2b2..2cc3fdb4d2 100644 --- a/android/snapshot-helper/README.md +++ b/android/snapshot-helper/README.md @@ -15,7 +15,7 @@ requires a stable signing certificate for `adb install -r` upgrades. ```sh VERSION="$(node -p 'require("./package.json").version')" -sh ./scripts/build-android-snapshot-helper.sh "$VERSION" .tmp/android-snapshot-helper +AGENT_DEVICE_ANDROID_HELPER=snapshot sh ./scripts/build-android-helper.sh "$VERSION" .tmp/android-snapshot-helper ``` The build uses Android SDK command-line tools directly. It expects `ANDROID_HOME` or diff --git a/package.json b/package.json index 0da425b7d9..a36e75606b 100644 --- a/package.json +++ b/package.json @@ -88,14 +88,14 @@ "build:xcuitest:tvos:clean": "pnpm clean:xcuitest:tvos && pnpm build:xcuitest:tvos", "build:xcuitest:visionos": "AGENT_DEVICE_XCUITEST_PLATFORM=visionos sh ./scripts/build-xcuitest-apple.sh", "build:xcuitest:visionos:clean": "pnpm clean:xcuitest:visionos && pnpm build:xcuitest:visionos", - "build:android-snapshot-helper": "sh ./scripts/build-android-snapshot-helper.sh $(node -p \"require('./package.json').version\") .tmp/android-snapshot-helper", - "package:android-snapshot-helper": "sh ./scripts/package-android-snapshot-helper.sh $(node -p \"require('./package.json').version\") v$(node -p \"require('./package.json').version\") .tmp/android-snapshot-helper", - "package:android-snapshot-helper:npm": "rm -rf android/snapshot-helper/dist && sh ./scripts/package-android-snapshot-helper.sh $(node -p \"require('./package.json').version\") v$(node -p \"require('./package.json').version\") android/snapshot-helper/dist", + "build:android-snapshot-helper": "AGENT_DEVICE_ANDROID_HELPER=snapshot sh ./scripts/build-android-helper.sh $(node -p \"require('./package.json').version\") .tmp/android-snapshot-helper", + "package:android-snapshot-helper": "AGENT_DEVICE_ANDROID_HELPER=snapshot sh ./scripts/package-android-helper.sh $(node -p \"require('./package.json').version\") v$(node -p \"require('./package.json').version\") .tmp/android-snapshot-helper", + "package:android-snapshot-helper:npm": "rm -rf android/snapshot-helper/dist && AGENT_DEVICE_ANDROID_HELPER=snapshot sh ./scripts/package-android-helper.sh $(node -p \"require('./package.json').version\") v$(node -p \"require('./package.json').version\") android/snapshot-helper/dist", "package:apple-runner:npm": "node scripts/package-apple-runner-source.mjs", "build:android": "pnpm package:android-snapshot-helper:npm && pnpm package:android-ime-helper:npm", - "build:android-ime-helper": "sh ./scripts/build-android-ime-helper.sh $(node -p \"require('./package.json').version\") .tmp/android-ime-helper", - "package:android-ime-helper": "sh ./scripts/package-android-ime-helper.sh $(node -p \"require('./package.json').version\") .tmp/android-ime-helper", - "package:android-ime-helper:npm": "rm -rf android/ime-helper/dist && sh ./scripts/package-android-ime-helper.sh $(node -p \"require('./package.json').version\") android/ime-helper/dist", + "build:android-ime-helper": "AGENT_DEVICE_ANDROID_HELPER=ime sh ./scripts/build-android-helper.sh $(node -p \"require('./package.json').version\") .tmp/android-ime-helper", + "package:android-ime-helper": "AGENT_DEVICE_ANDROID_HELPER=ime sh ./scripts/package-android-helper.sh $(node -p \"require('./package.json').version\") .tmp/android-ime-helper", + "package:android-ime-helper:npm": "rm -rf android/ime-helper/dist && AGENT_DEVICE_ANDROID_HELPER=ime sh ./scripts/package-android-helper.sh $(node -p \"require('./package.json').version\") android/ime-helper/dist", "build:macos-helper": "swift build -c release --package-path apple/macos-helper", "build:all": "pnpm build:node && pnpm build:xcuitest", "ad": "node bin/agent-device.mjs", diff --git a/scripts/build-android-helper.sh b/scripts/build-android-helper.sh new file mode 100755 index 0000000000..3da4fdd5ba --- /dev/null +++ b/scripts/build-android-helper.sh @@ -0,0 +1,158 @@ +#!/bin/sh +set -eu + +HELPER="${AGENT_DEVICE_ANDROID_HELPER:-}" +if [ -z "$HELPER" ]; then + HELPER="${1:-}" + [ "$#" -ge 1 ] && shift +fi + +if [ "$#" -ne 2 ]; then + echo "Usage: AGENT_DEVICE_ANDROID_HELPER= $0 " >&2 + echo " or: $0 " >&2 + exit 1 +fi + +VERSION="$1" +OUTPUT_DIR="$2" +PROJECT_DIR="$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)" +MIN_SDK=23 +TARGET_SDK=36 +KEYSTORE="$PROJECT_DIR/android/snapshot-helper/debug.keystore" + +# Per-helper config: HELPER_DIR/PACKAGE_NAME/APK name always differ; RUN_TEST_CLASS is +# only set for the snapshot helper (it has a unit test to compile+run); RESOURCE_DIR is +# only set for the ime helper (it has a res/ dir that needs an aapt2 compile pass). +case "$HELPER" in + snapshot) + HELPER_DIR="$PROJECT_DIR/android/snapshot-helper" + PACKAGE_NAME="com.callstack.agentdevice.snapshothelper" + RUN_TEST_CLASS="com.callstack.agentdevice.snapshothelper.PointerEventScheduleTest" + RESOURCE_DIR="" + ;; + ime) + HELPER_DIR="$PROJECT_DIR/android/ime-helper" + PACKAGE_NAME="com.callstack.agentdevice.imehelper" + RUN_TEST_CLASS="" + RESOURCE_DIR="$PROJECT_DIR/android/ime-helper/res" + ;; + *) + echo "Unknown Android helper: '$HELPER' (expected 'snapshot' or 'ime')" >&2 + exit 1 + ;; +esac + +APK_BASENAME="agent-device-android-$HELPER-helper-$VERSION.apk" + +SDK_ROOT="${ANDROID_HOME:-${ANDROID_SDK_ROOT:-}}" +if [ -z "$SDK_ROOT" ] || [ ! -d "$SDK_ROOT" ]; then + echo "ANDROID_HOME or ANDROID_SDK_ROOT must point to an Android SDK" >&2 + exit 1 +fi + +ANDROID_JAR="$SDK_ROOT/platforms/android-$TARGET_SDK/android.jar" +if [ ! -f "$ANDROID_JAR" ]; then + echo "Missing Android platform jar: $ANDROID_JAR" >&2 + exit 1 +fi + +BUILD_TOOLS_DIR="$( + find "$SDK_ROOT/build-tools" -maxdepth 1 -mindepth 1 -type d 2>/dev/null | sort -V | tail -n 1 +)" +if [ -z "$BUILD_TOOLS_DIR" ] || [ ! -x "$BUILD_TOOLS_DIR/aapt2" ]; then + echo "Missing Android build tools under $SDK_ROOT/build-tools" >&2 + exit 1 +fi + +VERSION_CODE="$( + printf '%s\n' "$VERSION" | awk -F. ' + /^[0-9]+[.][0-9]+[.][0-9]+$/ { + print ($1 * 1000000) + ($2 * 1000) + $3 + next + } + { print 1 } + ' +)" + +BUILD_DIR="$HELPER_DIR/build" +CLASSES_DIR="$BUILD_DIR/classes" +TEST_CLASSES_DIR="$BUILD_DIR/test-classes" +DEX_DIR="$BUILD_DIR/dex" +RES_COMPILED_DIR="$BUILD_DIR/res-compiled" +UNSIGNED_APK="$BUILD_DIR/helper-unsigned.apk" +ALIGNED_APK="$BUILD_DIR/helper-aligned.apk" +APK_PATH="$OUTPUT_DIR/$APK_BASENAME" + +rm -rf "$BUILD_DIR" +mkdir -p "$CLASSES_DIR" "$TEST_CLASSES_DIR" "$DEX_DIR" "$RES_COMPILED_DIR" "$OUTPUT_DIR" + +javac \ + --release 11 \ + -classpath "$ANDROID_JAR" \ + -d "$CLASSES_DIR" \ + $(find "$HELPER_DIR/src/main/java" -name '*.java' | sort) + +if [ -n "$RUN_TEST_CLASS" ]; then + javac \ + --release 11 \ + -classpath "$ANDROID_JAR:$CLASSES_DIR" \ + -d "$TEST_CLASSES_DIR" \ + $(find "$HELPER_DIR/src/test/java" -name '*.java' | sort) + + java \ + -classpath "$ANDROID_JAR:$CLASSES_DIR:$TEST_CLASSES_DIR" \ + "$RUN_TEST_CLASS" +fi + +"$BUILD_TOOLS_DIR/d8" \ + --min-api "$MIN_SDK" \ + --classpath "$ANDROID_JAR" \ + --output "$DEX_DIR" \ + $(find "$CLASSES_DIR" -name '*.class' | sort) + +if [ -n "$RESOURCE_DIR" ]; then + "$BUILD_TOOLS_DIR/aapt2" compile \ + --dir "$RESOURCE_DIR" \ + -o "$RES_COMPILED_DIR" + + "$BUILD_TOOLS_DIR/aapt2" link \ + --manifest "$HELPER_DIR/AndroidManifest.xml" \ + -I "$ANDROID_JAR" \ + --min-sdk-version "$MIN_SDK" \ + --target-sdk-version "$TARGET_SDK" \ + --version-code "$VERSION_CODE" \ + --version-name "$VERSION" \ + -R "$RES_COMPILED_DIR"/*.flat \ + -o "$UNSIGNED_APK" +else + "$BUILD_TOOLS_DIR/aapt2" link \ + --manifest "$HELPER_DIR/AndroidManifest.xml" \ + -I "$ANDROID_JAR" \ + --min-sdk-version "$MIN_SDK" \ + --target-sdk-version "$TARGET_SDK" \ + --version-code "$VERSION_CODE" \ + --version-name "$VERSION" \ + -o "$UNSIGNED_APK" +fi + +zip -q -j "$UNSIGNED_APK" "$DEX_DIR/classes.dex" + +"$BUILD_TOOLS_DIR/zipalign" -f 4 "$UNSIGNED_APK" "$ALIGNED_APK" + +if [ ! -f "$KEYSTORE" ]; then + echo "Missing Android helper signing keystore: $KEYSTORE" >&2 + exit 1 +fi + +"$BUILD_TOOLS_DIR/apksigner" sign \ + --ks "$KEYSTORE" \ + --ks-pass pass:android \ + --key-pass pass:android \ + --out "$APK_PATH" \ + "$ALIGNED_APK" + +"$BUILD_TOOLS_DIR/apksigner" verify --min-sdk-version "$MIN_SDK" "$APK_PATH" + +printf 'apk=%s\n' "$APK_PATH" +printf 'package=%s\n' "$PACKAGE_NAME" +printf 'version_code=%s\n' "$VERSION_CODE" diff --git a/scripts/build-android-ime-helper.sh b/scripts/build-android-ime-helper.sh deleted file mode 100755 index 6006b55489..0000000000 --- a/scripts/build-android-ime-helper.sh +++ /dev/null @@ -1,107 +0,0 @@ -#!/bin/sh -set -eu - -if [ "$#" -ne 2 ]; then - echo "Usage: $0 " >&2 - exit 1 -fi - -VERSION="$1" -OUTPUT_DIR="$2" -PROJECT_DIR="$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)" -HELPER_DIR="$PROJECT_DIR/android/ime-helper" -PACKAGE_NAME="com.callstack.agentdevice.imehelper" -MIN_SDK=23 -TARGET_SDK=36 -APK_BASENAME="agent-device-android-ime-helper-$VERSION.apk" - -SDK_ROOT="${ANDROID_HOME:-${ANDROID_SDK_ROOT:-}}" -if [ -z "$SDK_ROOT" ] || [ ! -d "$SDK_ROOT" ]; then - echo "ANDROID_HOME or ANDROID_SDK_ROOT must point to an Android SDK" >&2 - exit 1 -fi - -ANDROID_JAR="$SDK_ROOT/platforms/android-$TARGET_SDK/android.jar" -if [ ! -f "$ANDROID_JAR" ]; then - echo "Missing Android platform jar: $ANDROID_JAR" >&2 - exit 1 -fi - -BUILD_TOOLS_DIR="$( - find "$SDK_ROOT/build-tools" -maxdepth 1 -mindepth 1 -type d 2>/dev/null | sort -V | tail -n 1 -)" -if [ -z "$BUILD_TOOLS_DIR" ] || [ ! -x "$BUILD_TOOLS_DIR/aapt2" ]; then - echo "Missing Android build tools under $SDK_ROOT/build-tools" >&2 - exit 1 -fi - -VERSION_CODE="$( - printf '%s\n' "$VERSION" | awk -F. ' - /^[0-9]+[.][0-9]+[.][0-9]+$/ { - print ($1 * 1000000) + ($2 * 1000) + $3 - next - } - { print 1 } - ' -)" - -BUILD_DIR="$HELPER_DIR/build" -CLASSES_DIR="$BUILD_DIR/classes" -DEX_DIR="$BUILD_DIR/dex" -RES_COMPILED_DIR="$BUILD_DIR/res-compiled" -KEYSTORE="$PROJECT_DIR/android/snapshot-helper/debug.keystore" -UNSIGNED_APK="$BUILD_DIR/helper-unsigned.apk" -ALIGNED_APK="$BUILD_DIR/helper-aligned.apk" -APK_PATH="$OUTPUT_DIR/$APK_BASENAME" - -rm -rf "$BUILD_DIR" -mkdir -p "$CLASSES_DIR" "$DEX_DIR" "$RES_COMPILED_DIR" "$OUTPUT_DIR" - -javac \ - --release 11 \ - -classpath "$ANDROID_JAR" \ - -d "$CLASSES_DIR" \ - $(find "$HELPER_DIR/src/main/java" -name '*.java' | sort) - -"$BUILD_TOOLS_DIR/d8" \ - --min-api "$MIN_SDK" \ - --classpath "$ANDROID_JAR" \ - --output "$DEX_DIR" \ - $(find "$CLASSES_DIR" -name '*.class' | sort) - -# Only this helper has a resource (res/xml/method.xml), so it needs an aapt2 compile pass. -"$BUILD_TOOLS_DIR/aapt2" compile \ - --dir "$HELPER_DIR/res" \ - -o "$RES_COMPILED_DIR" - -"$BUILD_TOOLS_DIR/aapt2" link \ - --manifest "$HELPER_DIR/AndroidManifest.xml" \ - -I "$ANDROID_JAR" \ - --min-sdk-version "$MIN_SDK" \ - --target-sdk-version "$TARGET_SDK" \ - --version-code "$VERSION_CODE" \ - --version-name "$VERSION" \ - -R "$RES_COMPILED_DIR"/*.flat \ - -o "$UNSIGNED_APK" - -zip -q -j "$UNSIGNED_APK" "$DEX_DIR/classes.dex" - -"$BUILD_TOOLS_DIR/zipalign" -f 4 "$UNSIGNED_APK" "$ALIGNED_APK" - -if [ ! -f "$KEYSTORE" ]; then - echo "Missing Android helper signing keystore: $KEYSTORE" >&2 - exit 1 -fi - -"$BUILD_TOOLS_DIR/apksigner" sign \ - --ks "$KEYSTORE" \ - --ks-pass pass:android \ - --key-pass pass:android \ - --out "$APK_PATH" \ - "$ALIGNED_APK" - -"$BUILD_TOOLS_DIR/apksigner" verify --min-sdk-version "$MIN_SDK" "$APK_PATH" - -printf 'apk=%s\n' "$APK_PATH" -printf 'package=%s\n' "$PACKAGE_NAME" -printf 'version_code=%s\n' "$VERSION_CODE" diff --git a/scripts/build-android-snapshot-helper.sh b/scripts/build-android-snapshot-helper.sh deleted file mode 100755 index 6f549817d3..0000000000 --- a/scripts/build-android-snapshot-helper.sh +++ /dev/null @@ -1,111 +0,0 @@ -#!/bin/sh -set -eu - -if [ "$#" -ne 2 ]; then - echo "Usage: $0 " >&2 - exit 1 -fi - -VERSION="$1" -OUTPUT_DIR="$2" -PROJECT_DIR="$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)" -HELPER_DIR="$PROJECT_DIR/android/snapshot-helper" -PACKAGE_NAME="com.callstack.agentdevice.snapshothelper" -MIN_SDK=23 -TARGET_SDK=36 -APK_BASENAME="agent-device-android-snapshot-helper-$VERSION.apk" - -SDK_ROOT="${ANDROID_HOME:-${ANDROID_SDK_ROOT:-}}" -if [ -z "$SDK_ROOT" ] || [ ! -d "$SDK_ROOT" ]; then - echo "ANDROID_HOME or ANDROID_SDK_ROOT must point to an Android SDK" >&2 - exit 1 -fi - -ANDROID_JAR="$SDK_ROOT/platforms/android-$TARGET_SDK/android.jar" -if [ ! -f "$ANDROID_JAR" ]; then - echo "Missing Android platform jar: $ANDROID_JAR" >&2 - exit 1 -fi - -BUILD_TOOLS_DIR="$( - find "$SDK_ROOT/build-tools" -maxdepth 1 -mindepth 1 -type d 2>/dev/null | sort -V | tail -n 1 -)" -if [ -z "$BUILD_TOOLS_DIR" ] || [ ! -x "$BUILD_TOOLS_DIR/aapt2" ]; then - echo "Missing Android build tools under $SDK_ROOT/build-tools" >&2 - exit 1 -fi - -VERSION_CODE="$( - printf '%s\n' "$VERSION" | awk -F. ' - /^[0-9]+[.][0-9]+[.][0-9]+$/ { - print ($1 * 1000000) + ($2 * 1000) + $3 - next - } - { print 1 } - ' -)" - -BUILD_DIR="$HELPER_DIR/build" -CLASSES_DIR="$BUILD_DIR/classes" -TEST_CLASSES_DIR="$BUILD_DIR/test-classes" -DEX_DIR="$BUILD_DIR/dex" -KEYSTORE="$HELPER_DIR/debug.keystore" -UNSIGNED_APK="$BUILD_DIR/helper-unsigned.apk" -ALIGNED_APK="$BUILD_DIR/helper-aligned.apk" -APK_PATH="$OUTPUT_DIR/$APK_BASENAME" - -rm -rf "$BUILD_DIR" -mkdir -p "$CLASSES_DIR" "$TEST_CLASSES_DIR" "$DEX_DIR" "$OUTPUT_DIR" - -javac \ - --release 11 \ - -classpath "$ANDROID_JAR" \ - -d "$CLASSES_DIR" \ - $(find "$HELPER_DIR/src/main/java" -name '*.java' | sort) - -javac \ - --release 11 \ - -classpath "$ANDROID_JAR:$CLASSES_DIR" \ - -d "$TEST_CLASSES_DIR" \ - $(find "$HELPER_DIR/src/test/java" -name '*.java' | sort) - -java \ - -classpath "$ANDROID_JAR:$CLASSES_DIR:$TEST_CLASSES_DIR" \ - com.callstack.agentdevice.snapshothelper.PointerEventScheduleTest - -"$BUILD_TOOLS_DIR/d8" \ - --min-api "$MIN_SDK" \ - --classpath "$ANDROID_JAR" \ - --output "$DEX_DIR" \ - $(find "$CLASSES_DIR" -name '*.class' | sort) - -"$BUILD_TOOLS_DIR/aapt2" link \ - --manifest "$HELPER_DIR/AndroidManifest.xml" \ - -I "$ANDROID_JAR" \ - --min-sdk-version "$MIN_SDK" \ - --target-sdk-version "$TARGET_SDK" \ - --version-code "$VERSION_CODE" \ - --version-name "$VERSION" \ - -o "$UNSIGNED_APK" - -zip -q -j "$UNSIGNED_APK" "$DEX_DIR/classes.dex" - -"$BUILD_TOOLS_DIR/zipalign" -f 4 "$UNSIGNED_APK" "$ALIGNED_APK" - -if [ ! -f "$KEYSTORE" ]; then - echo "Missing Android snapshot helper signing keystore: $KEYSTORE" >&2 - exit 1 -fi - -"$BUILD_TOOLS_DIR/apksigner" sign \ - --ks "$KEYSTORE" \ - --ks-pass pass:android \ - --key-pass pass:android \ - --out "$APK_PATH" \ - "$ALIGNED_APK" - -"$BUILD_TOOLS_DIR/apksigner" verify --min-sdk-version "$MIN_SDK" "$APK_PATH" - -printf 'apk=%s\n' "$APK_PATH" -printf 'package=%s\n' "$PACKAGE_NAME" -printf 'version_code=%s\n' "$VERSION_CODE" diff --git a/scripts/package-android-helper.sh b/scripts/package-android-helper.sh new file mode 100755 index 0000000000..0b746b3d5d --- /dev/null +++ b/scripts/package-android-helper.sh @@ -0,0 +1,136 @@ +#!/bin/sh +set -eu + +HELPER="${AGENT_DEVICE_ANDROID_HELPER:-}" +if [ -z "$HELPER" ]; then + HELPER="${1:-}" + [ "$#" -ge 1 ] && shift +fi + +# Only the snapshot helper publishes a GitHub release asset, so only it takes a release +# tag and only it gets a releaseTag/apkUrl/checksumName/installArgs manifest. +case "$HELPER" in + snapshot) HAS_RELEASE_TAG=1 ;; + ime) HAS_RELEASE_TAG=0 ;; + *) + echo "Unknown Android helper: '$HELPER' (expected 'snapshot' or 'ime')" >&2 + exit 1 + ;; +esac + +if [ "$HAS_RELEASE_TAG" = 1 ]; then + if [ "$#" -ne 3 ]; then + echo "Usage: AGENT_DEVICE_ANDROID_HELPER=snapshot $0 " >&2 + echo " or: $0 snapshot " >&2 + exit 1 + fi + VERSION="$1" + RELEASE_TAG="$2" + OUTPUT_DIR="$3" +else + if [ "$#" -ne 2 ]; then + echo "Usage: AGENT_DEVICE_ANDROID_HELPER=ime $0 " >&2 + echo " or: $0 ime " >&2 + exit 1 + fi + VERSION="$1" + OUTPUT_DIR="$2" + RELEASE_TAG="" +fi + +PROJECT_DIR="$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)" + +case "$HELPER" in + snapshot) PACKAGE_NAME="com.callstack.agentdevice.snapshothelper" ;; + ime) PACKAGE_NAME="com.callstack.agentdevice.imehelper" ;; +esac + +MIN_SDK=23 +TARGET_SDK=36 +APK_BASENAME="agent-device-android-$HELPER-helper-$VERSION.apk" +CHECKSUM_BASENAME="$APK_BASENAME.sha256" +MANIFEST_BASENAME="agent-device-android-$HELPER-helper-$VERSION.manifest.json" +GITHUB_SERVER="${GITHUB_SERVER_URL:-https://github.com}" +REPOSITORY="${GITHUB_REPOSITORY:-}" + +write_github_output() { + if [ -n "${GITHUB_OUTPUT:-}" ]; then + printf '%s\n' "$1" >> "$GITHUB_OUTPUT" + fi +} + +mkdir -p "$OUTPUT_DIR" + +BUILD_OUTPUT="$(AGENT_DEVICE_ANDROID_HELPER="$HELPER" sh "$PROJECT_DIR/scripts/build-android-helper.sh" "$VERSION" "$OUTPUT_DIR")" +APK_PATH="$(printf '%s\n' "$BUILD_OUTPUT" | awk -F= '$1 == "apk" { print $2 }')" +VERSION_CODE="$(printf '%s\n' "$BUILD_OUTPUT" | awk -F= '$1 == "version_code" { print $2 }')" +CHECKSUM_PATH="$OUTPUT_DIR/$CHECKSUM_BASENAME" +MANIFEST_PATH="$OUTPUT_DIR/$MANIFEST_BASENAME" + +if [ ! -f "$APK_PATH" ]; then + echo "Helper APK was not created at $APK_PATH" >&2 + exit 1 +fi + +SHA256="$(shasum -a 256 "$APK_PATH" | awk '{print $1}')" +printf '%s %s\n' "$SHA256" "$APK_BASENAME" > "$CHECKSUM_PATH" + +case "$HELPER" in + snapshot) + if [ -n "$REPOSITORY" ]; then + APK_URL="$GITHUB_SERVER/$REPOSITORY/releases/download/$RELEASE_TAG/$APK_BASENAME" + else + APK_URL="" + fi + + { + printf '{\n' + printf ' "name": "android-snapshot-helper",\n' + printf ' "version": "%s",\n' "$VERSION" + printf ' "releaseTag": "%s",\n' "$RELEASE_TAG" + printf ' "assetName": "%s",\n' "$APK_BASENAME" + if [ -n "$APK_URL" ]; then + printf ' "apkUrl": "%s",\n' "$APK_URL" + else + printf ' "apkUrl": null,\n' + fi + printf ' "sha256": "%s",\n' "$SHA256" + printf ' "checksumName": "%s",\n' "$CHECKSUM_BASENAME" + printf ' "packageName": "%s",\n' "$PACKAGE_NAME" + printf ' "versionCode": %s,\n' "$VERSION_CODE" + printf ' "instrumentationRunner": "%s/.SnapshotInstrumentation",\n' "$PACKAGE_NAME" + printf ' "minSdk": %s,\n' "$MIN_SDK" + printf ' "targetSdk": %s,\n' "$TARGET_SDK" + printf ' "outputFormat": "uiautomator-xml",\n' + printf ' "statusProtocol": "android-snapshot-helper-v1",\n' + printf ' "installArgs": ["install", "-r", "-t"]\n' + printf '}\n' + } > "$MANIFEST_PATH" + ;; + ime) + { + printf '{\n' + printf ' "name": "android-ime-helper",\n' + printf ' "version": "%s",\n' "$VERSION" + printf ' "assetName": "%s",\n' "$APK_BASENAME" + printf ' "sha256": "%s",\n' "$SHA256" + printf ' "packageName": "%s",\n' "$PACKAGE_NAME" + printf ' "versionCode": %s,\n' "$VERSION_CODE" + printf ' "serviceComponent": "%s/.TestInputMethodService",\n' "$PACKAGE_NAME" + printf ' "broadcastProtocol": "android-ime-helper-v1"\n' + printf '}\n' + } > "$MANIFEST_PATH" + ;; +esac + +write_github_output "apk_path=$APK_PATH" +write_github_output "checksum_path=$CHECKSUM_PATH" +write_github_output "manifest_path=$MANIFEST_PATH" +write_github_output "apk_name=$APK_BASENAME" +write_github_output "sha256=$SHA256" +write_github_output "package_name=$PACKAGE_NAME" +write_github_output "version_code=$VERSION_CODE" + +printf 'apk=%s\n' "$APK_PATH" +printf 'checksum=%s\n' "$CHECKSUM_PATH" +printf 'manifest=%s\n' "$MANIFEST_PATH" diff --git a/scripts/package-android-ime-helper.sh b/scripts/package-android-ime-helper.sh deleted file mode 100755 index c3aa78d599..0000000000 --- a/scripts/package-android-ime-helper.sh +++ /dev/null @@ -1,63 +0,0 @@ -#!/bin/sh -set -eu - -if [ "$#" -ne 2 ]; then - echo "Usage: $0 " >&2 - exit 1 -fi - -VERSION="$1" -OUTPUT_DIR="$2" -PROJECT_DIR="$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)" -PACKAGE_NAME="com.callstack.agentdevice.imehelper" -SERVICE_COMPONENT="$PACKAGE_NAME/.TestInputMethodService" -APK_BASENAME="agent-device-android-ime-helper-$VERSION.apk" -CHECKSUM_BASENAME="$APK_BASENAME.sha256" -MANIFEST_BASENAME="agent-device-android-ime-helper-$VERSION.manifest.json" - -write_github_output() { - if [ -n "${GITHUB_OUTPUT:-}" ]; then - printf '%s\n' "$1" >> "$GITHUB_OUTPUT" - fi -} - -mkdir -p "$OUTPUT_DIR" - -BUILD_OUTPUT="$(sh "$PROJECT_DIR/scripts/build-android-ime-helper.sh" "$VERSION" "$OUTPUT_DIR")" -APK_PATH="$(printf '%s\n' "$BUILD_OUTPUT" | awk -F= '$1 == "apk" { print $2 }')" -VERSION_CODE="$(printf '%s\n' "$BUILD_OUTPUT" | awk -F= '$1 == "version_code" { print $2 }')" -CHECKSUM_PATH="$OUTPUT_DIR/$CHECKSUM_BASENAME" -MANIFEST_PATH="$OUTPUT_DIR/$MANIFEST_BASENAME" - -if [ ! -f "$APK_PATH" ]; then - echo "Helper APK was not created at $APK_PATH" >&2 - exit 1 -fi - -SHA256="$(shasum -a 256 "$APK_PATH" | awk '{print $1}')" -printf '%s %s\n' "$SHA256" "$APK_BASENAME" > "$CHECKSUM_PATH" - -{ - printf '{\n' - printf ' "name": "android-ime-helper",\n' - printf ' "version": "%s",\n' "$VERSION" - printf ' "assetName": "%s",\n' "$APK_BASENAME" - printf ' "sha256": "%s",\n' "$SHA256" - printf ' "packageName": "%s",\n' "$PACKAGE_NAME" - printf ' "versionCode": %s,\n' "$VERSION_CODE" - printf ' "serviceComponent": "%s",\n' "$SERVICE_COMPONENT" - printf ' "broadcastProtocol": "android-ime-helper-v1"\n' - printf '}\n' -} > "$MANIFEST_PATH" - -write_github_output "apk_path=$APK_PATH" -write_github_output "checksum_path=$CHECKSUM_PATH" -write_github_output "manifest_path=$MANIFEST_PATH" -write_github_output "apk_name=$APK_BASENAME" -write_github_output "sha256=$SHA256" -write_github_output "package_name=$PACKAGE_NAME" -write_github_output "version_code=$VERSION_CODE" - -printf 'apk=%s\n' "$APK_PATH" -printf 'checksum=%s\n' "$CHECKSUM_PATH" -printf 'manifest=%s\n' "$MANIFEST_PATH" diff --git a/scripts/package-android-snapshot-helper.sh b/scripts/package-android-snapshot-helper.sh deleted file mode 100755 index eb40ee0128..0000000000 --- a/scripts/package-android-snapshot-helper.sh +++ /dev/null @@ -1,85 +0,0 @@ -#!/bin/sh -set -eu - -if [ "$#" -ne 3 ]; then - echo "Usage: $0 " >&2 - exit 1 -fi - -VERSION="$1" -RELEASE_TAG="$2" -OUTPUT_DIR="$3" -PROJECT_DIR="$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)" -PACKAGE_NAME="com.callstack.agentdevice.snapshothelper" -INSTRUMENTATION_RUNNER="$PACKAGE_NAME/.SnapshotInstrumentation" -MIN_SDK=23 -TARGET_SDK=36 -APK_BASENAME="agent-device-android-snapshot-helper-$VERSION.apk" -CHECKSUM_BASENAME="$APK_BASENAME.sha256" -MANIFEST_BASENAME="agent-device-android-snapshot-helper-$VERSION.manifest.json" -GITHUB_SERVER="${GITHUB_SERVER_URL:-https://github.com}" -REPOSITORY="${GITHUB_REPOSITORY:-}" - -write_github_output() { - if [ -n "${GITHUB_OUTPUT:-}" ]; then - printf '%s\n' "$1" >> "$GITHUB_OUTPUT" - fi -} - -mkdir -p "$OUTPUT_DIR" - -BUILD_OUTPUT="$(sh "$PROJECT_DIR/scripts/build-android-snapshot-helper.sh" "$VERSION" "$OUTPUT_DIR")" -APK_PATH="$(printf '%s\n' "$BUILD_OUTPUT" | awk -F= '$1 == "apk" { print $2 }')" -VERSION_CODE="$(printf '%s\n' "$BUILD_OUTPUT" | awk -F= '$1 == "version_code" { print $2 }')" -CHECKSUM_PATH="$OUTPUT_DIR/$CHECKSUM_BASENAME" -MANIFEST_PATH="$OUTPUT_DIR/$MANIFEST_BASENAME" - -if [ ! -f "$APK_PATH" ]; then - echo "Helper APK was not created at $APK_PATH" >&2 - exit 1 -fi - -SHA256="$(shasum -a 256 "$APK_PATH" | awk '{print $1}')" -printf '%s %s\n' "$SHA256" "$APK_BASENAME" > "$CHECKSUM_PATH" - -if [ -n "$REPOSITORY" ]; then - APK_URL="$GITHUB_SERVER/$REPOSITORY/releases/download/$RELEASE_TAG/$APK_BASENAME" -else - APK_URL="" -fi - -{ - printf '{\n' - printf ' "name": "android-snapshot-helper",\n' - printf ' "version": "%s",\n' "$VERSION" - printf ' "releaseTag": "%s",\n' "$RELEASE_TAG" - printf ' "assetName": "%s",\n' "$APK_BASENAME" - if [ -n "$APK_URL" ]; then - printf ' "apkUrl": "%s",\n' "$APK_URL" - else - printf ' "apkUrl": null,\n' - fi - printf ' "sha256": "%s",\n' "$SHA256" - printf ' "checksumName": "%s",\n' "$CHECKSUM_BASENAME" - printf ' "packageName": "%s",\n' "$PACKAGE_NAME" - printf ' "versionCode": %s,\n' "$VERSION_CODE" - printf ' "instrumentationRunner": "%s",\n' "$INSTRUMENTATION_RUNNER" - printf ' "minSdk": %s,\n' "$MIN_SDK" - printf ' "targetSdk": %s,\n' "$TARGET_SDK" - printf ' "outputFormat": "uiautomator-xml",\n' - printf ' "statusProtocol": "android-snapshot-helper-v1",\n' - printf ' "installArgs": ["install", "-r", "-t"]\n' - printf '}\n' -} > "$MANIFEST_PATH" - -write_github_output "apk_path=$APK_PATH" -write_github_output "checksum_path=$CHECKSUM_PATH" -write_github_output "manifest_path=$MANIFEST_PATH" -write_github_output "apk_name=$APK_BASENAME" -write_github_output "sha256=$SHA256" -write_github_output "package_name=$PACKAGE_NAME" -write_github_output "version_code=$VERSION_CODE" - -printf 'apk=%s\n' "$APK_PATH" -printf 'checksum=%s\n' "$CHECKSUM_PATH" -printf 'manifest=%s\n' "$MANIFEST_PATH"