Claude Skills Guide

Claude Code Kotlin Android Development Workflow Guide

Developing Android applications with Kotlin becomes significantly more productive when you integrate Claude Code into your workflow This guide covers practical strategies for using Claude and its skill system to accelerate Android development, from project scaffolding to testing and documentation.

Setting Up Claude Code for Android Development

Before integrating Claude into your Android workflow, ensure you have the necessary tools installed You’ll need Android Studio or the command-line SDK tools, along with Claude Code installed on your system. The combination of these tools creates a powerful development environment where Claude handles reasoning and code generation while you maintain full control over your project.

Prerequisites

Verify your setup with these commands:

# Check Java version
java -version

# Initialize or check Gradle wrapper
gradle wrapper --gradle-version 8.4
./gradlew -v

# Verify Android SDK
echo $ANDROID_HOME

Create your project structure before inviting Claude into your development sessions. When working on Kotlin Android projects, having your build.gradle.kts files and project structure visible to Claude allows for accurate context-aware suggestions.

Project Structure Best Practices

Organize your Kotlin Android project for maintainability:

app/
├── src/main/
│   ├── java/com/example/app/
│   │   ├── data/           # Data layer
│   │   ├── domain/         # Business logic
│   │   ├── presentation/   # UI layer
│   │   └── di/             # Dependency injection
│   └── res/
└── build.gradle.kts

Claude Skills for Android Development

Claude’s skill system extends its capabilities for specific development scenarios. For Android development with Kotlin, several skills prove particularly valuable.

The TDD Skill for Android

The tdd skill transforms how you approach Android development. Activate it in your Claude session:

/tdd

When working on Android features, describe your intended implementation. The tdd skill prompts Claude to generate test cases first, then build your Kotlin code against those tests. This approach works exceptionally well with Android’s testing frameworks.

// Example: Test-first approach for a repository class
@Test
fun `should emit items from local database`() = runTest {
    val repository = UserRepository(localDataSource, remoteDataSource)

    repository.getUsers()
        .test()
        .assertValue(listOf(user1, user2))
}

@Test
fun `should fallback to cache on network failure`() = runTest {
    whenever(remoteDataSource.fetchUsers())
        .thenThrow(NetworkException())

    val repository = UserRepository(localDataSource, remoteDataSource)

    repository.getUsers()
        .test()
        .assertValue(cachedUsers)
}

After writing tests, Claude generates the corresponding implementation:

class UserRepository(
    private val localDataSource: UserLocalDataSource,
    private val remoteDataSource: UserRemoteDataSource
) {
    fun getUsers(): Flow<List<User>> = localDataSource.getUsers()
}

Documentation Generation with the PDF Skill

The pdf skill helps generate documentation for your Android project. After completing feature development, use it to create API documentation or user guides:

/pdf

This skill extracts information from your codebase and formats it into professional documents. For Android projects, you can generate class documentation, API reference sheets, or architecture decision records.

You can also ask Claude directly to generate KDoc comments for your ViewModels, repositories, and use cases without invoking a skill:

/**
 * ViewModel responsible for managing user authentication state.
 *
 * @property authRepository Repository handling authentication operations
 * @property savedStateHandle State persistence across process death
 *
 * @throws AuthException When credentials are invalid
 * @throws NetworkException When network is unavailable
 */
class AuthViewModel(
    private val authRepository: AuthRepository,
    savedStateHandle: SavedStateHandle
) : ViewModel() {
    // Implementation
}

Frontend Design Considerations

When building Android UIs with Jetpack Compose, the frontend-design skill provides valuable guidance on component design and layout optimization. While designed for web development, its principles translate well to Compose layouts:

/frontend-design

Claude will suggest composition patterns, state management approaches, and accessibility considerations for your Android UI code.

The xlsx Skill for Build Management

When managing Android build variants, Gradle configurations, or dependency versions, the xlsx skill helps generate configuration files and track dependency changes:

/xlsx

Use this skill to create spreadsheets that track your dependency versions, build variant configurations, or API endpoints across environments. This proves valuable when managing multi-module Android projects with complex dependency trees.

Practical Android Development Workflow

Project Initialization and Structure

Start each Android project with a clear architecture in mind. Use Claude to draft your project structure:

  1. Define your package structure (data, domain, presentation layers)
  2. Establish dependency injection with Hilt or Koin
  3. Set up navigation with Jetpack Navigation Component

When creating new features, describe your requirements to Claude:

I need to build a user profile screen with Jetpack Compose.
The screen should display user name, email, and avatar.
It should fetch data from a ViewModel and handle loading and error states.

Claude generates the complete Compose implementation:

@Composable
fun UserProfileScreen(
    viewModel: UserProfileViewModel = hiltViewModel()
) {
    val uiState by viewModel.uiState.collectAsState()

    when (val state = uiState) {
        is UserProfileUiState.Loading -> LoadingIndicator()
        is UserProfileUiState.Success -> UserProfileContent(state.user)
        is UserProfileUiState.Error -> ErrorMessage(state.message)
    }
}

Dependency Injection with Hilt

Hilt is the standard for Android dependency injection. Claude Code can help you set up DI modules correctly:

@Module
@InstallIn(SingletonComponent::class)
object NetworkModule {

    @Provides
    @Singleton
    fun provideOkHttpClient(
        loggingInterceptor: HttpLoggingInterceptor
    ): OkHttpClient {
        return OkHttpClient.Builder()
            .addInterceptor(loggingInterceptor)
            .connectTimeout(30, TimeUnit.SECONDS)
            .readTimeout(30, TimeUnit.SECONDS)
            .build()
    }

    @Provides
    @Singleton
    fun provideRetrofit(
        okHttpClient: OkHttpClient,
        moshi: Moshi
    ): Retrofit {
        return Retrofit.Builder()
            .baseUrl("https://api.example.com/")
            .client(okHttpClient)
            .addConverterFactory(MoshiConverterFactory.create(moshi))
            .build()
    }
}

Coroutines and Flow for Async Operations

Kotlin Coroutines and Flow are essential for responsive Android apps. Here’s a practical pattern for handling network and cache together:

class UserRepository(
    private val userApi: UserApi,
    private val userDao: UserDao
) {

    fun getUsers(): Flow<List<User>> = flow {
        // Emit from network
        val networkUsers = userApi.getUsers()
        emit(networkUsers)

        // Cache to database
        userDao.insertUsers(networkUsers)
    }.catch { exception ->
        // Fallback to cached data on error
        emit(userDao.getAllUsers())
    }.flowOn(Dispatchers.IO)
}

Ask Claude Code to explain async patterns, debug coroutine issues, or optimize flow operations.

Dependency Management

Claude helps manage Android dependencies by understanding version compatibility. When adding libraries, ask Claude to verify Gradle dependency versions work together:

Add Retrofit and OkHttp to my Android project.
Make sure versions are compatible with Kotlin 1.9.x

Claude suggests appropriate dependencies and version combinations:

// build.gradle.kts
dependencies {
    implementation("com.squareup.retrofit2:retrofit:2.9.0")
    implementation("com.squareup.retrofit2:converter-gson:2.9.0")
    implementation("com.squareup.okhttp3:okhttp:4.12.0")
    implementation("com.squareup.okhttp3:logging-interceptor:4.12.0")
}

You can also ask Claude to audit your existing dependencies and identify outdated packages that might have security vulnerabilities.

Testing Strategy

Implement a comprehensive testing strategy using the tdd skill. For Android, focus on three testing layers:

Unit Tests: Test business logic in ViewModels and UseCases Instrumented Tests: Test Android-specific components UI Tests: Verify user interactions with Espresso or Compose Testing

// ViewModel unit test example
@OptIn(ExperimentalCoroutinesApi::class)
@Test
fun `should show error when user not found`() = runTest {
    val viewModel = UserProfileViewModel(
        userRepository = FailingUserRepository()
    )

    viewModel.loadUser("invalid-id")

    assertTrue(viewModel.uiState.value is UserProfileUiState.Error)
}

Debugging with Claude Code

When encountering Android-specific issues, provide Claude with targeted context:

For example:

I'm getting a NullPointerException in my ViewModel when
accessing user.name. The user object is fetched from Room
database. Here's the relevant code: [paste code]

Include the stack trace and relevant code snippets for accurate assistance. Claude recognizes common Android patterns and suggests targeted solutions.

Daily Integration Strategy

Structure your Claude Code usage throughout the development day:

  1. Morning Code Review: Use Claude Code to review your changes from the previous day
  2. Feature Development: Generate scaffold code, then customize for your needs
  3. Debugging: Paste error logs and stack traces for analysis
  4. Documentation: Generate KDoc comments and README updates

Memory and Knowledge Management

For ongoing Android projects, consider integrating supermemory to maintain project context across sessions:

/supermemory

This skill helps Claude remember architectural decisions, previous refactorings, and project-specific conventions. When you return to a project after a break, Claude accesses your stored knowledge and provides contextually relevant suggestions.

Automation with Claude Code Scripts

Beyond interactive sessions, you can automate repetitive Android development tasks. Create scripts that handle:

#!/bin/bash
# Build and upload debug APK
./gradlew assembleDebug
adb install app/build/outputs/apk/debug/app-debug.apk

Call these scripts directly from Claude sessions for streamlined workflows.

Advanced Integration: Custom Skills

For teams working on large Android projects, consider creating custom skills that encode your organization’s patterns. See how to write a skill .md file for the format details. A custom skill might include:

Store these custom skills in your team’s shared knowledge base and load them for relevant projects.

Best Practices for Claude-Assisted Android Development

Maintain code quality by following these guidelines when working with Claude:

Review Generated Code: Always verify Claude’s suggestions before accepting them. Understand the generated code, especially for security-sensitive operations.

Iterate Gradually: Make small, incremental changes rather than requesting large feature implementations at once. This approach makes debugging easier and keeps your commit history clean.

Activate Skills at Session Start: Use /tdd for test-heavy features, /pdf for documentation, and /frontend-design for UI work at the beginning of your session to give Claude the right context.

Use Skills Selectively: Activate only the skills relevant to your current task. Loading too many skills can reduce context quality and slow down responses.

Document Your Conventions: Use supermemory to store project-specific patterns. This creates institutional knowledge that improves over time.

Keep Your Project Structure Consistent: Claude works best when your Android project follows standard conventions. Use the recommended directory structure for source sets, resources, and tests.

Conclusion

Integrating Claude Code into your Kotlin Android development workflow transforms how you build mobile applications. The combination of AI-assisted code generation, structured testing approaches with the tdd skill, and documentation capabilities creates a comprehensive development environment. Start with simple implementations and gradually adopt more advanced workflows as your team becomes comfortable with the collaboration pattern.

Experiment with different skill combinations to find what works best for your specific project needs. The key is maintaining developer control while using Claude’s capabilities for productivity gains.


Built by theluckystrike — More at zovo.one