react-native-bluetooth-datecs-printer
Version:
Module to printer in a Datecs bluetooth Printer
184 lines (143 loc) • 5.27 kB
Markdown
# 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