시작하기
사전 요구사항
Klleon Ondevice SDK를 사용하기 전에 다음 준비사항이 필요합니다:
- Kleon Studio 계정: SDK 기능을 사용하려면 Kleon Studio 계정이 필요합니다. 계정이 없다면 먼저 가입해 주세요.
- SDK 키 발급: 도메인 등록 후, 해당 도메인에서 사용할 고유한
sdk_key가 발급됩니다. 이 키는 SDK 초기화에 필요합니다. - 아바타 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)
)
}
매개변수:
| 매개변수 | 타입 | 필수 | 설명 |
|---|---|---|---|
context | Context | O | 현재 컨텍스트 |
klleonSdkViewInstance | KlleonSdkView? | O | 렌더링 뷰 인스턴스 |
sdkKey | String | O | SDK 인증 키 |
avatarId | String | O | AI 아바타 ID |
language | String | O | 언어 코드 (ko_kr, en_us, ja_jp) |
다음 단계
설정 완료 후: