- Node.js (v18 or later)
- JDK (Java Development Kit)
- Android SDK
Si recien clonas el repositorio y no tiene instalado dependencias, el sdk de android o no tiene la carpeta de gradle bien formada, ejecuta primero:
Estos tres comandos en orden: ejecutar:
npm install expo
sudo apt install android-sdk
npx expo prebuild --cleanLuego (saltear si tienes las variables ya configuradas):
nano ~/.bashrcañadir al final del archivo:
export ANDROID_HOME=$HOME/Android/Sdk
export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/binpresiona CTRL + s presiona CTRL + x
y por último ejecutar:
source ~/.bashrcnpx expo install expo-dev-client
# Habilita el modo debugging USB en tu dispositivo android
# Asegurate de que al conectar el cable en el celular
# aparezca el cartel de permitir la conexión con la PC.
adb devices # muestra los dispositivos conectados, debería aparecer el celular conectado.
npx expo run:android- Generar una clave de firma (solo primera vez)
Android requiere que todas las APKs estén firmadas. Si ya tienes un keystore, omite este paso.
Ejecuta en la terminal:
keytool -genkeypair -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000my-release-key.keystore: Nombre del archivo de clave. my-key-alias: Alias de la clave (puedes cambiarlo). Te pedirá una contraseña, guárdala en un lugar seguro.
- Colocar el keystore en tu proyecto
Mueve el archivo my-release-key.keystore a la carpeta android/app/ de tu proyecto React Native.
- Configurar Gradle para usar la clave
Edita el archivo android/gradle.properties y agrega:
------- // esta parte ya deberia existir o por el estilo // --------
# Enable network inspector
EX_DEV_CLIENT_NETWORK_INSPECTOR=true
# Use legacy packaging to compress native libraries in the resulting APK.
expo.useLegacyPackaging=false------- // CONFIGURACIÓN DEL KEYSTORE (AGREGAR ESTO AL FINAL), cambiar pass por contraseña configurada en la key // --------
MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=pass
MYAPP_RELEASE_KEY_PASSWORD=pass- Configurar build.gradle (app)
Edita android/app/build.gradle y asegúrate de que tenga:
android {
...
signingConfigs {
release {
storeFile file(MYAPP_RELEASE_STORE_FILE)
storePassword MYAPP_RELEASE_STORE_PASSWORD
keyAlias MYAPP_RELEASE_KEY_ALIAS
keyPassword MYAPP_RELEASE_KEY_PASSWORD
}
}
buildTypes {
release {
...
signingConfig signingConfigs.release
}
}
}- Agregar en /mobile-app/android/app/src/main/AndroidManifest.xml
Agregar al final:
android:usesCleartextTraffic="true"al final de:
<application android:name=".MainApplication" android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:roundIcon="@mipmap/ic_launcher_round" android:allowBackup="true" android:theme="@style/AppTheme" android:supportsRtl="true" android:usesCleartextTraffic="true" /* AQUI */>Quedaría de la forma:
<application android:name=".MainApplication" android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:roundIcon="@mipmap/ic_launcher_round" android:allowBackup="true" android:theme="@style/AppTheme" android:supportsRtl="true" android:usesCleartextTraffic="true" android:usesCleartextTraffic="true">- keys digitales en firebase
Dentro del keystore, el SHA-1/SHA-256 release no registrado en Firebase/Google Cloud. Cuando generas un APK firmado, la huella digital (SHA-1/SHA-256) cambia respecto al modo debug.
Primero debes:
Obtener el SHA-1/SHA-256 de tu keystore release con el comando:
keytool -list -v -keystore my-release-key.keystore -alias my-key-aliasAgrega estas huellas en Firebase Console:
Ve a tu proyecto > Configuración del proyecto > Huellas digitales de certificados de la app.
Si usas Google Sign-In directamente (sin Firebase), regístralas en Google Cloud Console.
- Generar el APK
Ejecuta en la terminal (desde la raíz del proyecto):
cd android && ./gradlew assembleReleaseEn Windows usa gradlew assembleRelease (sin ./).
El APK se generará en: android/app/build/outputs/apk/release/app-release.apk.
Posible error en la aplicacion de la apk generada, necesitas la configuración necesaria de la librería Config para montar las variables del .env local.
Edita android/app/build.gradle y asegúrate de tener:
apply from: project(':react-native-config').projectDir.getPath() + "/dotenv.gradle"
android {
defaultConfig {
manifestPlaceholders = [
appAuthRedirectScheme: 'com.yourapp.bundleid'
]
// Agrega esto:
resValue "string", "build_config_package", "com.yourapp.bundleid"
}
}