# Configuração para Expo SDK 54 e Android SDK 36

Esta biblioteca foi atualizada para ser compatível com Expo SDK 54 e Android SDK 36.

## Mudanças Implementadas

### 1. Android Gradle Plugin e SDKs
- ✅ Atualizado Android Gradle Plugin para 8.7.3
- ✅ Atualizado compileSdk para 36
- ✅ Atualizado targetSdk para 36
- ✅ Atualizado minSdk para 26 (requerido pelo Expo SDK 54)
- ✅ Atualizado buildTools para 35.0.0
- ✅ Atualizado Gradle para 8.11.1

### 2. Namespace
- ✅ Adicionado `namespace` no build.gradle
- ✅ Removido `package` do AndroidManifest.xml (deprecated)

### 3. Dependências
- ✅ Removido jcenter (descontinuado)
- ✅ Substituído `com.android.support:support-v4` por `androidx.legacy:legacy-support-v4`
- ✅ Atualizado `com.google.zxing:core` para 3.5.3
- ✅ Atualizado dependência do React Native para usar `react-android`
- ✅ Atualizado peerDependencies para React Native 0.76+ e React 18.3+

### 4. Permissões Bluetooth
- ✅ Adicionado `BLUETOOTH_CONNECT` (Android 12+)
- ✅ Adicionado `BLUETOOTH_SCAN` com flag `neverForLocation` (Android 12+)
- ✅ Limitado permissões antigas com `maxSdkVersion="30"`
- ✅ Limitado permissões de localização com `maxSdkVersion="30"`

## Como Usar no Expo SDK 54

### 1. Instalação

```bash
npm install react-native-bluetooth-datecs-printer --save
# ou
yarn add react-native-bluetooth-datecs-printer
```

### 2. Configuração no app.json

Adicione a biblioteca aos plugins do Expo:

```json
{
  "expo": {
    "plugins": [
      [
        "expo-build-properties",
        {
          "android": {
            "compileSdkVersion": 36,
            "targetSdkVersion": 36,
            "minSdkVersion": 26,
            "buildToolsVersion": "35.0.0"
          }
        }
      ]
    ]
  }
}
```

### 3. Permissões no app.json

```json
{
  "expo": {
    "android": {
      "permissions": [
        "BLUETOOTH",
        "BLUETOOTH_ADMIN",
        "BLUETOOTH_CONNECT",
        "BLUETOOTH_SCAN",
        "ACCESS_FINE_LOCATION",
        "ACCESS_COARSE_LOCATION"
      ]
    }
  }
}
```

### 4. Prebuild

Como esta é uma biblioteca nativa, você precisará usar o Expo Prebuild:

```bash
npx expo prebuild --clean
```

### 5. Build

Para desenvolvimento local:
```bash
npx expo run:android
```

Para build de produção:
```bash
eas build --platform android
```

## Requisitos de Runtime

### Android
- Android 8.0 (API 26) ou superior
- Bluetooth habilitado
- Permissões de Bluetooth concedidas pelo usuário

### Permissões Runtime (Android 12+)

No seu código React Native, solicite as permissões em runtime:

```javascript
import { PermissionsAndroid, Platform } from 'react-native';

async function requestBluetoothPermissions() {
  if (Platform.OS === 'android') {
    if (Platform.Version >= 31) {
      // Android 12+
      const granted = await PermissionsAndroid.requestMultiple([
        PermissionsAndroid.PERMISSIONS.BLUETOOTH_CONNECT,
        PermissionsAndroid.PERMISSIONS.BLUETOOTH_SCAN,
      ]);
      
      return (
        granted['android.permission.BLUETOOTH_CONNECT'] === PermissionsAndroid.RESULTS.GRANTED &&
        granted['android.permission.BLUETOOTH_SCAN'] === PermissionsAndroid.RESULTS.GRANTED
      );
    } else {
      // Android 11 e inferior
      const granted = await PermissionsAndroid.requestMultiple([
        PermissionsAndroid.PERMISSIONS.BLUETOOTH_ADMIN,
        PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
      ]);
      
      return (
        granted['android.permission.BLUETOOTH_ADMIN'] === PermissionsAndroid.RESULTS.GRANTED &&
        granted['android.permission.ACCESS_FINE_LOCATION'] === PermissionsAndroid.RESULTS.GRANTED
      );
    }
  }
  return true;
}
```

## Troubleshooting

### Erro: "Namespace not specified"
Certifique-se de que o `build.gradle` contém `namespace 'br.com.masfe.rnbluetoothdatecsprinter'`

### Erro: "compileSdkVersion is not specified"
Verifique se as versões no `build.gradle` estão corretas e que o Expo está configurado com as mesmas versões

### Erro de Permissão Bluetooth
- Verifique se as permissões estão declaradas no AndroidManifest.xml
- Certifique-se de solicitar as permissões em runtime
- Para Android 12+, use BLUETOOTH_CONNECT e BLUETOOTH_SCAN

### Build falha com erro Gradle
- Execute `./gradlew clean` no diretório android
- Delete a pasta `android/build`
- Execute `npx expo prebuild --clean` novamente

## Notas Importantes

1. **AndroidX**: A biblioteca agora usa AndroidX. Certifique-se de que seu projeto também está usando AndroidX.

2. **React Native New Architecture**: Esta biblioteca ainda usa a antiga arquitetura. Para projetos que usam a New Architecture do React Native, pode ser necessário desabilitar temporariamente.

3. **Expo Go**: Esta biblioteca NÃO funciona com Expo Go. Você deve usar Expo Prebuild ou Development Build.

4. **EAS Build**: Para usar no EAS Build, certifique-se de que o `eas.json` está configurado corretamente.

## Versões Testadas

- Expo SDK: 54
- React Native: 0.76.x
- Android SDK: 36
- Gradle: 8.11.1
- Android Gradle Plugin: 8.7.3
