- 관련 문서: https://developer.android.com/guide/practices/page-sizes?hl=ko#alignment-use-tools
"지금까지 Android는 4KB 메모리 페이지 크기만 지원했습니다. 시스템 메모리 성능을 최적화하여 Android 기기에는 일반적으로 그랬습니다. Android 15부터 AOSP는 16KB (16KB)의 페이지 크기를 사용하도록 구성된 기기 기기에서 지원됩니다."
구글에서 안드로이드 15가 출시 되면서 설정에서 16kb 지원을 선택할 수 있어졌다.
이때 네이티브 라이브러리는 ELEF 세그먼트 정렬 확인을 하라고 하는데 2**14보다 작을 경우 패키징을 업데이트해야 한다.
16kb page size 지원이 안되어 있는 공유 라이브러리에서 에러가 발생한 내역이다.
(로그 발췌 - 일부 수정)
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'google/sdk_gphone16k_arm64/emu64a16k:15/AE3A.11111.019/11111111:user/dev-keys'
ABI: 'arm64'
Page size: 16384 bytes
Cmdline: com.jaehee.application
signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0x00007adde111b1b1
#00 pc 0000000000030b00 /data/app/~~MZIoRUIqaph4mWcMqAzWWA==/com.jaehee.application-5XXXXXX-XXXXXXXXXXXXX==/lib/arm64/libxxx.so
공유 라이브러리에 16KB page size 지원을 설정하는 방법이다.
[Application.mk]
APP_SUPPORT_FLEXIBLE_PAGE_SIZES := true
check_elf_alignment 스크립트 (링크)로 앱의 elf 세그먼트 값이 정상적으로 2**14 으로 설정된 것을 확인할 수 있다.
check_elf_alignment.sh APK_NAME.apk
출력 예시)
/lib/arm64-v8a/libxxx.so: \e[32mALIGNED\e[0m (2**14)
/lib/arm64-v8a/libyyy.so: \e[32mALIGNED\e[0m (2**14)
결과적으로 16kb page size 옵션이 적용된 단말에서 정상 실행된다.