Thank you for your interest in contributing!
- Fork the repository
- Create a feature branch:
git checkout -b feat/your-feature - Install the commit-msg hook:
ln -sf ../../scripts/commit-msg-hook.sh .git/hooks/commit-msg - Make your changes
- Run checks:
./gradlew testDebugUnitTest lintDebug assembleDebug - Commit with a clear message following Conventional Commits
- Push and open a Pull Request against
main
All commits must follow Conventional Commits:
<type>(<scope>): <description>
Types: feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert
Examples:
feat: add voice input supportfix(chat): resolve SSE reconnection loopchore: bump dependencies
CI validates commit messages on all PRs.
- JDK 17 (Temurin recommended)
- Android SDK (API 34)
- Python 3 (for runtime asset generation)
- Network access on first build (downloads Termux packages)
app/src/main/java/com/yugahashimoto/androidcode/
├── data/ # API clients, repositories, models
├── runtime/ # On-device PRoot runtime management
├── ui/ # Jetpack Compose screens and components
└── di/ # Dependency injection
- Kotlin with Jetpack Compose
- Follow existing patterns in the codebase
- No comments unless explaining non-obvious logic
- Prefer immutable data classes and sealed interfaces
- Keep PRs focused on a single change
- Include tests for new functionality
- Ensure CI passes (tests, lint, R8 build)
- Update documentation if behavior changes
- Screenshots for UI changes are appreciated
- Use the GitHub issue tracker
- Include device model, Android version, and app version
- For connection issues, note whether you're using local runtime or remote
By contributing, you agree that your contributions will be licensed under the MIT License.