# ⚠️ Troubleshooting: Problemas Comuns ao Testar

## Erro: "Failed to resolve plugin for module expo-build-properties"

### Sintoma:
```
PluginError: Failed to resolve plugin for module "expo-build-properties"
Do you have node modules installed?
```

### Causa:
O pacote `expo-build-properties` não está instalado ou não está no `package.json`.

### Solução:

#### Opção 1: Instalar manualmente
```bash
cd test-printer-app  # ou o nome do seu projeto
npm install expo-build-properties
npx expo run:android
```

#### Opção 2: Reinstalar tudo
```bash
cd test-printer-app
rm -rf node_modules package-lock.json
npm install
npm install expo-build-properties
npm install file:../react-native-bluetooth-datecs-printer
npx expo prebuild --clean
npx expo run:android
```

#### Opção 3: Verificar package.json
Certifique-se que o `package.json` contém:
```json
{
  "dependencies": {
    "expo-build-properties": "~0.13.0",
    "react-native-bluetooth-datecs-printer": "file:../react-native-bluetooth-datecs-printer"
  }
}
```

---

## Erro: "Unsupported engine" (Node.js)

### Sintoma:
```
npm warn EBADENGINE Unsupported engine
npm warn EBADENGINE required: { node: '>= 20.19.4' }
npm warn EBADENGINE current: { node: 'v20.19.0' }
```

### Causa:
React Native 0.81+ requer Node.js 20.19.4 ou superior.

### Solução:

#### Atualizar Node.js:
```bash
# Verificar versão atual
node --version

# Baixar Node.js 20.19.4+ ou 22.x LTS
# https://nodejs.org/
```

#### Ou ignorar o warning (geralmente funciona):
Os warnings podem ser ignorados se estiver próximo da versão necessária (20.19.0 vs 20.19.4).

---

## Erro: "Cannot find module" após instalar biblioteca

### Sintoma:
```
Cannot find module 'react-native-bluetooth-datecs-printer'
```

### Causa:
Caminho incorreto ou biblioteca não linkada corretamente.

### Solução:

#### Reinstalar com caminho absoluto:
```bash
cd test-printer-app
npm uninstall react-native-bluetooth-datecs-printer
npm install file:C:/projetos/masfelix/react-native-bluetooth-datecs-printer
npx expo prebuild --clean
```

#### Verificar instalação:
```bash
ls node_modules/react-native-bluetooth-datecs-printer
# Deve mostrar os arquivos da biblioteca
```

---

## Erro: Prebuild falha

### Sintoma:
```
Error: Failed to prebuild
```

### Possíveis causas e soluções:

#### 1. Java não instalado ou versão errada:
```bash
# Verificar Java
java --version
# Necessário: Java 17 ou 11

# Instalar Java 17 (Windows):
# https://adoptium.net/
```

#### 2. Android SDK não configurado:
```bash
# Verificar variáveis de ambiente
echo $ANDROID_HOME  # Linux/Mac
echo $env:ANDROID_HOME  # PowerShell

# Deve apontar para o SDK (ex: C:\Users\USER\AppData\Local\Android\Sdk)
```

#### 3. Gradle não consegue baixar dependências:
```bash
cd android
./gradlew clean
cd ..
npx expo prebuild --clean
```

#### 4. Problemas com cache:
```bash
# Limpar cache do Expo
npx expo prebuild --clean

# Limpar cache do npm
npm cache clean --force

# Limpar tudo e reinstalar
rm -rf node_modules package-lock.json android ios
npm install
npx expo prebuild
```

---

## Erro: Build falha no Android

### Sintoma:
```
BUILD FAILED in 1m 23s
```

### Soluções:

#### 1. Verificar logs detalhados:
```bash
npx expo run:android --no-build-cache
```

#### 2. Limpar build Android:
```bash
cd android
./gradlew clean
./gradlew --stop
cd ..
npx expo run:android
```

#### 3. Verificar configuração do Gradle:
Verifique `android/build.gradle` da biblioteca tem:
```gradle
compileSdk 36
minSdk 26
targetSdk 36
```

#### 4. Conflito de versões:
```bash
cd android
./gradlew app:dependencies
# Verificar conflitos
```

---

## Erro: App instala mas crasha ao abrir

### Sintoma:
App instala no dispositivo mas fecha imediatamente.

### Soluções:

#### 1. Ver logs do Android:
```bash
npx react-native log-android
# ou
adb logcat | grep -i "ReactNative"
```

#### 2. Permissões não concedidas:
Verifique que está solicitando permissões em runtime para Android 12+.

#### 3. Build de desenvolvimento vs produção:
```bash
# Testar em modo debug primeiro
npx expo run:android --variant debug

# Se funcionar, testar release:
npx expo run:android --variant release
```

---

## Erro: "Expo Go not supported"

### Sintoma:
Mensagem dizendo que a biblioteca não funciona com Expo Go.

### Solução:
Isso é **esperado**! Esta biblioteca nativa requer:
- ✅ `npx expo prebuild`
- ✅ Development Build
- ✅ EAS Build
- ❌ **NÃO** funciona com Expo Go

```bash
# Usar desta forma:
npx expo prebuild
npx expo run:android
```

---

## Erro: Script PowerShell não executa

### Sintoma:
```
.\test-library.ps1 : File cannot be loaded because running scripts is disabled
```

### Solução:
```powershell
# Executar como Administrador:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

# Depois executar o script:
.\test-library.ps1
```

---

## Erro: "ENOENT: no such file or directory, open 'assets/splash.png'"

### Sintoma:
```
withAndroidDangerousBaseMod: ENOENT: no such file or directory, 
open 'assets/splash.png'
```

### Causa:
O `app.json` referencia assets (icon, splash) que não existem.

### Solução:

#### Opção 1: Remover referências a assets do app.json
```json
{
  "expo": {
    "name": "test-printer-app",
    "slug": "test-printer-app",
    "version": "1.0.0",
    "android": {
      "permissions": ["BLUETOOTH_CONNECT", "BLUETOOTH_SCAN"],
      "package": "com.test.printerapp"
    },
    "plugins": [
      ["expo-build-properties", {
        "android": {
          "compileSdkVersion": 36,
          "targetSdkVersion": 36,
          "minSdkVersion": 26
        }
      }]
    ]
  }
}
```

#### Opção 2: Criar assets básicos
```bash
mkdir -p assets
# Criar imagens 1x1 pixel temporárias
convert -size 1x1 xc:white assets/icon.png
convert -size 1x1 xc:white assets/splash.png
convert -size 1x1 xc:white assets/adaptive-icon.png
```

#### Opção 3: Executar script atualizado
Os scripts `test-library.ps1` e `test-simple.ps1` já foram corrigidos para não referenciar assets.

---

## Erro: "ENOENT: no such file or directory" (arquivos de exemplo)

### Sintoma:
Arquivos de exemplo não encontrados.

### Solução:

#### Verificar que os arquivos existem:
```bash
cd c:\projetos\masfelix\react-native-bluetooth-datecs-printer
ls app.json.example
ls examples/ExpoExample.tsx
```

#### Se não existirem, criar app.json manualmente:
```json
{
  "expo": {
    "name": "YourAppName",
    "slug": "your-app-name",
    "plugins": [
      ["expo-build-properties", {
        "android": {
          "compileSdkVersion": 36,
          "targetSdkVersion": 36,
          "minSdkVersion": 26,
          "buildToolsVersion": "35.0.0"
        }
      }]
    ],
    "android": {
      "permissions": [
        "BLUETOOTH_CONNECT",
        "BLUETOOTH_SCAN"
      ],
      "package": "com.yourcompany.yourapp"
    }
  }
}
```

---

## Checklist de Verificação

Antes de reportar um problema, verifique:

- [ ] Node.js 20.19.4+ instalado
- [ ] Java 17 ou 11 instalado
- [ ] Android SDK instalado e configurado
- [ ] ANDROID_HOME configurado
- [ ] `expo-build-properties` está no package.json
- [ ] Biblioteca instalada em node_modules
- [ ] `npx expo prebuild` executado
- [ ] Não está tentando usar com Expo Go

---

## Comandos Úteis de Diagnóstico

```bash
# Verificar versões
node --version
npm --version
java --version

# Verificar Android
echo $ANDROID_HOME
adb devices

# Verificar instalação
ls node_modules/expo-build-properties
ls node_modules/react-native-bluetooth-datecs-printer

# Ver logs
npx react-native log-android

# Limpar tudo
rm -rf node_modules package-lock.json android ios
npm install
npx expo prebuild --clean
```

---

## Ainda com Problemas?

1. Verifique os logs completos
2. Compare com o exemplo em `examples/ExpoExample.tsx`
3. Teste primeiro com `test-simple.ps1` limpo
4. Verifique que tem as versões corretas instaladas
5. Consulte [EXPO_SETUP.md](./EXPO_SETUP.md) para configuração detalhada
