shivao-projeto/mobile
PontualTech / Karlão f8e92f3c58
Some checks are pending
Build Android (APK + AAB) / build-android (push) Waiting to run
fix(auth): cloudConfigured() reconhece login Google/email (sem token) v1.7.1
Bug crítico: após login Google ou email, o app pedia pra logar
DE NOVO toda vez que abria/fechava. E sync nunca iniciava.

Causa: cloudConfigured() exigia state.cloud.token, mas no login
Google/email a auth fica em state.auth.accessToken (JWT), não em
state.cloud.token (que é o BOAT_TOKEN avançado).

Resultado: cloudConfigured() retornava false → welcome screen
sempre aparecia, rtConnect() nunca rodava, sync zero.

Fix:
- cloudConfigured() agora retorna true se tem state.auth.accessToken
  OU state.cloud.token (qualquer um dos dois)
- maybeShowWelcome() reescrito pra checar autenticação real
- Botão "Usar sem login (modo offline)" mais visível na welcome
  screen pra dar saída clara

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 09:13:37 -03:00
..
android fix(auth): cloudConfigured() reconhece login Google/email (sem token) v1.7.1 2026-04-28 09:13:37 -03:00
play-store-assets docs(ci): SETUP-RUNNER.md com token pré-gerado + instruções 5min 2026-04-28 05:26:57 -03:00
.gitignore feat(mobile): scaffold Capacitor pra Android Play Store + adapter nativo 2026-04-27 16:02:34 -03:00
capacitor.config.json feat(mobile): scaffold Capacitor pra Android Play Store + adapter nativo 2026-04-27 16:02:34 -03:00
package-lock.json feat(mobile): Capacitor Android pronto — APK + AAB v1.2.0 buildados 2026-04-27 17:34:19 -03:00
package.json fix(auth): cloudConfigured() reconhece login Google/email (sem token) v1.7.1 2026-04-28 09:13:37 -03:00
play-store-listing.md feat(legal+store): política de privacidade LGPD/GDPR + Play Store assets 2026-04-27 18:14:49 -03:00
README.md feat(mobile): scaffold Capacitor pra Android Play Store + adapter nativo 2026-04-27 16:02:34 -03:00

Shivao Mobile · Capacitor Android (e iOS futuro)

Wrapper Capacitor pra empacotar o Shivao web como app nativo Android (.apk pra sideload, .aab pra Play Store) e iOS no futuro.

Arquitetura: o frontend HTML mora em app/diario-bordo.html (1 fonte de verdade). Um script (scripts/sync-html.mjs) copia pra server/public/index.html (Express serve) e mobile/www/index.html (Capacitor empacota).


🛠️ Pré-requisitos (instalar 1 vez)

Windows (recomendado pra você)

  1. JDK 17+ — Adoptium Temurin é a melhor escolha:

    winget install EclipseAdoptium.Temurin.17.JDK
    

    Verificar: java -version deve mostrar 17.x

  2. Android Studio — instala SDK + emulador + tudo:

    winget install Google.AndroidStudio
    

    Após abrir, ir em Tools → SDK Manager e instalar:

    • Android SDK Platform 34 (Android 14)
    • Android SDK Build-Tools 34.0.0
    • Android SDK Command-line Tools (latest)
    • Android SDK Platform-Tools
  3. Variáveis de ambiente (Painel de Controle → Sistema → Variáveis de Ambiente):

    • JAVA_HOME=C:\Program Files\Eclipse Adoptium\jdk-17.0.x (ajuste path)
    • ANDROID_HOME=C:\Users\pontu\AppData\Local\Android\Sdk
    • Adicionar ao PATH: %JAVA_HOME%\bin, %ANDROID_HOME%\platform-tools
  4. Reiniciar terminal. Verificar:

    java -version
    adb --version
    

Tempo total de instalação: ~30-45 min (download de ~3GB).


🚀 Build inicial (faz 1 vez)

cd mobile

# Instala deps Capacitor + plugins
npm install

# Sincroniza HTML do app/ pra mobile/www/
node ../scripts/sync-html.mjs

# Adiciona projeto Android (gera mobile/android/)
npx cap add android

# Sincroniza plugins nativos no projeto Android
npx cap sync android

Permissões Android (editar manualmente após cap add android)

Abra mobile/android/app/src/main/AndroidManifest.xml e adicione DENTRO do <manifest>:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

<uses-feature android:name="android.hardware.location.gps" android:required="false" />
<uses-feature android:name="android.hardware.sensor.barometer" android:required="false" />
<uses-feature android:name="android.hardware.sensor.compass" android:required="false" />

🔐 Keystore PERMANENTE (CRÍTICO — gera 1 vez, guarda pra sempre)

cd mobile/android/app
keytool -genkey -v -keystore shivao-release.keystore -alias shivao -keyalg RSA -keysize 2048 -validity 10000 \
  -dname "CN=Karlao, O=PontualTech, L=Sao Paulo, ST=SP, C=BR"
# Senha forte (mínimo 8 chars). ANOTE em local seguro — perda = perda permanente do app na Play Store.

BACKUP IMEDIATO:

cp shivao-release.keystore C:/Users/pontu/Downloads/Shivao-keystore-backup/shivao-release.keystore
echo "Senha keystore: SUA_SENHA_AQUI" >> C:/Users/pontu/Downloads/Shivao-keystore-backup/keystore-passwords.txt
echo "Alias: shivao" >> C:/Users/pontu/Downloads/Shivao-keystore-backup/keystore-passwords.txt

E também faça upload em Drive privado, HD externo etc — perdeu = não publica update na Play Store nunca mais.

Configurar signing no Gradle

Edite mobile/android/app/build.gradle, dentro de android { ... }:

signingConfigs {
    release {
        storeFile file('shivao-release.keystore')
        storePassword System.getenv('SHIVAO_KEYSTORE_PWD') ?: 'SUA_SENHA_AQUI'
        keyAlias 'shivao'
        keyPassword System.getenv('SHIVAO_KEY_PWD') ?: 'SUA_SENHA_AQUI'
    }
}
buildTypes {
    release {
        signingConfig signingConfigs.release
        minifyEnabled false
    }
}

📦 Build do APK (sideload) e AAB (Play Store)

cd mobile

# Sincroniza última versão do HTML antes de build
npm run sync

# APK assinado pra sideload (~3-5 min primeira vez, ~1 min em rebuilds)
npm run android:build:apk
# Output: mobile/android/app/build/outputs/apk/release/app-release.apk

# AAB pra Play Store (formato preferido)
npm run android:build:aab
# Output: mobile/android/app/build/outputs/bundle/release/app-release.aab

🌐 Alternativa: Build na nuvem (sem instalar nada local)

Se não quiser instalar 3GB de Android Studio:

Opção A: Codemagic (mais simples)

  • 500min grátis/mês, suficiente pra ~10 builds
  • Conecta ao Forgejo, push detecta e roda
  • Configura assinatura no painel

Opção B: Container Docker no Coolify (mais self-hosted)

  • Subir imagem mingc/android-build-box no Coolify
  • Cron job ou webhook do Forgejo dispara build
  • APK/AAB salvo em volume persistente

Ambas opções: vamos preparar quando você decidir.


🎮 Submeter Play Store

  1. Conta Google Play Developer: $25 1× em https://play.google.com/console
  2. Após aprovado (~24h), criar novo app:
    • Nome: "Shivao - Diário de Bordo"
    • Categoria: "Maps & Navigation"
    • Idioma: pt-BR
  3. Subir AAB: Production → Releases → Create new release → upload app-release.aab
  4. Conteúdo obrigatório:
    • Política de privacidade (URL pública — vou criar uma rota /politica-privacidade no servidor)
    • Screenshots: mínimo 2 (vou gerar via Playwright se quiser)
    • Ícone 512×512 (vou gerar do icon.svg)
    • Descrição curta (80 chars) e completa
  5. Content rating: preencher questionário (~5min)
  6. Pricing: Free (cobrança vai por dentro do app via Asaas, não Google IAP — economia de 30%)
  7. Submit pra review: Google revisa em 1-7 dias

📱 iOS (FASE 4 futura)

Requer:

  • Mac (mini M4 ~R$5k mais barato)
  • Apple Developer Program $99/ano
  • Xcode
npx cap add ios
npx cap sync ios
npx cap open ios  # abre Xcode
# Build Archive → Distribute → App Store Connect

🐛 Troubleshooting

adb: command not found — adicione %ANDROID_HOME%\platform-tools ao PATH

SDK location not found — crie mobile/android/local.properties:

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

Build muito lento — primeiro build baixa Gradle + dependências (~500MB). Próximos builds usam cache.

APK muito grande — habilitar minify em build.gradle:

buildTypes.release.minifyEnabled true
buildTypes.release.shrinkResources true