Notice
Recent Posts
Recent Comments
Link
250x250
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- #창작#SNS#스포츠#반려동물#연애#과제#레시피#활동#건강#운세#글쓰기#비즈니스 #AI비서#챗GPT#CHATGPT
- Sol
- 마이봇#pdf챗봇#상담챗봇#faq챗봇#chatgpt#랭체인#llm
- 커피#그라인더#통돌이 오픈 #로스팅#드립커피#생두#원두
- 로우코드#lowcode#erp#관리시스템#시트메이트#시트메타#엑셀업로드#엑셀다운로드#그리드#데이터관리#생산관리시스템#로그관리#히스토리#입력체크
- 마이봇#아이폰#아이폰심사#IT고시#
- 마이봇#API 설정
- 펫버틀러#서버연동#프로필등록#로그인서버연동#이미지#동영상#업로드용 화면#앱개발#플러터#반려생활#로딩바#loading bar#
- PDF검색#PDF검색챗봇#NEXTJS#스터디#스타트업#랭체이#langchain#prisma#sqlite#
- flutter#채팅창@메모창#url링크#날짜추가
- doge
- 솔라나
- 리플
- 광동온더그린#프랜즈#가상CC#스크린골프#
- PDF#챗봇검색#서비스#GPT4#PGT3.5#GPT#랭체인#챗봇#CHATBOT#LLM#문서검색
- eth
- 마이봇#chatgpt#ai#인공지능
- 11만4천 달러
- 마이봇#문서챗봇#PDF#TEXT#유투브#챗봇만들기#랭체인# langchain#벡터데이터#자료검색#챗GPT#GPT4#챗지피티
- 이더리움
- 로우코드#ERP#관리시스템#상품관리#선택박스#자동화프로그램
- 플러터#sms#mms#문자보내기
- 마이봇#핸드폰대체#
- 쇼핑몰관리시스템#매입관리#시트메타#매입채널#엑셀업로드
- btc
- xrp
- 도지코인
- #비트코인 #암호화폐 #코인투자 #가상화폐 #이더리움 #알트코인 #코인뉴스 #투자전략 #코벡스 #코인계산기
- flutter#sqlite#chatGPT#
- 비트코인
Archives
- Today
- Total
혼자서 앱 만드는 개발자 함께하는 AI 세상
16KB 페이지 크기 지원 문제 해결 기록 본문
반응형
16KB 페이지 크기 지원 문제 해결 기록
문제 개요
Google Play Console에서 "앱이 16KB 메모리 페이지 크기를 지원하지 않습니다" 오류 발생
Google Play 요구사항
- 시행일: 2025년 11월 1일부터
- 대상: Android 15 (API 35) 이상을 타겟팅하는 모든 신규 앱 및 업데이트
- 요구사항: 64비트 기기에서 16KB 페이지 크기 지원 필수
근본 원인
써드파티 라이브러리의 네이티브 라이브러리(.so 파일)가 16KB ELF 정렬을 지원하지 않음
문제 라이브러리 (mobile_scanner 3.5.2)
libbarhopper_v3.so: align 2**12 (4KB) ❌
libimage_processing_util_jni.so: align 2**12 (4KB) ❌
libdatastore_shared_counter.so: align 2**14 (16KB) ✅해결 방법
❌ 실패한 시도들
1. 32비트 ABI 제거만으로 해결 시도
ndk {
abiFilters.clear()
abiFilters.addAll(listOf("arm64-v8a", "x86_64"))
}
- 결과: 실패 - 써드파티 라이브러리는 여전히 4KB 정렬
2. useLegacyPackaging = true (압축 모드)
packaging {
jniLibs {
useLegacyPackaging = true
}
}
- 결과: 빌드는 성공하지만 Google Play 검증 여전히 실패
- 이유: 압축 모드는 설치 공간만 증가시킬 뿐, ELF 정렬 문제 해결 안 됨
3. extractNativeLibs 속성 변경
android:extractNativeLibs="true"
- 결과: 실패 - 근본적인 ELF 정렬 문제 해결 안 됨
4. NDK 버전 업그레이드만으로 해결 시도
ndkVersion = "28.0.12674087" // NDK r28
- 결과: 실패 - 자체 빌드 라이브러리는 16KB 정렬되지만 써드파티는 그대로
5. gradle.properties 설정
android.bundle.enableUncompressedNativeLibs=true // Deprecated
- 결과: AGP 8.1에서 제거된 옵션, 효과 없음
✅ 최종 해결책: mobile_scanner 업그레이드
pubspec.yaml
# 변경 전
mobile_scanner: ^3.5.2
# 변경 후
mobile_scanner: ^7.1.3
코드 수정 (API 변경 대응)
lib/screens/qr_scan_screen.dart:
// 변경 전
IconButton(
icon: ValueListenableBuilder(
valueListenable: cameraController.torchState,
builder: (context, state, child) {
switch (state) {
case TorchState.off:
return const Icon(Icons.flash_off, color: Colors.grey);
case TorchState.on:
return const Icon(Icons.flash_on, color: Colors.yellow);
}
},
),
onPressed: () => cameraController.toggleTorch(),
)
// 변경 후 (torchState API 제거됨)
IconButton(
icon: const Icon(Icons.flash_off, color: Colors.grey),
onPressed: () => cameraController.toggleTorch(),
)
검증 결과
ELF 정렬 확인 (mobile_scanner 7.1.3)
# NDK llvm-objdump로 확인
libapp.so: align 2**16 (64KB) ✅
libflutter.so: align 2**16 (64KB) ✅
libbarhopper_v3.so: align 2**14 (16KB) ✅ # 4KB에서 개선!
libimage_processing_util_jni.so: align 2**14 (16KB) ✅ # 4KB에서 개선!
libdatastore_shared_counter.so: align 2**14 (16KB) ✅
libsurface_util_jni.so: align 2**14 (16KB) ✅
ZIP 정렬 검증
$ zipalign -c -P 16 -v 4 app-release.aab
Verification successful ✅
최종 빌드 설정
android/app/build.gradle.kts
android {
compileSdk = 36
ndkVersion = "28.0.12674087" // NDK r28: 16KB 기본 지원
defaultConfig {
targetSdk = 35
ndk {
abiFilters.clear()
abiFilters.addAll(listOf("armeabi-v7a", "arm64-v8a", "x86_64"))
}
}
packaging {
jniLibs {
useLegacyPackaging = false // 압축 해제 사용
}
}
}
plugins {
id("com.android.application") version "8.11.1"
}
android/app/src/main/AndroidManifest.xml
<application
android:extractNativeLibs="false">
android/gradle.properties
org.gradle.jvmargs=-Xmx8G
android.useAndroidX=true
교훈
1. 써드파티 라이브러리가 핵심 문제
- 자체 빌드 코드는 NDK r28로 자동 16KB 정렬
- Google ML Kit, Google Play Services 등의 네이티브 라이브러리가 16KB 미지원
- 패키지 업데이트로 해결 가능
2. AGP/NDK 업그레이드만으로는 부족
- NDK r28은 자체 빌드 라이브러리만 16KB 정렬
- 사전 빌드된 써드파티 라이브러리는 패키지 업데이트 필요
3. 압축 모드는 임시 방편일 뿐
useLegacyPackaging = true는 설치 공간만 증가- Google Play 검증은 ELF 정렬을 확인하므로 근본 해결 안 됨
4. 검증 도구 활용
# ELF 정렬 확인
llvm-objdump -p libXXX.so | grep LOAD
# ZIP 정렬 확인
zipalign -c -P 16 -v 4 app-release.aab
참고 프로젝트
- cleaning_dot: 동일한 문제 해결 완료
- mobile_scanner 미사용 (barcode_scan2 주석 처리)
- 압축 해제 모드 사용
- 모든 라이브러리 16KB 정렬 확인됨
타임라인
- 2025.11.01: Google Play 16KB 지원 필수화
- 2025.12.11: mobile_scanner 7.1.3 업그레이드로 해결
- 버전: 1.0.17+17
참고 문서
728x90
반응형
Comments