Skip to content

dev-lovers/safereport-app

Repository files navigation

SafeReport Logo

SafeReport

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.

📚 Sumário

📱 Funcionalidades previstas

  • 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.

🛠️ Tecnologias

  • 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)

🧩 Plataformas e ambiente

  • 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.

⚙️ Variáveis de ambiente

Este projeto utiliza variáveis de ambiente para lidar com credenciais sensíveis de APIs externas.

Como configurar

  1. Crie um ambiente com variáveis no EAS:

    eas env:create
  2. 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.

🔧 Configuração manual após expo prebuild

Após gerar a pasta android/ (npx expo prebuild --clean), aplique as modificações abaixo para que o projeto funcione corretamente:

1) android/app/build.gradle

  • 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'

2) android/build.gradle

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')

3) android/local.properties

Arquivo obrigatório para builds locais. Crie-o na raiz de android/:

Exemplo Windows:

sdk.dir=C:\\Users\\YOUR_USERNAME\\AppData\\Local\\Android\\Sdk

Exemplo Linux (WSL):

sdk.dir=/home/YOUR_USERNAME/Android/Sdk

Este arquivo não deve ser versionado.

🏗️ Build local (EAS Local e Gradle)

Visão geral

  • 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.

1) Preparar credenciais (keystore do EAS Cloud)

Baixe o keystore já usado pelo EAS (upload key):

eas credentials -p android
# Escolha o projeto → Android → Keystore → Download
# Anote: keystorePassword, keyAlias, keyPassword

Organize os arquivos:

mkdir -p keys
mv ~/Downloads/<your-keystore>.jks ./keys/your-keystore.jks

Crie credentials.json na raiz:

{
  "android": {
    "keystore": {
      "keystorePath": "keys/your-keystore.jks",
      "keystorePassword": "********",
      "keyAlias": "********",
      "keyPassword": "********"
    }
  }
}

2) EAS Local no WSL2 (Ubuntu)

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.

Passo 1. Pacotes básicos e Java 17

# Atualiza pacotes base e instala dependências essenciais
sudo apt update
sudo apt install -y wget unzip zip git curl openjdk-17-jdk

Java 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.

Passo 2. Variáveis de ambiente e PATH

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 ~/.bashrc

Observações importantes:

  • ANDROID_HOME será onde o SDK Android vai morar dentro do WSL.
  • Incluímos cmdline-tools/latest/bin no PATH porque é lá que fica o sdkmanager.
  • Incluímos platform-tools e emulator porque depois teremos adb, etc.
  • Incluímos JAVA_HOME/bin para garantir que o Gradle enxergue o Java correto.

Passo 3. Preparar diretório do Android SDK + command line tools

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.zip

Apó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 latest

Depois 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 --version

Se ele imprimir a versão, está correto.

Passo 4. Instalar pacotes do Android SDK necessários ao build

sdkmanager --install \
  "platform-tools" \
  "platforms;android-35" \
  "build-tools;35.0.0" \
  "cmdline-tools;latest"

Função de cada item:

  • platform-tools: traz adb e utilitários essenciais.
  • platforms;android-35: instala a API level 35 (compileSdkVersion 35).
  • build-tools;35.0.0: traz aapt2, 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.

Passo 5. Aceitar licenças do Android SDK

Sem isso, o build falha.

yes | sdkmanager --licenses

Passo 6. Node.js 20 e EAS CLI

# 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-cli

Passo 7. Rodando o build local

Entre 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

🚀 Como executar

  1. Clonar o repositório

    git clone https://github.com/dev-lovers/safereport-app.git
    cd safereport-app
  2. Instalar dependências

    npm install
  3. Criar arquivos de configuração sensíveis (não versionados)

  4. Executar em dispositivo físico

    npm run android

🔗 Repositório

Acesse: https://github.com/dev-lovers/safereport-app

🧠 Observações técnicas

  • 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.json e babel.config.js

📄 Licença

Projeto acadêmico sem fins lucrativos. Direitos reservados à equipe de desenvolvimento.

👥 Autores

  • Rafael Sampaio de Jesus
  • Taciano Santos da Hora

About

Aplicativo mobile de segurança urbana desenvolvido com React Native e Expo. Permite visualizar ocorrências criminais em tempo real, enviar denúncias via Sinesp, traçar rotas e exibir no mapa as ocorrências ao longo do percurso, além de gerar insights com IA a partir dos dados.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors