Merge pull request 'haroon_dev' (#284) from haroon_dev into master
Reviewed-on: https://34.17.182.140/Haroon6138/HMG_Patient_App_New/pulls/284master
commit
2a4b80ff99
Binary file not shown.
Binary file not shown.
@ -0,0 +1,110 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Check ELF .so alignment in APK for 16KB page size compatibility
|
||||||
|
# Files must have PT_LOAD segments aligned to 16384 bytes (0x4000)
|
||||||
|
|
||||||
|
APK="${1:-/Users/mohamedmekawy/Documents/Work/HMG_Patient_App_New/android/app/release/app-release.apk}"
|
||||||
|
LLVM_READELF="/Users/mohamedmekawy/Library/Android/sdk/ndk/28.2.13676358/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-readelf"
|
||||||
|
EXTRACT_DIR="/tmp/apk_alignment_check"
|
||||||
|
REQUIRED_ALIGNMENT=16384 # 16 KB
|
||||||
|
|
||||||
|
echo "========================================"
|
||||||
|
echo " ELF Alignment Check for 16KB Page Size"
|
||||||
|
echo "========================================"
|
||||||
|
echo "APK: $APK"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
if [ ! -f "$APK" ]; then
|
||||||
|
echo "ERROR: APK not found at $APK"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Clean and extract APK
|
||||||
|
rm -rf "$EXTRACT_DIR"
|
||||||
|
mkdir -p "$EXTRACT_DIR"
|
||||||
|
unzip -q "$APK" -d "$EXTRACT_DIR"
|
||||||
|
|
||||||
|
# Find all .so files
|
||||||
|
SO_FILES=$(find "$EXTRACT_DIR" -name "*.so")
|
||||||
|
|
||||||
|
if [ -z "$SO_FILES" ]; then
|
||||||
|
echo "No .so files found in APK."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
FAILED=()
|
||||||
|
PASSED=()
|
||||||
|
|
||||||
|
for SO in $SO_FILES; do
|
||||||
|
RELATIVE="${SO#$EXTRACT_DIR/}"
|
||||||
|
|
||||||
|
# Check if it's a valid ELF
|
||||||
|
MAGIC=$(xxd -l 4 "$SO" 2>/dev/null | head -1)
|
||||||
|
if [[ "$MAGIC" != *"7f45 4c46"* ]]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Use llvm-readelf from NDK
|
||||||
|
READELF_OUTPUT=$("$LLVM_READELF" -l "$SO" 2>/dev/null)
|
||||||
|
|
||||||
|
if [ -z "$READELF_OUTPUT" ]; then
|
||||||
|
echo "⚠️ SKIP (readelf unavailable): $RELATIVE"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Extract LOAD segment alignments
|
||||||
|
MISALIGNED=false
|
||||||
|
while IFS= read -r line; do
|
||||||
|
if [[ "$line" == *"LOAD"* ]]; then
|
||||||
|
# Get the last field (Align column)
|
||||||
|
ALIGN=$(echo "$line" | awk '{print $NF}')
|
||||||
|
# Convert hex to decimal if needed
|
||||||
|
if [[ "$ALIGN" == 0x* ]]; then
|
||||||
|
ALIGN_DEC=$((ALIGN))
|
||||||
|
else
|
||||||
|
ALIGN_DEC=$ALIGN
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$ALIGN_DEC" =~ ^[0-9]+$ ]]; then
|
||||||
|
if [ "$ALIGN_DEC" -lt "$REQUIRED_ALIGNMENT" ] && [ "$ALIGN_DEC" -gt 0 ]; then
|
||||||
|
MISALIGNED=true
|
||||||
|
ALIGN_KB=$((ALIGN_DEC / 1024))
|
||||||
|
echo "❌ FAIL (${ALIGN_KB}KB aligned): $RELATIVE"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done <<< "$READELF_OUTPUT"
|
||||||
|
|
||||||
|
if [ "$MISALIGNED" = false ]; then
|
||||||
|
ALIGN_LINE=$(echo "$READELF_OUTPUT" | grep "LOAD" | head -1 | awk '{print $NF}')
|
||||||
|
echo "✅ PASS ($ALIGN_LINE aligned): $RELATIVE"
|
||||||
|
PASSED+=("$RELATIVE")
|
||||||
|
else
|
||||||
|
FAILED+=("$RELATIVE")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "========================================"
|
||||||
|
echo "SUMMARY"
|
||||||
|
echo "========================================"
|
||||||
|
echo "✅ Passed (16KB+ aligned): ${#PASSED[@]}"
|
||||||
|
echo "❌ Failed (< 16KB aligned): ${#FAILED[@]}"
|
||||||
|
|
||||||
|
if [ ${#FAILED[@]} -gt 0 ]; then
|
||||||
|
echo ""
|
||||||
|
echo "The following .so files are NOT 16KB page aligned:"
|
||||||
|
for f in "${FAILED[@]}"; do
|
||||||
|
echo " - $f"
|
||||||
|
done
|
||||||
|
echo ""
|
||||||
|
echo "These files will cause issues on Android 15+ devices with 16KB page size."
|
||||||
|
else
|
||||||
|
echo ""
|
||||||
|
echo "All .so files are 16KB page aligned. ✅"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
rm -rf "$EXTRACT_DIR"
|
||||||
|
|
||||||
Loading…
Reference in New Issue