Cree su paquete de aplicaciones Capacitor para Android usando GitHub Actions

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