En esta publicación, configuraremos un flujo de trabajo de GitHub Actions para una aplicación Capacitor que producirá un paquete de aplicaciones firmado, listo para cargar en Google Play Console.
A un alto nivel, haremos lo siguiente:
- Configurar nuestro almacén de claves y firma de claves
- Añadiendo nuestro almacén de claves y firmando claves a GitHub Secrets
- Crear un flujo de trabajo de acciones de GitHub
¡Empecemos! 🤩
Generación de un almacén de claves
Probablemente ya tenga un almacén de claves para firmar los lanzamientos de sus aplicaciones, pero en caso de que no lo tenga, aquí le mostramos cómo crear uno:
keytool -genkey -v -keystore android/release.jks -keyalg RSA -keysize 2048 -validity 10000 -alias release
Sigue las indicaciones hasta que te pregunte si los datos son correctos, ingresa yes para guardar su clave. No olvides agregarlo también a .gitinore
para que no lo envíe accidentalmente a su repositorio, el almacén de claves debe mantenerse en secreto.
Agregar el almacén de claves y la contraseña como GitHub Secrets
En GitHub podemos agregar secretos para nuestro repositorio en Configuración> Secretos> Acciones
Sin embargo, rápidamente nos encontramos con un inconveniente, porque los secretos solo pueden ser cadenas, y el almacén de claves es en realidad datos binarios. .
Hay una útil utilidad CLI llamada base64
, que debe estar preinstalado en la mayoría de las distribuciones de Linux. Utilizándolo podemos convertir nuestro archivo binario en una representación de cadena, ejecutemos:
base64 android/release.jks > android/release.jks.base64
Si ahora abrimos android/release.jks.base64
deberíamos ver un archivo de texto normal.
Ahora podemos agregarlo como un secreto llamado RELEASE_KEYSTORE
. Debería ser algo como esto:
ℹ️ No te preocupes por la representación base64:la convertiremos de nuevo en un archivo en nuestra acción de GitHub.
Agreguemos también la contraseña del almacén de claves como RELEASE_KEYSTORE_PASSWORD
. Ahora debería verse así:
Agregar nuestro flujo de trabajo de GitHub Action
¡Finalmente es hora de agregar nuestro flujo de trabajo! Agregue el siguiente archivo a .github/workflows/android-build.yml
name: Build Android
on:
push:
branches:
- main
jobs:
build:
name: Build APK
runs-on: ubuntu-latest
steps:
- name: Checkout source
uses: actions/checkout@v2
- name: Setup java
uses: actions/setup-java@v1
with:
distribution: 'zulu'
java-version: '11'
- name: Setup Node.js
uses: actions/setup-node@v1
with:
node-version: 16.x
- name: Install app dependencies
run: npm install
- name: Build Svelte app
run: npm run build
- name: Capacitor update
run: npx cap update
- name: Capacitor copy
run: npx cap copy
- name: Build app bundle
run: cd android && gradle bundle
- name: Extract Android signing key from env
run: |
echo "${{ secrets.RELEASE_KEYSTORE }}" > android/release.jks.base64
base64 -d android/release.jks.base64 > android/release.decrypted.jks
- name: Sign dev build
run: jarsigner -keystore android/release.decrypted.jks -storepass "${{ secrets.RELEASE_KEYSTORE_PASSWORD }}" -signedjar ./android/app/build/outputs/bundle/release/app-release-signed.aab ./android/app/build/outputs/bundle/release/app-release.aab release
- name: Upload release bundle
uses: actions/upload-artifact@v2
with:
name: app-release
path: android/app/build/outputs/bundle/release/app-release-signed.aab
retention-days: 60
ℹ️ Es posible que desee modificar algunas cosas, como la rama para compilar on
, versión de Java preferida y cuánta retención desea para sus artefactos de salida utilizando el retention-days
opción de configuración.)
Después de enviar su cambio, puede navegar a Acciones pestaña en su repositorio donde debería ver su compilación ejecutándose.
❌ Si su compilación no finaliza, intente compilar localmente utilizando los pasos de flujo de trabajo anteriores, es posible que haya algún problema con la configuración de su condensador.
Una vez que su compilación se haya ejecutado correctamente, puede descargar su paquete directamente desde la página de ejecución de la compilación.
¡Desde aquí puede cargar directamente el paquete firmado en Play Console! 🚀
ℹ️ Tenga en cuenta que debe superar el versionCode
en android/app/build.gradle
por cada nueva versión que quieras subir a Play Store.
Enlaces y agradecimientos
Un agradecimiento especial a las publicaciones a continuación, sin las cuales esta publicación no podría existir. 🙂
- https://dico.duba.dev/building-a-vue-3-native-android-app-with-capacitor-on-wsl2-ubuntu-20-04
- https://gist.github.com/B45i/2afef964613f0698d881e0647a67fb43
- https://stefma.medium.com/how-to-store-a-android-keystore-safely-on-github-actions-f0cef9413784
Foto de Liam Briese en Unsplash