Cree una versión de Android de forma segura con Github Actions | de Aman Bansal | abril 2023

Imagen de pexelsPara lanzar una aplicación de Android al público, cada desarrollador de Android debe compilar y firmar de forma segura su compilación de Android para publicarla en Play Store o en cualquier otra tienda para su descarga. Ninguna tienda permite el lanzamiento de compilaciones sin firmar. La firma de compilaciones de Android otorga a los desarrolladores la propiedad de la aplicación de Android, por lo que ningún otro desarrollador puede lanzar la misma aplicación con una firma diferente. Incluso si su proyecto es de código abierto y no planea lanzarlo en ninguna tienda y distribuirlo a través de la página de lanzamiento de Github o alguna otra herramienta, aún necesita crear y firmar su compilación de Android. Hay varias razones por las que se requiere una compilación de versión:

  • Actuación: una compilación de lanzamiento está optimizada para el rendimiento, con código y recursos despojados de información de depuración y bibliotecas innecesarias.
  • Seguridad: Firmar la aplicación ayuda a garantizar su integridad y autenticidad, evitando problemas de seguridad y daños a los usuarios.
  • Actualizar: La firma permite actualizaciones de aplicaciones eficientes y seguras y mantiene la confianza del usuario.

Puede usar fácilmente la función integrada Generar paquete firmado/APK de Android Studio. Aún así, hacer esto manualmente para cada versión es engorroso, ni es seguro compartir su archivo de almacén de claves y contraseña con otros pares para crear una compilación de versión. Como dice la cita

Todo lo que haga más de dos veces debe automatizarse.

En este blog examinaremos cómo puedes usarlo. Acciones de GitHub para automatizar el proceso de firma de compilaciones de Android y la creación de versiones en GitHub. Cubriremos los conceptos básicos de las acciones de GitHub, los pasos para crear y firmar su aplicación de Android y las mejores prácticas para garantizar que su aplicación sea segura y esté lista para su lanzamiento. Entonces, profundicemos y aprendamos cómo compilar y firmar de forma segura su aplicación de Android mediante acciones de GitHub. Antes de que podamos comenzar la implementación real, debemos configurar las configuraciones de firma en nuestra compilación a nivel de aplicación. que configuraremos más adelante. El siguiente código utiliza nuestro archivo de almacenamiento de claves decodificado y variables de entorno para crear app.android {…signingConfigs {release {storeFile file(«keystore.jks»)storePassword System.getenv(«SIGNING_STORE_PASSWORD»)keyAlias ​​​​System. getenv( «SIGNING_KEY_ALIAS «)keyPassword System.getenv(«SIGNING_KEY_PASSWORD»)}}…}Para firmar su compilación de Android, necesita un archivo keystore (.jks). Si aún no tiene su archivo de almacén de claves, puede seguir el proceso en el documento oficial aquí.

No agregue su archivo de almacén de claves a su proyecto y empújelo junto con su archivo de proyecto.

Para la codificación, utilizamos el popular esquema de codificación Base64. Este esquema permite la conversión de datos binarios en una representación textual. La representación de texto nos permite almacenar el archivo como texto en nuestros secretos de GitHub y luego decodificarlo de nuevo a nuestro archivo KeyStore original en el proceso de flujo de trabajo de GitHub. Para codificar el archivo, use estos comandos según su máquina. Mac: base64 –i [Jks FilePath] –I [EncodeFilePath].txtAlpine y Ubuntu:base64 [Jks FilePath] > [EncodeFilePath].txte.g. `base64 – entrada ~/Documento/Proyecto/keystore.jks – salida encoded_keystore.b64 Debería ver un nuevo archivo llamado encoded_keystore.txt. GitHub Actions es la herramienta de Github para automatizar flujos de trabajo de CI/CD de software. Almacene y administre información confidencial a la que sus flujos de trabajo necesitan acceso, como claves de API, tokens o contraseñas. GitHub Secrets lo ayuda a evitar la exposición de información confidencial en su código o flujos de trabajo. Los secretos se pueden usar para almacenar valores cifrados y solo se descifran en tiempo de ejecución, y nunca se muestran en los registros ni se exponen a los usuarios. Usamos variables de entorno en out build.gradle en signatureConfigs. Para acceder a estas variables, necesitamos crear secretos de GitHub con el mismo nombre. SIGNING_KEY_STORE_BASE64 Para almacenar el texto codificado en base64 que creamos en el paso anterior. Copie el contenido del archivo y péguelo en la consola de GitHub como un secreto. SIGNING_STORE_PASSWORD Para almacenar la contraseña que utilizó al crear el archivo de almacén de claves (.jks) Ruta o nombre de archivo. Este es un secreto para almacenar la ruta y el nombre del archivo del almacén de claves decodificado (.jks) para que el flujo de trabajo de decodificación pueda acceder fácilmente a ellos. Establezca el valor en keytore.jkson:push:branches:mastertags:- v*release_build:runs-on : ubuntu-latestif: beginWith(github.ref, ‘refs/tags/’)steps:- uses: actions/checkout@ v2 .6.0- nombre: Setup JAVA 11uses: actions/setup-java@v3with:distribution: ‘corretto’ Versión de Java: 11- name: Cache Gradle and Wrapperuses: actions/cache@v2with:path: |~/.gradle/ caches~ /.gradle/wrapperkey: ${{ runner.os }}-gradle-${{ hashFiles (‘**/*.gradle*’) }}#1 – nombre: Decode Keystoreenv:ENCODED_STRING: ${{ secretos .SIGNING_KEY_STORE_BASE64 }}SIGNING_KEY_STORE_PATH: ${{ secrets.SIGNING_KEY_STORE_PATH }}ejecutar: |echo $ENCODED_STRING > keystore- b64.txtbase64 -d keystore-b64.txt > $SIGNING_KEY_STORE_PATH#2- name: Build Release apkenv:SIGNING_KEY_STORE_PATH: ${{ secrets. SIGNING_KEY_STORE_PATH }}SIGNING_KEY_ALIAS: ${{ secrets.SIGNING_KEY_ALIAS }}SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD }}SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD }}run: ./gradlew assemblRelease- nombre: Build-Release_STOPANINGTH_Bundleen: ${{ secrets.SIGNING_KEY_STORE_PATH }}SIGNING_KEY_ALIAS: ${{ secrets.SIGNING_KEY_ALIAS }}SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD }}SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD }}run: ./gradlew bundle.Release#3- nombre : Cargue la compilación de lanzamiento en artefactos: actions/upload-artifact@v3with:name: release-artifactspaths: |app/build /outputs/apk/release/app/build/outputs/bundle/release/#4 – name: Github Release builduses : softprops/action-gh-release@v1with:generate_release_notes: trueprerelease: truefiles: |app/build/outputs/apk /release/app-release.apkapp/build/outputs/bundle/release/app-release.aab Este es el job para crear un APK de lanzamiento y un paquete, cargar artefactos y, finalmente, crear un lanzamiento. Este es el trabajo release_build. Esto se ejecuta en ubuntu-latest y esta condición «startsWith(github.ref, ‘refs/tags/’)» garantiza que este trabajo solo se activa cuando el valor de la etiqueta se envía a la rama principal. Saltaré directamente Descifrar almacén de claves paso, pero si no está familiarizado con los pasos anteriores, debe leer mi artículo anterior, expliqué esto en él.#1 Descifrar almacén de clavesPrimero creamos la variable env para usar en el comando. ejecutar: ejecuta 2 comandos.

  • Primero guarde los datos de texto del almacén de claves codificado en keystore-b64.txt
  • En segundo lugar, para decodificar el texto codificado a su valor original.

#2 Build Release APK y paquete./gradlew ensamblarRelease y ./gradlew bundleRelease compilarán el apk de lanzamiento y el paquete respectivamente en la carpeta de compilación de su proyecto, a la que se accederá para cargar en el siguiente paso.#3 Cargue la versión de lanzamiento en ArtifactsEn este paso, usaremos la acción de GitHub del artefacto de carga para cargar nuestras compilaciones de lanzamiento. Esta acción toma las múltiples rutas de los artefactos que desea cargar. De forma predeterminada, Gradle genera un APK con firma de lanzamiento en esta ruta app/build/outputs/apk/release/ y paquetes en esta ruta app/build/outputs/bundle/release / Así que usamos estas dos rutas.#4 Crear lanzamiento de GithubEn este paso, usaremos action-gh-release para crear un lanzamiento para su proyecto. De forma predeterminada, el nombre de la versión es la etiqueta enviada a la rama principal. Esta acción acepta la entrada para hacer que el lanzamiento de GitHub sea más personalizable e informativo.generate_release_notes Genera las notas de lanzamiento de forma gratuita desde su último lanzamiento Indicador previo al lanzamiento de si archivos Globs delimitados por saltos de línea de rutas a activos para cargar para el lanzamiento Vea más entradas en el repositorio de GitHub. A continuación se muestra la publicación que generará algo como esto para usted.Presione la etiqueta en la rama principal, luego vaya a la pestaña Acciones en su proyecto y vea el flujo de trabajo de lanzamiento en acción. Esto muestra todos los pasos tomados para completar este trabajo.En este artículo, discutimos cómo podemos automatizar y simplificar el proceso de compilación de la versión del proyecto de Android sin comprometer nuestro archivo de almacén de claves al cargarlo en el proyecto como un archivo temporal que se usa para compilar la versión. Si está ejecutando un repositorio público, esta estrategia es extremadamente útil. La desventaja es que el archivo KeyStore se decodifica temporalmente al archivo original durante todo el proceso de flujo de trabajo. Esta solución se puede aplicar a cualquier otra canalización de CI que admita el almacenamiento de secretos, no solo a los flujos de trabajo de GitHub. Al configurar este flujo de trabajo, puede automatizar el proceso de compilación, firmar la compilación de versión y distribuirla a sus usuarios. Esto puede ayudarlo a ahorrar tiempo y esfuerzo y agilizar y mejorar el proceso de aprobación. Con la experiencia de GitHub Actions al alcance de su mano, puede concentrarse en crear su aplicación y ofrecer nuevas funciones a los clientes mientras GitHub se encarga del resto.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.