Files
MrbWebLibre/scripts/verify-pixel10-apk.sh
Codex 05e8639b67
Pixel 10 APK / build (push) Failing after 7m26s
feat(android): add Pixel 10 optimized build profile
2026-08-09 17:19:52 +02:00

92 lines
2.5 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
readonly REQUIRED_PAGE_SIZE=$((16 * 1024))
usage() {
echo "Usage: $0 path/to/app-pixel10-release.apk" >&2
}
if [[ $# -ne 1 ]]; then
usage
exit 2
fi
apk="$1"
if [[ ! -f "$apk" ]]; then
echo "APK not found: $apk" >&2
exit 1
fi
for command_name in unzip readelf; do
if ! command -v "$command_name" >/dev/null 2>&1; then
echo "Required command not found: $command_name" >&2
exit 1
fi
done
native_entries="$(unzip -Z1 "$apk" | sed -n '/^lib\/.*\.so$/p')"
if [[ -z "$native_entries" ]]; then
echo "No native libraries found in $apk" >&2
exit 1
fi
unexpected_abis=()
while IFS= read -r entry; do
if [[ "$entry" != lib/arm64-v8a/* ]]; then
unexpected_abis+=("$entry")
fi
done <<< "$native_entries"
if [[ ${#unexpected_abis[@]} -gt 0 ]]; then
echo "Pixel 10 APK contains non-ARM64 native libraries:" >&2
printf ' %s\n' "${unexpected_abis[@]}" >&2
exit 1
fi
temporary_root="${TMPDIR:-/tmp}"
if [[ ! -d "$temporary_root" || ! -w "$temporary_root" ]]; then
temporary_root="$PWD"
fi
temporary_directory="$(mktemp -d "$temporary_root/mrbweblibre-verify.XXXXXX")"
trap 'rm -rf -- "$temporary_directory"' EXIT
unzip -qq "$apk" 'lib/arm64-v8a/*.so' -d "$temporary_directory"
failures=0
checked=0
native_library_list="$temporary_directory/native-libraries.list"
find "$temporary_directory/lib/arm64-v8a" -type f -name '*.so' -print0 > "$native_library_list"
while IFS= read -r -d '' library; do
checked=$((checked + 1))
machine="$(readelf -hW "$library" | sed -n 's/^[[:space:]]*Machine:[[:space:]]*//p')"
if [[ "$machine" != "AArch64" ]]; then
echo "Architecture failure: ${library#"$temporary_directory"/} is $machine, expected AArch64" >&2
failures=$((failures + 1))
continue
fi
load_alignments="$(readelf -lW "$library" | awk '$1 == "LOAD" { print $NF }')"
if [[ -z "$load_alignments" ]]; then
echo "No ELF LOAD segments found: ${library#"$temporary_directory"/}" >&2
failures=$((failures + 1))
continue
fi
while IFS= read -r alignment; do
if (( alignment < REQUIRED_PAGE_SIZE )); then
echo "16 KB alignment failure: ${library#"$temporary_directory"/} has LOAD alignment $alignment" >&2
failures=$((failures + 1))
break
fi
done <<< "$load_alignments"
done < "$native_library_list"
if (( failures > 0 )); then
echo "Pixel 10 compatibility verification failed ($failures issue(s))." >&2
exit 1
fi
echo "Pixel 10 APK verified: ARM64-only; $checked native libraries use 16 KB-compatible ELF alignment."