Repository navigation
v1.3.0: Keystore AES-GCM 보안 강화, API 서버 인증, 리플렉션 제거 및 R8 최적화
Local LLM Android v1.3.0 Release Notes
Claude 및 ChatGPT 심층 코드 리뷰를 바탕으로 보안 취약점, 아키텍처 결함, 하드웨어 가속 미비점을 전면 개선한 메이저 업데이트입니다.
🔒 P0 — 보안 강화 및 데이터 무결성
- Android Keystore 기반 AES-256-GCM 암호화 전환 (ChatCrypto):
- 하드코딩된 마스터 시드를 제거하고 OS 보안 하드웨어(TEE/Keystore)에서 기기별 고유 키를 생성·보관
- 암호화 실패 시 평문(Base64)으로 폴백하던 취약점 제거 ->
SecurityException을 통한 안전하지 않은 저장 원천 차단 - 이전 버전의 기존 대화 기록을 안전하게 읽어오는 하위 호환 마이그레이션 로직 탑재
- API 서버 보안 강화 (OllamaApiServer):
- 외부 노출 위험이 있던
0.0.0.0바인딩 대신127.0.0.1(로컬 루프백) 기본 바인딩 적용 (설정에서 LAN 모드 선택 가능) - 랜덤 고강도 API 키(
sk-local-...) 자동 발급 및Authorization: Bearer <token>헤더 인증 필수 적용 - 브라우저 기반 무단 호출을 방지하기 위해 와일드카드 CORS(
*) 제거 및 로컬호스트 검증
- 외부 노출 위험이 있던
- LlamaContext 리플렉션 의존성 제거:
- wrapper의 private 필드에 몰래 접근하던
getDeclaredField("contexts")리플렉션 완전 제거 LlmEngine이 네이티브LlamaContext를 직접 소유·관리하여 ProGuard/R8 난독화 시의 크래시 가능성 원천 차단
- wrapper의 private 필드에 몰래 접근하던
⚡ P1 — 하드웨어 가속 및 진단 강화
- Google LiteRT-LM GPU / NPU 하드웨어 가속 지원:
- CPU 고정을 탈피하고
Backend.GPU()및Backend.NPU()델리게이트 후보를 자동 시도
- CPU 고정을 탈피하고
- llama.cpp GPU 오프로딩 (n_gpu_layers):
- 설정과 연동하여 GPU 가속 레이어 오프로딩 지원
- 사전 메모리 진단:
- 모델 로드 전 가용 RAM 대비 모델 크기를 대조하여 OOM 위험 조기 감지 및 로깅
🎯 P2 — 정확성 및 UX 개선
- 실제 토크나이저 기반 속도 측정:
- 글자 수 기반 추정치(
length/3)를 폐기하고 네이티브 모델 토크나이저를 통한 정확한promptSpeed및tps산출
- 글자 수 기반 추정치(
- 스트리밍 추론 버퍼 상태머신 (ReasoningStreamParser):
- DeepSeek-R1 등 추론 모델의
<think>,</think>태그가 토큰 스트리밍 경계에서 쪼개질 때도 완벽 분리 처리
- DeepSeek-R1 등 추론 모델의
🏛️ P3 — 아키텍처 및 빌드 위생
- 정식 애플리케이션 ID 적용:
com.localllm.android(versionCode 13, versionName 1.3.0) - R8 / Minify 최적화 활성화:
isMinifyEnabled = true적용으로 약 20MB 용량 경량화 (99.9MB) - 타입 안전한 네비게이션: 문자열 라우팅을
AppScreenenum으로 교체하여 오타 방지 - 모바일 친화적 네트워크 디스패처: 동시 요청 풀을 16/8로 조정하여 배터리 및 연결 안정성 확보
- 단위 테스트 스위트 구축: 암호화, 스트리밍 상태머신, 프롬프트 포맷터 테스트 100% 통과
- README 아키텍처 문서화: llama.cpp GGUF vs LiteRT-LM 이원화 아키텍처 기술