Sobre o projeto

## Geiravor Aplicativo Android para o [r/a/dio](https://r-a-d.io), um serviço de streaming de rádio pela internet. Nome voltado ao usuário: **r/a/dio**. Pacote: `io.r_a_d.geiravor`. Licença: MIT (`LICENSE.md`). Copyright © 2026 Sakurai Momoka. A versão **1.0.0** é uma reescrita completa do zero da versão 0.3.0. A última fonte da 0.3.0 está em `legacy/0.3` (tag `v0.3.0`). ### Instalação Os releases no GitHub oferecem quatro APKs para instalação manual: Debug e Release × `arm64-v8a` (smartphones) e `x86_64` (Waydroid / a maioria dos emuladores). A versão Release é minificada com R8 e assinada com a chave de sideload do projeto (não da Play Store). A versão Debug é assinada com a chave de debug. Mesmo pacote (`io.r_a_d.geiravor`); instalar um substitui o outro. Mais recente: [v1.0.1](https://github.com/sakuumomo/geiravor/releases/tag/v1.0.1). ### Build O Nix é o toolchain suportado: ``` nix develop # shell completo (JDK, Android SDK/NDK, DHU no Linux) nix develop .#rust # Rust host apenas (fmt, clippy, testes, rustdoc) cargo test --manifest-path core/Cargo.toml ./gradlew :app:testDebugUnitTest :app:assembleDebug ./scripts/dhu.sh # DHU; aguarda o Head Unit Server; --stop para encerrar ``` É necessário um Nix compatível com flakes. `aarch64-linux` não é um alvo de flake. Após o clone: ``` git config core.hooksPath .githooks ``` ### Documentação | Arquivo | Função | |---|---| | [`docs/spec/`](docs/spec/) | Contrato do produto (o que o ouvinte recebe) | | [`docs/`](docs/README.md) | Contrato do repositório vs. split do produto | | [`AGENTS.md`](AGENTS.md) | Como trabalhar neste repositório | | [`CONTRIBUTING.md`](CONTRIBUTING.md) | Link para AGENTS e docs | | [`SECURITY.md`](SECURITY.md) | Relatórios de vulnerabilidade | | [`CHANGELOG.md`](CHANGELOG.md) | Histórico de versões **deste** repositório | Documentação gerada do crate (GitHub Pages, não a wiki): [rustdoc](https://sakuumomo.github.io/geiravor/geiravor_core/) ou `nix develop .#rust -c cargo doc --no-deps --open` (não é uma segunda especificação). O site nas Pages existe após o `main` ter o workflow `pages`.