This is a multi-module Android project. Key paths:
app/for the Android application module (Compose UI, Android entry points).core/,domain/,data/for shared, clean-architecture layers.app/src/main/for production code, resources, and assets.app/src/test/for unit tests.docs/for development and build guides.
Package by feature (not by layer), e.g. com.shadowcheck.mobile.wifi/ with data/, domain/, presentation/ subpackages.
./gradlew clean build— full build with checks../gradlew assembleDebug— build debug APK../gradlew installDebug— install on a connected device../gradlew test— run unit tests../gradlew detekt— run static analysis (must be clean before PR).
- Kotlin conventions, 4-space indentation, max line length 120.
- Use meaningful names; avoid decompilation artifacts like
var1. - Naming patterns:
- ViewModels:
WifiViewModel.kt - Use cases:
GetAllWifiNetworksUseCase.kt - Repositories:
WifiNetworkRepository.kt/WifiNetworkRepositoryImpl.kt
- ViewModels:
- DI via Hilt with KAPT (do not migrate to KSP without explicit approval).
- Frameworks: JUnit4, MockK, coroutines test.
- Coverage targets (new code): Use cases 100%, ViewModels 90%+, Repos 80%+.
- Naming:
*Test.ktinapp/src/test/(e.g.,GetAllWifiNetworksUseCaseTest).
- Conventional commits:
type(scope): subject(e.g.,feat(wifi): Add WPA3 detection). - PRs must include: clear description, tests run, screenshots for UI changes, and linked issues.
- Run
./gradlew detektand./gradlew testbefore opening a PR. - Address review feedback in new commits (do not force-push).
- Copy
local.properties.exampletolocal.propertiesand add API keys locally. - Never commit secrets; use
SecureApiKeyManagerfor API key handling.