Community编程与开发github.com

Drjacky/claude-android-ninja

Agent Skill for Android development with Kotlin and Jetpack Compose, covering modular architecture, Navigation3, Gradle conventions, dependency management, and testing best practices.

兼容平台Claude Code~Codex CLI~Cursor
npx add-skill Drjacky/claude-android-ninja

name: claude-android-ninja description: Build Android apps with Kotlin, Jetpack Compose, MVVM, Hilt, Room 3 (KSP, SQLiteDriver, Flow/suspend DAOs), and multi-module architecture. Triggers on requests to create Android projects, modules, screens, ViewModels, or repositories. license: Apache-2.0 metadata: author: DrJacky version: 1.0.0 documentation: https://github.com/Drjacky/claude-android-ninja tags: [android, kotlin, compose, mvvm, hilt, room, room3, datastore, paging, gradle, mobile]

Android Kotlin Compose Development

Use when building Android apps with Kotlin, Jetpack Compose, MVVM, Hilt, Room 3, DataStore, Paging 3, or multi-module projects. Triggers on requests to create Android projects, screens, ViewModels, repositories, feature modules, or asks about Android architecture patterns.

Quick Reference

TaskReference File
Project structure & modulesmodularization.md
Architecture layers, (Domain, Data, UI, Common, ...)architecture.md
Compose patterns, Material motion, animation, modifiers, stabilitycompose-patterns.md
Accessibility, TalkBack, label copy, live regions, Espresso a11y checksandroid-accessibility.md
Notifications, foreground services, media/audio, PiP, sharesheetandroid-notifications.md
Data sync & offline-first patternsandroid-data-sync.md
Material 3 theming, spacing tokens, category fit, dynamic colorsandroid-theming.md
Navigation3, adaptive navigation, large-screen quality tiersandroid-navigation.md
Kotlin best practices, View lifecycle interopkotlin-patterns.md
Coroutines best practicescoroutines-patterns.md
Gradle, product flavors, BuildConfig, build performancegradle-setup.md
Testing approachtesting.md
Internationalization & localizationandroid-i18n.md
Icons, adaptive launcher specs, custom drawingandroid-graphics.md
Runtime permissionsandroid-permissions.md
Kotlin delegation patternskotlin-delegation.md
Crash reportingcrashlytics.md
StrictMode guardrailsandroid-strictmode.md
Multi-module dependenciesdependencies.md
Code quality (Detekt)code-quality.md
Code coverage (JaCoCo)android-code-coverage.md
Security, Play Integrity (Standard/Classic), server decode, requestHash/nonce, tiered policy, remediation; Credential Manager; local root checks as supplementaryandroid-security.md
Design patternsdesign-patterns.md
Performance, Play Vitals, optional CI reporting (Play Developer Reporting API), startup, recomposition, jank, batteryandroid-performance.md
Debugging, Logcat levels, ANR, Gradle error patterns, R8, memory leaksandroid-debugging.md
Migration guides (XML, RxJava, Navigation, Compose, Room 2→3)migration.md

Workflow Decision Tree

Creating a new project? → Start with assets/settings.gradle.kts.template for settings and module includes
→ Start with assets/libs.versions.toml.template for the version catalog
→ Copy all files from assets/convention/ to build-logic/convention/src/main/kotlin/
→ Create build-logic/settings.gradle.kts (see assets/convention/QUICK_REFERENCE.md)
→ Add includeBuild("build-logic") to root settings.gradle.kts
→ Add plugin entries to gradle/libs.versions.toml (see assets/convention/QUICK_REFERENCE.md) → Copy assets/proguard-rules.pro.template to app/proguard-rules.pro → Read modularization.md for structure and module types
→ Use gradle-setup.md for build files and build logic

Configuring Gradle/build files? → Use gradle-setup.md for module build.gradle.kts patterns
→ Use gradle-setup.md → "Build Performance" for optimization workflow, diagnostics, and bottleneck troubleshooting
→ Copy convention plugins from assets/convention/ to build-logic/ in your project
→ See assets/convention/QUICK_REFERENCE.md for setup instructions and examples
→ Copy assets/proguard-rules.pro.template to app/proguard-rules.pro for R8 rules

Setting up code quality / Detekt? → Use code-quality.md for Detekt convention plugin setup
→ Start from assets/detekt.yml.template for rules and enable Compose rules

Adding or updating dependencies? → Follow dependencies.md
→ Update assets/libs.versions.toml.template if the dependency is missing

Adding a new feature/module? → Follow module naming in modularization.md
→ Implement Presentation in the feature module
→ Follow dependency flow: Feature → Core/Domain → Core/Data

Building UI screens/components? → Read compose-patterns.md for screen architecture, state, components, modifiers
→ Use compose-patterns.md -> State Management -> "Loading and refresh UX" for stable layout during loads and refreshes (avoid full-screen spinners that wipe context)
→ Use android-theming.md for Material 3 colors, typography, and shapes
Always align Kotlin code with kotlin-patterns.md
→ Create Screen + ViewModel + UiState in the feature module
→ Use shared components from core/ui when possible

Handling State and Events? → Use StateFlow for state; Channel + receiveAsFlow() for strict one-shot UI commands; SharedFlow for multicast or replay-intended events (see coroutines-patterns.md) → Survive process death with SavedStateHandle (see compose-patterns.md)

Setting up app theme (colors, typography, shapes)? → Follow android-theming.md for Material 3 theming and dynamic colors
→ Use semantic color roles from MaterialTheme.colorScheme (never hardcoded colors); pair every fill with its on* partner - see Color Pairing Rules
→ Declare the full M3 color set in Color.kt (surface containers, dim/bright, *Fixed/*FixedDim) so dynamic color and contrast variants stay consistent - see Full Color Role Reference and Surface Container Hierarchy
→ Express depth via container tone first, shadows only for components that float over arbitrary content - see Tonal Elevation vs Shadows
→ Use outline for interactive borders/focus, outlineVariant for decorative dividers - see outline vs outlineVariant
→ Support light/dark themes with user preference toggle
→ Enable dynamic color (Material You) for API 31+, harmonize brand/extended colors against primary - see Brand Color Harmonization
→ Honor the system contrast slider on Android 14+ (API 34) by shipping Medium/High-contrast scheme variants and reading UiModeManager.getContrast() - see User Contrast Preference
→ For region-local palette overrides (destructive scopes, on-media toolbars), use a nested MaterialTheme with colorScheme.copy(...) - see Scoped Themes
→ Pick Card / OutlinedCard / ElevatedCard by surface separation, not importance, and override shapes at the token level - see Card Variants and Component Shape Defaults

Writing any Kotlin code?Always follow kotlin-patterns.md
→ Ensure practices align with architecture.md, modularization.md, and compose-patterns.md

Setting up data/domain layers? → Read architecture.md
→ Hilt @Binds, scopes, and DI anti-patterns: architecture.md -> Domain Layer -> "Dependency Injection Setup"
→ Create Repository interfaces in core/domain
→ Create implementations in core/data using Room 3/Retrofit/DataStore → Use DataStore for simple key-value pairs, Room 3 for complex relational data (suspend / Flow DAOs, SQLiteDriver)

Implementing Lists and Scrolling? → Use LazyColumn/LazyRow with stable keys and contentType (see compose-patterns.md) → For large datasets, use Paging 3 (see compose-patterns.md -> "Paging 3")

Handling Navigation? → Use Navigation3 for adaptive navigation (see android-navigation.md) → Avoid navigation anti-patterns (see android-navigation.md -> "Navigation Anti-Patterns")

Optimizing Performance? → Follow the Performance Checklist in android-performance.md → If the user asks for automated Play Console vitals (CI/Slack, no Play Console UI), use android-performance.mdOptional: Play Vitals observability (Play Developer Reporting API) → Use BasicTextField2 for high-frequency text input

Testing? → Read testing.md for testing philosophy and patterns → Use Turbine for testing Flow emissions (see testing.md -> "Testing Flow Emissions with Turbine") → Create Repository interfaces in core/domain → Implement Repository in core/data → Create DataSource + DAO in core/data

Implementing offline-first or data synchronization? → Follow android-data-sync.md for sync strategies, conflict resolution, and cache invalidation
→ Use Room 3 as single source of truth with sync metadata (syncStatus, lastModified)
→ Schedule background sync with WorkManager
→ Monitor network state before syncing

Setting up navigation? → Follow android-navigation.md for Navigation3 architecture, state management, and adaptive navigation
→ See modularization.md for feature module navigation components (Destination, Navigator, Graph)
→ Configure navigation graph in the app module
→ Use feature navigation destinations and navigator interfaces

Adding tests? → Use testing.md for patterns and examples
→ Use testing.md → "Screenshot Testing" for Compose Preview Screenshot Testing setup
→ Keep test doubles in core/testing

Handling runtime permissions? → Follow android-permissions.md for manifest declarations and Compose permission patterns
→ Request permissions contextually and handle "Don't ask again" flows

Showing notifications or foreground services? → Use android-notifications.md for notification channels, styles, actions, and foreground services
→ Check POST_NOTIFICATIONS permission on API 33+ before showing notifications
→ Create notification channels at app startup (required for API 26+)

Sharing logic across ViewModels or avoiding base classes? → Use delegation via interfaces as described in kotlin-delegation.md
→ Prefer small, injected delegates for validation, analytics, or feature flags

Adding crash reporting / monitoring? → Follow crashlytics.md for provider-agnostic interfaces and module placement
→ Use DI bindings to swap between Firebase Crashlytics or Sentry

Enabling StrictMode guardrails? → Follow android-strictmode.md for app-level setup and Compose compiler diagnostics
→ Use Sentry/Firebase init from crashlytics.md to ship StrictMode logs

Choosing design patterns for a new feature, business logic, or system? → Use design-patterns.md for Android-focused pattern guidance
→ Align with architecture.md and modularization.md

Measuring performance regressions or startup/jank? → Use android-performance.md for Macrobenchmark, Baseline Profiles, and ProfileInstaller setup
→ Keep benchmark module aligned with benchmark build type in gradle-setup.md
→ If the user explicitly requests to investigate jank or add custom trace points, use android-performance.md for System Tracing (androidx.tracing) setup

Setting up app initialization or splash screen? → Follow android-performance.md → "App Startup & Initialization" for App Startup library, lazy init, and splash screen
→ Avoid ContentProvider-based auto-initialization - use Initializer interface instead
→ Use installSplashScreen() with setKeepOnScreenCondition for loading state

Adding icons, images, or custom graphics? → Use android-graphics.md for Material Symbols icons and custom drawing
→ Download icons via Iconify API or Google Fonts (avoid deprecated Icons.Default.* library)
→ Use Modifier.drawWithContent, drawBehind, or drawWithCache for custom graphics

Creating custom UI effects (glow, shadows, gradients)? → Check android-graphics.md for Canvas drawing, BlendMode, and Palette API patterns
→ Use rememberInfiniteTransition for animated effects

Ensuring accessibility compliance (TalkBack, touch targets, color contrast)? → Follow android-accessibility.md for semantic properties and WCAG guidelines
→ Provide contentDescription for all icons and images
→ Ensure 48dp × 48dp minimum touch targets
→ Test with TalkBack and Accessibility Scanner

Working with images and color extraction? → Use android-graphics.md → "Image Loading with Coil3" for AsyncImage, SubcomposeAsyncImage, rememberAsyncImagePainter, and Hilt ImageLoader setup
→ Use android-graphics.md for Palette API and color extraction

Implementing complex coroutine flows or background work? → Follow coroutines-patterns.md for structured concurrency patterns
→ Use appropriate dispatchers (IO, Default, Main) and proper cancellation handling
→ Prefer StateFlow (and SharedFlow where appropriate) over Channel for observable state; use Channel for one-shot commands as in coroutines-patterns.md
→ Use callbackFlow to wrap Android callback APIs (connectivity, sensors, location) into Flow
→ Use suspendCancellableCoroutine for one-shot callbacks (Play Services tasks, biometrics)
→ Use combine() to merge multiple Flows in ViewModels, shareIn to share expensive upstream
→ Handle backpressure with buffer, conflate, debounce, or sample

Need to share behavior across multiple classes? → Use kotlin-delegation.md for interface delegation patterns
→ Avoid base classes; prefer composition with delegated interfaces
→ Examples: Analytics, FormValidator, CrashReporter

Refactoring existing code or improving architecture? → Review architecture.md for layer responsibilities
→ Read architecture.md -> "Cross-cutting anti-patterns (quick reference)" for common layering mistakes
→ Check design-patterns.md for applicable patterns
→ Follow kotlin-patterns.md for Kotlin-specific improvements
→ Ensure compliance with modularization.md dependency rules

Debugging crashes, ANRs, or obfuscated stack traces? → Follow android-debugging.md for Logcat, ANR traces, and Compose recomposition debugging
→ Use android-debugging.md for R8 mapping files and manual de-obfuscation
→ See gradle-setup.md for R8 build configuration and keep rules

Auditing R8 keep rules / fixing release size or release-only crashes? → Use gradle-setup.md → "R8 Keep-Rules Audit" for the redundant-library list, impact hierarchy, subsuming-rule detection, reflection-narrowing playbook, and AGP 9 default-optimization re-audit

Going edge-to-edge / fixing IME, insets, or system-bar bugs? → Use compose-patterns.md → "Edge-to-Edge (Mandatory on API 36)" for IME insets (fitInside(WindowInsetsRulers.Ime.current) vs imePadding() ordering and double-padding pitfalls), system-bar appearance/contrast (isAppearanceLight*Bars, isNavigationBarContrastEnforced), NavigationSuiteScaffold / pane-scaffold inset handling, full-screen Dialog decorFitsSystemWindows, StatusBarProtection scrim, and the per-Activity edge-to-edge checklist
→ Manifest must set android:windowSoftInputMode="adjustResize" for any Activity hosting text input

Debugging performance issues or memory leaks? → Enable android-strictmode.md for development builds
→ Use android-performance.md for profiling and benchmarking
→ Use android-debugging.md for LeakCanary and heap dump analysis
→ Check coroutines-patterns.md for coroutine cancellation patterns

Setting up CI/CD or code quality checks? → Use code-quality.md for Detekt baseline and CI integration
→ Use gradle-setup.md for build cache and convention plugins
→ Use testing.md for test organization and coverage

Handling sensitive data or privacy concerns? → Follow crashlytics.md for data scrubbing patterns
→ Use android-permissions.md for proper permission justification
→ Check android-strictmode.md for detecting cleartext network traffic

Migrating legacy code (LiveData, Fragments, Accompanist, RxJava, Room 2.x)? → Use migration.md for all migration paths (including Room 2.x → Room 3)
→ Follow architecture.md for MVVM patterns

Adding Compose animations? → Use compose-patterns.md → "Animation" for AnimatedVisibility, AnimatedContent, animate*AsState, Animatable, shared elements
→ Use graphicsLayer for GPU-accelerated transforms (no recomposition)
→ Always provide label parameter for Layout Inspector debugging

Using side effects (LaunchedEffect, DisposableEffect)? → Use compose-patterns.md → "Side Effects" for effect selection guide
LaunchedEffect(key) for state-driven coroutines, rememberCoroutineScope for event-driven
DisposableEffect for listener/resource cleanup, always include onDispose
LifecycleResumeEffect for onResume/onPause work (camera, media), LifecycleStartEffect for onStart/onStop (location, sensors)

Working with Modifier ordering or custom modifiers? → Use compose-patterns.md → "Modifiers" for chain ordering rules and patterns
→ Use Modifier.Node for custom modifiers (not deprecated Modifier.composed)
→ Order: size → padding → drawing → interaction

Migrating from Accompanist or deprecated Compose APIs? → Use migration.md for Accompanist, Compose API, Material, Edge-to-Edge, and Room upgrades
→ See compose-patterns.md → "Deprecated Patterns & Migrations" for a summary list

Optimizing Compose recomposition or stability? → Use compose-patterns.md for @Immutable/@Stable annotations
→ Use android-performance.md → "Compose Recomposition Performance" for three phases, deferred state reads, Strong Skipping Mode
→ Check gradle-setup.md for Compose Compiler metrics and stability reports
→ Use kotlin-patterns.md for immutable data structures

Working with databases (Room 3)? → Define DAOs and entities in core/database per modularization.md; use androidx.room3, KSP, and setDriver(BundledSQLiteDriver()) on the builder (see app.android.room convention)
→ Use testing.md for in-memory database testing and Room 3 migration tests
→ Follow architecture.md for repository patterns
→ Upgrading from Room 2.x: migration.md → Room 2.x to Room 3

Need internationalization/localization (i18n/l10n)? → Use android-i18n.md for string resources, plurals, and RTL support
→ Follow compose-patterns.md for RTL-aware Compose layouts
→ Use testing.md for locale-specific testing

Implementing network calls (Retrofit)? → Use architecture.md → "Network Layer Setup" for Retrofit service interfaces, Hilt NetworkModule, and AuthInterceptor
→ Define API interfaces in core/network per modularization.md
→ Follow dependencies.md for Retrofit, OkHttp, and serialization setup
→ Handle errors with generic Result<T> from kotlin-patterns.md

Creating custom lint rules or code checks? → Use code-quality.md for Detekt custom rules
→ Follow gradle-setup.md for convention plugin setup
→ Check android-strictmode.md for runtime checks

Need code coverage reporting? → Use android-code-coverage.md for JaCoCo setup
→ Follow testing.md for test strategies
→ Check gradle-setup.md for convention plugin integration

Implementing security features (encryption, biometrics, pinning)? → Use android-security.md for comprehensive security guide
→ Follow android-permissions.md for runtime permissions
→ Check crashlytics.md for PII scrubbing and data privacy

Implementing fraud-resistant or high-value flows (payments, session bootstrap, integrity-gated APIs)? → Read android-security.md: Device trust and abuse resistance, Play Integrity API (prerequisites, Standard vs Classic, server checklist, errors, remediation), Root and Emulator Detection (how this fits next to Play Integrity), Security Checklist
→ If Cloud Console / Play Console enablement or the Google Cloud project number is missing, list the missing prerequisites (see that guide) and stop before wiring client code

相关技能