--- title: Android SDK --- # Android SDK **Android 5.0+ (API 21+)** 를 지원하는 단일 `.aar` 패키지. Compose 및 기존 View 기반 앱 모두 지원하며 UI 프레임워크에 종속되지 않습니다. ## GitHub 데모 ::: tip 📦 [Captcha-La/android-demo](https://github.com/Captcha-La/android-demo) — 모든 통합 단계가 포함된 실행 가능한 예제. ::: ## 설치 The SDK ships as a single `.aar` you download from the [CaptchaLa dashboard](https://dash.captcha.la). Drop it into your app module's `libs/` folder and reference it from Gradle: ```groovy // settings.gradle (or repositories block) dependencyResolutionManagement { repositories { mavenCentral() } } // app/build.gradle android { defaultConfig { minSdk 21 } } dependencies { implementation 'la.captcha:captchala:1.0.2' // Maven Central } ``` AAR을 다운로드하여 수동으로 통합할 수도 있습니다: ```groovy // app/build.gradle (drop captchala.aar into app/libs/) android { defaultConfig { minSdk 21 ndk { abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' } } } dependencies { implementation files('libs/captchala.aar') implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'com.google.code.gson:gson:2.10.1' implementation 'org.bouncycastle:bcprov-jdk18on:1.77' } ``` Download: [dash.captcha.la/downloads](https://dash.captcha.la/downloads) (latest AAR). ```xml ``` Build and install the demo with: ```bash ./gradlew installDebug ``` ## 빠른 시작 ```kotlin import la.captcha.sdk.CaptchalaClient import la.captcha.sdk.CaptchalaConfig import la.captcha.sdk.CaptchalaError import la.captcha.sdk.CaptchalaListener import la.captcha.sdk.CaptchalaResult class LoginActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 1. Fetch a one-shot server_token from YOUR backend // (which calls the CaptchaLa server API with X-App-Key + X-App-Secret). val serverToken = runBlocking { fetchServerTokenFromYourBackend() } // 2. Build config — destroy any prior client so a fresh state is built. CaptchalaClient.destroy() val client = CaptchalaClient.getClient(applicationContext).init( CaptchalaConfig.Builder() .appKey("YOUR_APP_KEY") .action("login") // login, register, pay, … .lang("en") // en, zh-CN, zh-TW, ja, ko, ms, vi, id .theme("light") // "light" | "dark" .enableVoice(true) .enableOfflineMode(true) .serverToken(serverToken) .onServerTokenExpired { fetchServerTokenFromYourBackend() } .build() ) // 3. Listen for terminal events. client.setListener(object : CaptchalaListener { override fun onReady() { /* challenge UI ready */ } override fun onSuccess(result: CaptchalaResult) { // Send result.passToken to your backend for validation. sendToBackend(result.passToken) } override fun onFail(error: CaptchalaError) { /* recoverable */ } override fun onError(error: CaptchalaError) { /* terminal */ } override fun onClose() { /* user dismissed */ } }) // 4. Open the CAPTCHA from a button tap. findViewById