> ## Documentation Index
> Fetch the complete documentation index at: https://docs.facebetter.net/llms.txt
> Use this file to discover all available pages before exploring further.

# FAQ

> Android Facebetter SDK 2.0 자주 묻는 질문

## 연동

### 엔진 생성이 예외를 던지거나 준비되지 않음

* `IllegalArgumentException`: `EngineConfig`에는 비어 있지 않은 `licenseToken`, **또는** `appId`와 `appKey`가 모두 필요합니다
* 대시보드에서 이 앱의 **애플리케이션 패키지 이름**을 바인딩하세요
* 온라인 인증이면 `/facebetter/v2/auth`에 대한 네트워크 접근을 확인하세요
* `EngineEventCode.LICENSE_VALIDATION_FAILED` / `INITIALIZATION_FAILED`를 수신하세요
* `new BeautyEffectEngine(...)` **전에** `setLogConfig`를 호출하세요

인증: [인증 및 라이선스](/ko/intro/license).

### 컴파일: `net.pixpark.facebetter`를 해석할 수 없음

* Maven: `implementation 'net.pixpark:facebetter:2.0.0'`
* 로컬 AAR: `implementation files('libs/facebetter.aar')` 후 Sync
* Clean / Rebuild

### `UnsatisfiedLinkError`

* 기기 ABI는 `arm64-v8a` 또는 `armeabi-v7a`여야 합니다
* shrink/obfuscate를 쓰면 `libfacebetter.so`를 유지하고, ProGuard / R8에서 Facebetter native 메서드를 유지하세요
* AAR / Maven 아티팩트가 완전한지 확인하세요

## 효과

### 뷰티가 약해 보임

* `[0, 1]` 범위에서 강도를 높이세요(`setSmoothing`, `setWhitening`, 메이크업, …)
* 리셰이프는 \*\*`[-1, 1]`\*\*입니다. `0`에 가까우면 거의 꺼진 상태입니다
* `INITIALIZATION_COMPLETE`와 `processImage`가 null이 아닌 프레임을 반환하는지 확인하세요
* `onFaceLandmarks`로 랜드마크를 확인하세요(빈 목록 = 얼굴 없음)

### 얼굴이 왜곡됨

* `setReshape` 절댓값을 낮추세요. 부호를 바꾸면 방향이 반대가 됩니다
* 여러 리셰이프 노브를 높은 절댓값으로 쌓지 마세요
* 라이브 `VIDEO`가 더 부드럽고 강하지 않다면, 정지 내보내기에는 `FrameType.IMAGE`를 사용하세요

### 가상 배경이 동작하지 않음

* `setVirtualBackgroundBlur(level)`을 `level > 0`으로 호출하거나, **또는** `setVirtualBackground(path|bytes)`를 호출하세요
* `setVirtualBackgroundBlur(0)`은 효과를 **지웁니다**
* 이미지 경로는 읽을 수 있는 PNG/JPG여야 합니다. 빈 경로는 `ErrorCode.INVALID_ARGUMENT`를 반환합니다
* 그린스크린: `setChromaKey(ChromaKeyColor.GREEN)`과 채우기(블러 또는 이미지)
* `clearChromaKey()`는 인물 마스크만 복원하며, 채우기는 제거하지 않습니다

### 필터 또는 스티커가 나타나지 않음

* `setFilter` / `setSticker`에 `.fbd` **경로 또는 바이트**를 전달하세요(등록 API 없음)
* 업로드는 GL 스레드의 **다음** `processImage`에서 이루어집니다
* `externalContext = true`이면 해당 호출은 현재 GL 컨텍스트가 있는 상태에서 실행되어야 합니다
* `setFilterIntensity(0)`이면 LUT가 보이지 않습니다

## 성능과 메모리

### 미리보기가 느림

* `input.type = ImageFrame.FrameType.VIDEO`
* 캡처 해상도를 낮추세요
* 동시에 켜는 리셰이프 / 메이크업 / VB 효과를 줄이세요
* `processImage`는 메인 스레드가 아닌 카메라 또는 GL 스레드에서
* `engine.getStats().avgProcessTimeMs`를 확인하세요
* 갤러리 대형: 사진을 열 때 작은 미리보기 프레임을 만들고, 내보낼 때 원본을 한 번 처리하세요. [권장 사항](/ko/android/best-practices#large-stills)을 보세요

### 메모리가 늘어나거나 네이티브 크래시

* `convert()` 결과와 `processImage` 출력을 포함해 모든 `ImageFrame`에 `release()`를 호출하세요
* `ByteBuffer.allocateDirect`를 사용하세요
* 엔진은 하나이며, `onDestroy`에서 `engine.release()`를 호출하세요

### ANR

* HD 비디오에 대해 UI 스레드에서 `processImage`를 실행하지 마세요
* 메인 스레드에서 큰 `.fbd` / JPEG 파일을 로드하지 마세요

## 이미지와 카메라

### 픽셀 형식을 어떻게 바꾸나요?

`ImageFrame.convert(Format)`을 사용합니다(새 프레임 반환):

```java theme={null}
ImageFrame rgba = frame.convert(ImageFrame.Format.RGBA);
ImageFrame nv21 = frame.convert(ImageFrame.Format.NV21);
ImageFrame i420 = frame.convert(ImageFrame.Format.I420);
```

패킹된 픽셀: `getData()`. 플래너 YUV: `getDataY()` / `getDataU()` / `getDataV()` 또는 `getDataUV()`.

### Camera2 미리보기

1. `YUV_420_888`에서 `Image`
2. `ImageFrame.createWithAndroid420(...)`
3. 센서 + 전면 카메라에 맞게 `rotate` / `mirror`
4. `input.type = FrameType.VIDEO`
5. `processImage(input)`
6. 표시를 위해 convert 또는 `getTexture()`

### 회전

`rotate(ImageFrame.Rotation.ROTATION_90)`(0 / 90 / 180 / 270, 시계 방향)은 프레임을 변경합니다.

## 권한

온라인 인증:

```xml theme={null}
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
```

카메라 미리보기: `CAMERA`(API 23+에서 런타임 요청). 앱 저장소 밖의 파일 로그는 구버전 API에서 저장소 권한이 필요할 수 있습니다.

## 디버깅

엔진을 만들기 전에 로그를 켭니다.

```java theme={null}
BeautyEffectEngine.LogConfig logConfig = new BeautyEffectEngine.LogConfig();
logConfig.consoleEnabled = true;
logConfig.fileEnabled = true;
logConfig.level = BeautyEffectEngine.LogLevel.DEBUG;
logConfig.fileName = getFilesDir() + "/facebetter.log";
BeautyEffectEngine.setLogConfig(logConfig);
```

Setter는 성공 시 `0`을 반환합니다. **`-1` = 잘못된 인자, `-2` = 미초기화.** 전체 목록: [오류 처리](/ko/android/error-handling).

## 호환성

* Android 7.0 (API 24)+
* ABI: `arm64-v8a`, `armeabi-v7a`
* Maven: `net.pixpark:facebetter:2.0.0`

업그레이드: Maven / AAR 버전을 올리고, Clean, 재빌드한 뒤 라이선스 + 카메라 + 정지를 다시 테스트하세요.
