Skip to content

Instantly share code, notes, and snippets.

@sekizlipenguen
Last active September 4, 2025 10:33
Show Gist options
  • Select an option

  • Save sekizlipenguen/47b335d4bc0c72baecbcbad19c84de08 to your computer and use it in GitHub Desktop.

Select an option

Save sekizlipenguen/47b335d4bc0c72baecbcbad19c84de08 to your computer and use it in GitHub Desktop.
Checks Android APK/AAB .so files for the 16KB page-size requirement; reports native libs whose LOAD align ≠ 2**14.
#!/usr/bin/env bash
set -e
OBJDUMP="$(ls -d "$ANDROID_HOME"/ndk/*/toolchains/llvm/prebuilt/*/bin/llvm-objdump 2>/dev/null | tail -n1)"
if [ -z "$OBJDUMP" ]; then
echo "OBJDUMP not found. llvm-objdump is missing under ANDROID_HOME/ndk."; exit 1
fi
APK="$(ls -t app/build/outputs/apk/debug/*.apk 2>/dev/null | head -n1)"
[ -z "$APK" ] && APK="$(ls -t app/build/outputs/apk/release/*.apk 2>/dev/null | head -n1)"
if [ -z "$APK" ]; then
echo "APK not found. Run first: ./gradlew assembleDebug"; exit 1
fi
echo "Using APK: $APK"
TMPDIR="$(mktemp -d)"
unzip -qq "$APK" "lib/*/*.so" -d "$TMPDIR" || true
check_one () {
local name="$1"
local ok=true
for abi in arm64-v8a x86_64; do
local so="$TMPDIR/lib/$abi/$name"
if [ -f "$so" ]; then
local aligns
aligns="$("$OBJDUMP" -p "$so" 2>/dev/null | awk '/LOAD/{print}' | awk '{for(i=1;i<=NF;i++) if($i=="align") print $(i+1)}')"
if [ -z "$aligns" ]; then
echo "[$abi] $name → LOAD header not working (!?)"
ok=false
else
while read -r a; do
if [ "$a" != "2**14" ]; then
echo "FAIL [$abi] $name → LOAD align=$a (expected 2**14)"
ok=false
fi
done <<< "$aligns"
if $ok; then
echo "PASS [$abi] $name → LOAD align=2**14"
fi
fi
fi
done
}
for so in \
libimage_processing_util_jni.so \
libcamerakit_jni.so \
libglide-webp.so \
libavif_android.so \
libbarhopper_v3.so \
libreanimated.so \
libreactnative.so \
libc++_shared.so \
libimagepipeline.so \
libnative-imagetranscoder.so \
libworklets.so \
; do
if ! ls "$TMPDIR"/lib/*/"$so" >/dev/null 2>&1; then
echo "Missing: $so"
continue
fi
check_one "$so"
done
echo "End."
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment