본문으로 건너뛰기

시작하기

사전 요구사항

Klleon Ondevice SDK를 사용하기 전에 다음 준비사항이 필요합니다:

  1. Kleon Studio 계정: SDK 기능을 사용하려면 Kleon Studio 계정이 필요합니다. 계정이 없다면 먼저 가입해 주세요.
  2. SDK 키 발급: 도메인 등록 후, 해당 도메인에서 사용할 고유한 sdk_key가 발급됩니다. 이 키는 SDK 초기화에 필요합니다.
  3. 아바타 ID: 사용할 AI 아바타의 avatarId가 필요합니다.

권한

AndroidManifest.xml

AndroidManifest.xml에 필요한 권한을 추가하세요:

<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" />

코드에서 권한 처리

class MainActivity : ComponentActivity() {
private val requiredPermissions = arrayOf(
Manifest.permission.RECORD_AUDIO
)

private val permissionLauncher = registerForActivityResult(
ActivityResultContracts.RequestMultiplePermissions()
) { permissions ->
handlePermissionResults(permissions)
}

private fun checkPermissions(): Boolean {
return requiredPermissions.all { permission ->
ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED
}
}

private fun requestPermissions() {
val permissionsToRequest = requiredPermissions.filter { permission ->
ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED
}.toTypedArray()

if (permissionsToRequest.isNotEmpty()) {
permissionLauncher.launch(permissionsToRequest)
}
}

private fun handlePermissionResults(permissions: Map<String, Boolean>) {
val deniedPermissions = permissions.filter { !it.value }.keys

if (deniedPermissions.isEmpty()) {
Log.d("MainActivity", "모든 권한이 허용됨")
initializeApp()
} else {
Log.w("MainActivity", "권한이 거부됨: $deniedPermissions")
// 거부된 권한 처리
}
}
}

SDK 초기화

기본 설정

import io.klleon.ondevice.KlleonOndeviceSdk
import io.klleon.ondevice.ResourceManager
import io.klleon.ondevice.render.KlleonSdkView

// 앱 전역에서 단일 인스턴스를 공유
object SdkConfig {
val sdk = KlleonOndeviceSdk()
}

class MainActivity : ComponentActivity() {
private val klleonOndeviceSdk = SdkConfig.sdk
private val resourceManager = ResourceManager()

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

if (checkPermissions()) {
initializeApp()
} else {
requestPermissions()
}
}

private fun initializeApp() {
setContent {
OndeviceSampleTheme {
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
WorkerScreen(klleonOndeviceSdk = klleonOndeviceSdk)
}
}
}

// 리소스 초기화 (캐시 복사 + YUV 변환 + 메모리 적재)
resourceManager.init(
context = this,
mp4FileName = "loop_sample.mp4",
npzFileName = "loop_sample.npz",
styleFileName = "loop_sample.style",
avatarId = "character_001",
onSuccess = {
// 리소스 준비 완료 — play() 호출 가능
},
onError = { error ->
Log.e("MainActivity", "리소스 준비 실패", error)
}
)
}
}

SDK 시작 (play)

// play()는 suspend 함수이므로 코루틴에서 호출
CoroutineScope(Dispatchers.IO).launch {
klleonOndeviceSdk.play(
context = this@Activity, // Context
klleonSdkViewInstance = sdkView, // KlleonSdkView 인스턴스
sdkKey = "YOUR_SDK_KEY", // SDK 키
avatarId = "character_001", // 아바타 ID
language = "ko_kr" // 언어 (ko_kr, en_us, ja_jp)
)
}

매개변수:

매개변수타입필수설명
contextContextO현재 컨텍스트
klleonSdkViewInstanceKlleonSdkView?O렌더링 뷰 인스턴스
sdkKeyStringOSDK 인증 키
avatarIdStringOAI 아바타 ID
languageStringO언어 코드 (ko_kr, en_us, ja_jp)

다음 단계

설정 완료 후:

  1. 사용 가능한 메서드는 API 참조를 확인하세요
  2. 최적의 통합을 위해 가이드를 따르세요
  3. 구현 패턴은 사용 예제를 확인하세요