Aplicativo de segurança urbana desenvolvido em React Native com Expo. Centraliza o registro de ocorrências via SINESP (Delegacia Virtual), o mapeamento de ocorrências com base na geolocalização e o traçado de rotas com contexto de risco com análises por IA.
Aviso legal: Não há afiliação com o SINESP/Delegacia Virtual nem com o Fogo Cruzado. Respeite os termos de uso e políticas de dados dessas plataformas.
- 📱 Funcionalidades previstas
- 🛠️ Tecnologias
- 🧩 Plataformas e ambiente
- ⚙️ Variáveis de ambiente
- 🔧 Configuração manual após
expo prebuild - 🏗️ Build local (EAS Local)
- 🚀 Como executar
- 🔗 Repositório
- 🧠 Observações técnicas
- 📄 Licença
- 👥 Autores
- Registro de ocorrências via SINESP (Delegacia Virtual).
- Geolocalização do usuário para consulta de ocorrências.
- Mapa interativo com ocorrências criminais a partir da API Fogo Cruzado.
- Rotas com contexto de segurança: visualização das ocorrências ao longo do trajeto.
- Interface acessível e objetiva para uso comunitário.
- React Native + Expo (EAS/Dev Client)
- TypeScript
- React Navigation (native stack + bottom tabs)
- Context API com tipagem e persistência (AsyncStorage); dados sensíveis em Expo SecureStore
- React Native Paper (UI)
- Axios para consumo de APIs
- react-native-maps (mapas) + Google Maps SDK
- Expo Location (geolocalização)
- Plataforma alvo: Android (inicialmente).
- Ambiente de desenvolvimento oficial: Windows (10/11).
- Compatibilidade planejada: iOS/macOS (futuro).
- Observação: As instruções abaixo consideram Android/Windows. Veja a seção Configuração manual para ajustes após o
prebuild.
Este projeto utiliza variáveis de ambiente para lidar com credenciais sensíveis de APIs externas.
-
Crie um ambiente com variáveis no EAS:
eas env:create
-
Baixe as variáveis localmente:
eas env:pull --environment development
Isso irá gerar automaticamente um arquivo .env.local na raiz do projeto com o conteúdo do ambiente de desenvolvimento.
⚠️ O arquivo.env.localé ignorado pelo Git e não deve ser versionado.
Após gerar a pasta android/ (npx expo prebuild --clean), aplique as modificações abaixo para que o projeto funcione corretamente:
-
Adicionar dependências do Firebase:
dependencies { implementation(platform("com.google.firebase:firebase-bom:34.4.0")) implementation("com.google.firebase:firebase-analytics") } -
Adicionar o plugin do Google Services (no fim do arquivo):
apply plugin: 'com.google.gms.google-services'
Este arquivo não precisa de modificações desde que a versão do Google Services seja compatível (4.4.x).
Se necessário, atualize:
classpath('com.google.gms:google-services:4.4.4')Arquivo obrigatório para builds locais. Crie-o na raiz de android/:
Exemplo Windows:
sdk.dir=C:\\Users\\YOUR_USERNAME\\AppData\\Local\\Android\\SdkExemplo Linux (WSL):
sdk.dir=/home/YOUR_USERNAME/Android/SdkEste arquivo não deve ser versionado.
- EAS Build Local gera o mesmo artefato que o EAS Cloud, porém na sua máquina.
- Assinatura: usamos a mesma keystore do EAS Cloud (upload key) via
credentials.json. - Limitação de plataforma: EAS Local não suporta Windows nativo para build Android. Use WSL2 (Ubuntu) ou um host Linux/macOS.
Baixe o keystore já usado pelo EAS (upload key):
eas credentials -p android
# Escolha o projeto → Android → Keystore → Download
# Anote: keystorePassword, keyAlias, keyPasswordOrganize os arquivos:
mkdir -p keys
mv ~/Downloads/<your-keystore>.jks ./keys/your-keystore.jksCrie credentials.json na raiz:
{
"android": {
"keystore": {
"keystorePath": "keys/your-keystore.jks",
"keystorePassword": "********",
"keyAlias": "********",
"keyPassword": "********"
}
}
}Use uma pasta nativa do WSL (ex.:
/home/your-username/dev/safereport-app) e rode todos os comandos dentro do WSL, não no PowerShell do Windows. Evita problema de permissões, de caminho (C:\...) e de performance de IO.
# Atualiza pacotes base e instala dependências essenciais
sudo apt update
sudo apt install -y wget unzip zip git curl openjdk-17-jdkJava 17 é o mínimo aceito pelas versões atuais do Gradle/Android Gradle Plugin usadas em projetos Expo/React Native recentes. Não use Java 8 / 11.
Adicione as variáveis necessárias ao seu shell. (Supondo Bash. Se você usa Zsh, aplique no ~/.zshrc.)
echo 'export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64' >> ~/.bashrc
echo 'export ANDROID_HOME=$HOME/Android/Sdk' >> ~/.bashrc
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc
echo 'export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin' >> ~/.bashrc
echo 'export PATH=$PATH:$ANDROID_HOME/platform-tools' >> ~/.bashrc
echo 'export PATH=$PATH:$ANDROID_HOME/emulator' >> ~/.bashrc
source ~/.bashrcObservações importantes:
ANDROID_HOMEserá onde o SDK Android vai morar dentro do WSL.- Incluímos
cmdline-tools/latest/binnoPATHporque é lá que fica osdkmanager. - Incluímos
platform-toolseemulatorporque depois teremosadb, etc. - Incluímos
JAVA_HOME/binpara garantir que o Gradle enxergue o Java correto.
Crie a pasta base do SDK e baixe as command line tools oficiais (ferramentas de linha de comando do Android, que incluem sdkmanager).
O número da versão muda ao longo do tempo; mantenha a mesma estrutura.
# Criar diretórios
mkdir -p $ANDROID_HOME/cmdline-tools
cd $ANDROID_HOME/cmdline-tools
# Baixar as command line tools (substitua pela versão atual se diferente)
wget https://dl.google.com/android/repository/commandlinetools-linux-13114758_latest.zip -O cmdtools.zip
# Extrair
unzip cmdtools.zip
rm cmdtools.zipApós extrair, normalmente é criada uma pasta chamada cmdline-tools dentro do diretório atual.
O Gradle e o próprio sdkmanager esperam o layout $ANDROID_HOME/cmdline-tools/latest, então reorganizamos:
mv cmdline-tools latestDepois desse passo você deve ter:
$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager
Como já atualizamos o PATH no Passo 2, sdkmanager já deve estar acessível diretamente no terminal.
Valide:
sdkmanager --versionSe ele imprimir a versão, está correto.
sdkmanager --install \
"platform-tools" \
"platforms;android-35" \
"build-tools;35.0.0" \
"cmdline-tools;latest"Função de cada item:
platform-tools: trazadbe utilitários essenciais.platforms;android-35: instala a API level 35 (compileSdkVersion 35).build-tools;35.0.0: trazaapt2,zipalign,apksigner, etc., usados pelo Gradle.cmdline-tools;latest: garante que você tem a versão mais recente registrada no SDK, não só a que veio no zip.
Se o seu Gradle futuramente exigir outra versão (por exemplo build-tools;34.0.0 ou platforms;android-34), você pode instalar adicionalmente sem remover nada.
Sem isso, o build falha.
yes | sdkmanager --licenses# Adiciona repositório NodeSource para Node 20.x
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
# Instala Node.js + npm
sudo apt install -y nodejs
# Instala o EAS CLI global
npm i -g eas-cliEntre no diretório do seu projeto (que deve estar localizado em uma pasta Linux, não montada de C:\):
cd ~/dev/safereport-app
# Instalar dependências exatamente como estão no package-lock.json
npm ci
# (Opcional) conferir credenciais Android
eas credentials -p android
# Gerar APK (ex.: profile "preview")
eas build -p android --profile preview --local
# Gerar AAB (ex.: profile "production")
eas build -p android --profile production --local-
Clonar o repositório
git clone https://github.com/dev-lovers/safereport-app.git cd safereport-app -
Instalar dependências
npm install
-
Criar arquivos de configuração sensíveis (não versionados)
.env.local→ Variáveis de ambientecredentials.json/keys/*.jks→ Build localandroid/local.properties→ Configuração manual
-
Executar em dispositivo físico
npm run android
Acesse: https://github.com/dev-lovers/safereport-app
- Arquitetura escalável com separação de contexto por domínio
- Navegação desacoplada e tipada
- Modularização por funcionalidade (pasta
screens/) - Alias de paths configurado via
tsconfig.jsonebabel.config.js
Projeto acadêmico sem fins lucrativos. Direitos reservados à equipe de desenvolvimento.
- Rafael Sampaio de Jesus
- Taciano Santos da Hora
