From 4e3679c7b7dbbc1366d5c0e39e354ec4bb42c2e1 Mon Sep 17 00:00:00 2001 From: Swung0x48 Date: Tue, 16 Jun 2026 19:31:34 +0800 Subject: [PATCH] [Fix] (ci): validate debuggable retrace APKs --- .github/workflows/apk.yml | 2 +- android-plugin/app/build.gradle | 2 + .../app/src/trace/AndroidManifest.xml | 2 +- .../app/src/trace/cpp/CMakeLists.txt | 13 +++-- android-plugin/trace-replay-ci.sh | 50 +++++++++---------- 5 files changed, 36 insertions(+), 33 deletions(-) diff --git a/.github/workflows/apk.yml b/.github/workflows/apk.yml index c24d0e3a..664a3c42 100644 --- a/.github/workflows/apk.yml +++ b/.github/workflows/apk.yml @@ -54,7 +54,7 @@ jobs: SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD }} - name: Build retrace APKs - run: gradle --no-daemon -p android-plugin :app:assembleEsprytTraceRelease :app:assembleMagmaTraceRelease -Pmobilegl.abis=all --parallel --max-workers "$(nproc)" + run: gradle --no-daemon -p android-plugin :app:assembleEsprytTraceRelease :app:assembleMagmaTraceRelease -Pmobilegl.abis=all -Pmobilegl.debuggableRelease=true --parallel --max-workers "$(nproc)" env: SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD }} SIGNING_KEY_ALIAS: ${{ secrets.SIGNING_KEY_ALIAS }} diff --git a/android-plugin/app/build.gradle b/android-plugin/app/build.gradle index a7c3ee37..36e40a0e 100644 --- a/android-plugin/app/build.gradle +++ b/android-plugin/app/build.gradle @@ -17,6 +17,7 @@ def releaseSigningReady = signingStoreFile.exists() && signingStorePassword && signingKeyAlias && signingKeyPassword +def debuggableRelease = (findProperty('mobilegl.debuggableRelease') ?: 'false').toString().toBoolean() def mobileGlAbiFilters = { def abiList = (findProperty('mobilegl.abis') ?: System.getenv('MOBILEGL_ABIS') ?: 'arm64-v8a') as String if (abiList.equalsIgnoreCase('all')) { @@ -99,6 +100,7 @@ android { buildTypes { release { + debuggable debuggableRelease minifyEnabled false if (releaseSigningReady) { signingConfig signingConfigs.release diff --git a/android-plugin/app/src/trace/AndroidManifest.xml b/android-plugin/app/src/trace/AndroidManifest.xml index 31816231..8f04cbc4 100644 --- a/android-plugin/app/src/trace/AndroidManifest.xml +++ b/android-plugin/app/src/trace/AndroidManifest.xml @@ -1,7 +1,7 @@ - + files/trace-replay/input/trace.trace" - adb shell run-as "${package_name}" sh -c "cat '${escaped_golden_tmp}' > files/trace-replay/input/golden.png" + "${ADB}" shell run-as "${package_name}" rm -rf files/trace-replay + "${ADB}" shell run-as "${package_name}" mkdir -p files/trace-replay/input files/trace-replay/output + "${ADB}" shell run-as "${package_name}" cp "${trace_tmp}" files/trace-replay/input/trace.trace + "${ADB}" shell run-as "${package_name}" cp "${golden_tmp}" files/trace-replay/input/golden.png } run_retrace() { @@ -156,11 +152,11 @@ run_retrace() { result_dir="${result_root}/${safe_case}-${backend}" mkdir -p "${result_dir}" - adb install -r "${apk_file}" - copy_fixture_to_app "${package_name}" - adb shell am force-stop "${package_name}" - adb logcat -c - adb shell am start -W -a top.mobilegl.plugin.TRACE_REPLAY \ + "${ADB}" install -r "${apk_file}" + copy_fixture_to_app + "${ADB}" shell am force-stop "${package_name}" + "${ADB}" logcat -c + "${ADB}" shell am start -W -a top.mobilegl.plugin.TRACE_REPLAY \ -n "${package_name}/top.mobilegl.plugin.trace.TraceReplayActivity" \ --es trace_path "${app_dir}/input/trace.trace" \ --es golden_path "${app_dir}/input/golden.png" \ @@ -178,21 +174,21 @@ run_retrace() { --ei fuzz_percent "${fuzz_percent}" for _ in $(seq 1 "${timeout_seconds}"); do - if adb shell run-as "${package_name}" ls files/trace-replay/output/result.json >/dev/null 2>&1; then + if "${ADB}" shell run-as "${package_name}" ls files/trace-replay/output/result.json >/dev/null 2>&1; then break fi sleep 1 done - adb logcat -d -t 1000 > "${result_dir}/logcat.txt" || true - adb shell run-as "${package_name}" ls files/trace-replay/output/result.json - adb exec-out run-as "${package_name}" cat files/trace-replay/output/result.json > "${result_dir}/result.json" + "${ADB}" logcat -d -t 1000 > "${result_dir}/logcat.txt" || true + "${ADB}" shell run-as "${package_name}" ls files/trace-replay/output/result.json + "${ADB}" exec-out run-as "${package_name}" cat files/trace-replay/output/result.json > "${result_dir}/result.json" cat "${result_dir}/result.json" - adb exec-out run-as "${package_name}" cat files/trace-replay/output/actual.png > "${result_dir}/${safe_case}-${backend}-actual.png" - adb exec-out run-as "${package_name}" cat "files/trace-replay/output/${safe_case}-diff.png" > "${result_dir}/${safe_case}-${backend}-diff.png" - adb exec-out run-as "${package_name}" cat files/trace-replay/output/retrace.log > "${result_dir}/retrace.log" || true + "${ADB}" exec-out run-as "${package_name}" cat files/trace-replay/output/actual.png > "${result_dir}/${safe_case}-${backend}-actual.png" + "${ADB}" exec-out run-as "${package_name}" cat "files/trace-replay/output/${safe_case}-diff.png" > "${result_dir}/${safe_case}-${backend}-diff.png" + "${ADB}" exec-out run-as "${package_name}" cat files/trace-replay/output/retrace.log > "${result_dir}/retrace.log" || true - python3 -c 'import json, sys; result = json.load(open(sys.argv[1], encoding="utf-8")); sys.exit(0 if result.get("passed") else f"trace replay failed: {result}")' "${result_dir}/result.json" + "${PYTHON}" -c 'import json, sys; result = json.load(open(sys.argv[1], encoding="utf-8")); sys.exit(0 if result.get("passed") else f"trace replay failed: {result}")' "${result_dir}/result.json" } mkdir -p "${fixture_root}" "${result_root}"