<!-- AUTO-GENERATED from SKILL.md frontmatters — do not edit manually -->
# android Skills Index

## File Match (auto-check against the file you are editing)

| Skill | File pattern | Keywords |
| ----- | ------------ | -------- |
| android-agp-upgrade | `build.gradle.kts`, `build.gradle`, `settings.gradle.kts`, `gradle.properties` | AGP 9, AGP upgrade, Gradle plugin, built-in Kotlin, new DSL, migrate AGP |
| **android-architecture** | `build.gradle.kts`, `settings.gradle.kts` | clean-architecture, module, layers, domain, UDF, unidirectional, feature module, core module, presentation layer, data layer |
| android-background-work | `**/*Worker.kt` | CoroutineWorker, WorkManager, doWork, PeriodicWorkRequest, OneTimeWorkRequest, @HiltWorker |
| **android-compose** | `**/*Screen.kt`, `**/*Composable*.kt`, `**/*Content.kt` | @Composable, Modifier, Column, Row, LazyColumn, setContent, recompose, remember, derivedStateOf, LaunchedEffect |
| android-compose-migration | `layout/*.xml`, `**/*Fragment.kt`, `**/*Activity.kt` | migrate to compose, xml to compose, compose migration, ComposeView, AndroidView, interoperability |
| **android-concurrency** | `**/*ViewModel.kt`, `**/*UseCase.kt`, `**/*Repository.kt` | suspend, viewModelScope, lifecycleScope, Flow, coroutine, Dispatcher, DispatcherProvider, GlobalScope |
| **android-deployment** | `build.gradle.kts`, `proguard-rules.pro` | signingConfigs, proguard, minifyEnabled, isMinifyEnabled, isShrinkResources, .aab, releaseKeystore |
| android-design-system | `**/*Screen.kt`, `**/ui/theme/**`, `**/compose/**` | MaterialTheme, Color, Typography, Modifier, Composable |
| **android-di** | `**/*Module.kt`, `**/*Component.kt` | @HiltAndroidApp, @Inject, @Provides, @Binds |
| android-edge-to-edge | `**/*Activity.kt`, `**/*Screen.kt`, `AndroidManifest.xml` | edge-to-edge, enableEdgeToEdge, system bars, WindowInsets, safeDrawingPadding, imePadding, status bar, navigation bar |
| android-legacy-navigation | `navigation/*.xml` | findNavController, NavDirections, navArgs |
| **android-legacy-security** | `**/*Activity.kt`, `**/*WebView*.kt`, `AndroidManifest.xml` | Intent, WebView, FileProvider, javaScriptEnabled |
| android-legacy-state | `**/*Fragment.kt`, `**/*Activity.kt` | repeatOnLifecycle, launchWhenStarted |
| android-navigation | `**/*Screen.kt`, `**/*Activity.kt`, `**/NavGraph.kt` | NavController, NavHost, composable, navArgument, deepLinks |
| android-navigation-3 | `**/*NavHost.kt`, `**/*Navigation*.kt`, `**/*Screen.kt` | Navigation 3, NavDisplay, NavKey, NavEntry, migrate navigation, multiple backstacks, nav3 |
| **android-navigation-type-safe** | `**/*NavHost.kt`, `**/*Graph.kt` | NavHost, navController, @Serializable |
| **android-networking** | `**/*Api.kt`, `**/*Service.kt`, `**/*Client.kt` | Retrofit, OkHttpClient, @GET, @POST |
| android-notifications | `**/*Notification*.kt`, `**/MainActivity.kt` | FirebaseMessaging, NotificationCompat, NotificationChannel, FCM |
| android-performance | `**/*Benchmark.kt`, `**/*Initializer.kt` | BaselineProfile, JankStats, recomposition |
| **android-persistence** | `**/*Dao.kt`, `**/*Database.kt`, `**/*Entity.kt` | @Dao, @Entity, RoomDatabase |
| android-resources | `strings.xml`, `**/*Screen.kt` | stringResource, plurals, R.string |
| **android-security** | `network_security_config.xml`, `AndroidManifest.xml` | EncryptedSharedPreferences, cleartextTrafficPermitted, intent-filter, api key, token storage, certificate pinning, root detection, secure storage |
| **android-state** | `**/*ViewModel.kt`, `**/*UiState.kt` | viewmodel, stateflow, livedata, uistate, MutableStateFlow, collectAsState, viewModelScope, UiState |
| **android-testing** | `**/*Test.kt`, `**/*Rule.kt` | @Test, runTest, composeTestRule, HiltAndroidTest, MockK, createAndroidComposeRule, MainDispatcherRule, @TestInstallIn |
| android-tooling | `build.gradle.kts`, `detekt.yml`, `.detekt/config.yml` | detekt, ktlint, lint, @Suppress, abortOnError, jlleitschuh |
| android-xml-views | `layout/*.xml`, `**/*Binding.java`, `**/*Binding.kt` | ViewBinding, ConstraintLayout, RecyclerView |

> Load matched skills: `<SKILLS>/android/<skill>/SKILL.md`. Load ALL that match — the tier model already filters irrelevant ones.
